首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectX和DirectXTK翻译限制

DirectX和DirectXTK翻译限制
EN

Stack Overflow用户
提问于 2021-06-01 16:40:28
回答 1查看 111关注 0票数 0

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

当试图转换对象时,缩放和旋转效果很好,但我不知道如何移动对象(转换)。基本上,我正在寻找一种算法,根据当前摄像机的位置、焦点、视口和呈现的模型( DirectX工具包给我的边界框,所以它是“大小”)确定XYZ转换的最小和最大值,以便对象保持可见。

无论视图端口大小,边框总是相同的,那么如何比较它的大小与我的视图端口呢?

请原谅我的新鲜感,我不是3D开发人员,至少现在还不是。

绘制三角形的“简单呈现”示例:

代码语言:javascript
复制
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,但这里的标准化值不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-01 21:15:43

TL:将您的模型移动到世界各地,为翻译创建一个矩阵,并将其设置为SetWorld的世界矩阵。

代码语言:javascript
复制
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 -> 投影转换管道。

  1. world变换执行仿射变换,以获得您要呈现到它的“世界”位置的模型。(a.k.a.“局部坐标到世界坐标转换”)。
  2. 视图转换执行转换,使世界位置进入摄像机的视角(即位置和方向)(即。“查看坐标转换的世界坐标”)。
  3. 投影转换执行转换,使视图位置进入实际硬件使用的规范"-1到1“范围,包括任何透视图投影(即.a)。视图坐标到“剪辑”坐标转换)。
  4. 硬件本身执行最后一步,根据Direct3D SetViewport信息(即k.a)将"-1到1“转换为呈现目标中的像素位置。“剪辑”坐标到像素坐标转换)。

这篇Direct3D 9时代的文章有点过时,但它很好地涵盖了整个概念。

在DirectX工具包BasicEffect系统中,对于每个矩阵都有不同的方法:SetWorldSetViewSetProjection。如果您想同时设置所有三个SetMatrices,也有一个助手。

简单渲染教程关注最简单的渲染形式,即2D渲染,您希望提供的坐标在自然的“像素坐标”中。

代码语言:javascript
复制
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将做什么,以便您可以在简单的像素坐标中进行思考。它不适合三维模型。

三维造型教程中,我介绍了基本的相机模型,但我将世界矩阵作为标识,因此形状位于世界原点。

代码语言:javascript
复制
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相同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67792814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档