From 37dfd0ed491c17182864c637e5fc3a4929a7c40f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 6 Aug 2018 09:57:36 +0200 Subject: [PATCH] Trade: document how MeshData can be further transformed. --- doc/snippets/MagnumTrade.cpp | 35 +++++++++++++++++++++++++++++++---- src/Magnum/Trade/MeshData2D.h | 8 ++++++++ src/Magnum/Trade/MeshData3D.h | 8 ++++++++ 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/doc/snippets/MagnumTrade.cpp b/doc/snippets/MagnumTrade.cpp index 3a859cd5c..41f23f5e1 100644 --- a/doc/snippets/MagnumTrade.cpp +++ b/doc/snippets/MagnumTrade.cpp @@ -27,8 +27,11 @@ #include #include "Magnum/PixelFormat.h" +#include "Magnum/MeshTools/Transform.h" #include "Magnum/Trade/AbstractImporter.h" #include "Magnum/Trade/ImageData.h" +#include "Magnum/Trade/MeshData2D.h" +#include "Magnum/Trade/MeshData3D.h" #include "Magnum/Trade/ObjectData2D.h" #include "Magnum/Trade/ObjectData3D.h" #include "Magnum/Trade/PhongMaterialData.h" @@ -163,8 +166,20 @@ else #endif { -Trade::ObjectData2D& foo(); -Trade::ObjectData2D& data = foo(); +Trade::MeshData2D& foo(); +Trade::MeshData2D& data = foo(); +/* [MeshData2D-transform] */ +Matrix3 transformation = + Matrix3::translation({3.0f, -2.0f})* + Matrix3::scaling(Vector2{2.0f})* + Matrix3::rotation(45.0_degf); +MeshTools::transformPointsInPlace(transformation, data.positions(0)); +/* [MeshData2D-transform] */ +} + +{ +Trade::ObjectData2D& baz(); +Trade::ObjectData2D& data = baz(); /* [ObjectData2D-transformation] */ Matrix3 transformation = Matrix3::from(data.rotation().toMatrix(), data.translation())* @@ -174,8 +189,20 @@ static_cast(transformation); } { -Trade::ObjectData3D& bar(); -Trade::ObjectData3D& data = bar(); +Trade::MeshData3D& bar(); +Trade::MeshData3D& data = bar(); +/* [MeshData3D-transform] */ +Matrix4 transformation = + Matrix4::translation({3.0f, 1.5f, -2.0f})* + Matrix4::rotationX(45.0_degf); +MeshTools::transformPointsInPlace(transformation, data.positions(0)); +MeshTools::transformVectorsInPlace(transformation, data.normals(0)); +/* [MeshData3D-transform] */ +} + +{ +Trade::ObjectData3D& fizz(); +Trade::ObjectData3D& data = fizz(); /* [ObjectData3D-transformation] */ Matrix4 transformation = Matrix4::from(data.rotation().toMatrix(), data.translation())* diff --git a/src/Magnum/Trade/MeshData2D.h b/src/Magnum/Trade/MeshData2D.h index 5fb0067a9..3abfb4a15 100644 --- a/src/Magnum/Trade/MeshData2D.h +++ b/src/Magnum/Trade/MeshData2D.h @@ -42,6 +42,14 @@ namespace Magnum { namespace Trade { Provides access to mesh data and additional information, such as primitive type. + +It's possible to use @ref MeshTools::transformPointsInPlace() and +@ref MeshTools::transformVectorsInPlace() to do transformations on the stored +vertex data. For example, baking a particular translation + rotation + scaling +directly to vertex positions: + +@snippet MagnumTrade.cpp MeshData2D-transform + @see @ref AbstractImporter::mesh2D(), @ref MeshData3D */ class MAGNUM_TRADE_EXPORT MeshData2D { diff --git a/src/Magnum/Trade/MeshData3D.h b/src/Magnum/Trade/MeshData3D.h index 0f69a3103..c951681c9 100644 --- a/src/Magnum/Trade/MeshData3D.h +++ b/src/Magnum/Trade/MeshData3D.h @@ -42,6 +42,14 @@ namespace Magnum { namespace Trade { Provides access to mesh data and additional information, such as primitive type. + +It's possible to use @ref MeshTools::transformPointsInPlace() and +@ref MeshTools::transformVectorsInPlace() to do transformations on the stored +vertex data. For example, baking a particular translation + rotation directly +to positions and normals: + +@snippet MagnumTrade.cpp MeshData3D-transform + @see @ref AbstractImporter::mesh3D(), @ref MeshData2D */ class MAGNUM_TRADE_EXPORT MeshData3D {