我使用DirectX工具包显示3d模型,在“渲染模型”之后显示,并显示我的金字塔:

当试图转换对象时,缩放和旋转效果很好,但我不知道如何移动对象(转换)。基本上,我正在寻找一种算法,根据当前摄像机的位置、焦点、视口和呈现的模型( DirectX工具包给我的边界框,所以它是“大小”)确定XYZ转换的最小和最大值,以便对象保持可见。
无论视图端口大小,边框总是相同的,那么如何比较它的大小与我的视图端口呢?
请原谅我的新鲜感,我不是3D开发人员,至少现在还不是。
绘制三角形的“简单呈现”示例:
Matrix proj = Matrix::CreateScale( 2.f/float(backBufferWidth),
-2.f/float(backBufferHeight), 1.f)
* Matrix::CreateTranslation( -1.f, 1.f, 0.f );
m_effect->SetProjection(proj);表示标准化三角形大小为1,1,1,但这里的标准化值不起作用。
发布于 2021-06-01 21:15:43
TL:将您的模型移动到世界各地,为翻译创建一个矩阵,并将其设置为SetWorld的世界矩阵。
Matrix world = Matrix::CreateTranslation( 2.f, 1.f, 3.f);
m_effect->SetWorld(world);
// Also be sure you have called SetView and SetProjection for the 3D camera setup
//covered in the 3D shapes / Rendering a model tutorial您应该从3D转换的基本回顾开始,特别是world -> view -> 投影转换管道。
SetViewport信息(即k.a)将"-1到1“转换为呈现目标中的像素位置。“剪辑”坐标到像素坐标转换)。这篇Direct3D 9时代的文章有点过时,但它很好地涵盖了整个概念。
在DirectX工具包BasicEffect系统中,对于每个矩阵都有不同的方法:SetWorld、SetView和SetProjection。如果您想同时设置所有三个SetMatrices,也有一个助手。
简单渲染教程关注最简单的渲染形式,即2D渲染,您希望提供的坐标在自然的“像素坐标”中。
Matrix proj = Matrix::CreateScale( 2.f/float(backBufferWidth),
-2.f/float(backBufferHeight), 1.f)
* Matrix::CreateTranslation( -1.f, 1.f, 0.f );
m_effect->SetProjection(proj);这个矩阵的目的基本上是“撤消”SetViewport将做什么,以便您可以在简单的像素坐标中进行思考。它不适合三维模型。
在三维造型教程中,我介绍了基本的相机模型,但我将世界矩阵作为标识,因此形状位于世界原点。
m_view = Matrix::CreateLookAt(Vector3(2.f, 2.f, 2.f),
Vector3::Zero, Vector3::UnitY);
m_proj = Matrix::CreatePerspectiveFieldOfView(XM_PI / 4.f,
float(backBufferWidth) / float(backBufferHeight), 0.1f, 10.f);在绘制模型教程中,我还将世界矩阵作为恒等式。我在基本游戏数学教程中了解了这方面的基础知识。
仿射变换的一个优点是,您可以通过将各个转换连接在一起来同时执行它们。点p由矩阵W变换,再由矩阵V变换,再由矩阵P变换,与用矩阵
W * V * P变换的点p相同。
https://stackoverflow.com/questions/67792814
复制相似问题