DirectX和DirectXTK转换限制
我使用显示三维模型,在“”之后显示我的棱锥体: 尝试变换对象时,缩放和旋转效果很好,但我不确定如何移动对象(平移)。基本上,我正在寻找一种算法,该算法根据当前相机位置、焦距、视口和渲染模型(DirectX工具包为我提供了边界框,使其“大小”)确定XYZ平移的最小值和最大值,以便对象保持可见 无论视口大小如何,边界框总是相同的,因此如何将其大小与视口进行比较 请原谅我的生疏,至少现在我还不是3D开发者 绘制三角形的“简单渲染”示例:DirectX和DirectXTK转换限制,directx,directx-11,direct3d,Directx,Directx 11,Direct3d,我使用显示三维模型,在“”之后显示我的棱锥体: 尝试变换对象时,缩放和旋转效果很好,但我不确定如何移动对象(平移)。基本上,我正在寻找一种算法,该算法根据当前相机位置、焦距、视口和渲染模型(DirectX工具包为我提供了边界框,使其“大小”)确定XYZ平移的最小值和最大值,以便对象保持可见 无论视口大小如何,边界框总是相同的,因此如何将其大小与视口进行比较 请原谅我的生疏,至少现在我还不是3D开发者 绘制三角形的“简单渲染”示例: Matrix proj = Matrix::CreateSca
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],但此处的标准化值不起作用。TL:DR:若要在世界各地移动模型,请创建一个转换矩阵,并使用
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转换的基本回顾开始,特别是世界->视图->投影转换管道
SetViewport
信息(也称“剪辑”坐标到像素坐标的转换),执行将“-1到1”转换为渲染目标中像素位置的最后一步
SetWorld
、SetView
和SetProjection
。如果要同时设置所有三个setMatrix
,还有一个助手
本教程涉及最简单的渲染形式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);
此矩阵的目的基本上是“撤消”设置视口将执行的操作,以便您可以在简单的像素坐标中思考。它不适用于三维模型
在本教程中,我介绍了基本相机模型,但我将世界矩阵保留为标识,因此形状位于世界原点
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变换与点p由矩阵变换相同W*V*p