![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Direct3D
Direct3DX11
逍神
学习一门新的程序设计语言的唯一途径就是使用它编写程序
展开
-
2.8.2矩阵函数
DirectX Math库包含以下有用的矩阵相关函数:XMMATRIX XM_CALLCONV XMMatrixIdentity(); // Returns the identity matrix I单位化bool XM_CALLCONV XMMatrixIsIdentity( // Returns true if M is the identity matrixFXMMATRIX M); // ...原创 2018-04-26 21:03:10 · 587 阅读 · 0 评论 -
第4章 DIRECT3D初始化及4.1初步
Direct3D的初始化过程要求我们熟悉一些基本的Direct3D类型和基本的图形概念; 本章的第一部分和第二部分解决了这些要求。 然后我们详细介绍初始化Direct3D的必要步骤。 接下来,我们将采取一个小小的弯路来为实时图形应用程序引入准确的时序和时间测量。 最后,我们探索示例框架代码,该代码用于提供本书中所有演示应用程序遵循的一致接口。目标:1.了解Direct3D在3D硬件编程中的作用。2...原创 2018-04-27 21:24:58 · 196 阅读 · 0 评论 -
4.2 CPU / GPU交互
我们必须明白,在图形编程中,我们有两个处理器:CPU和GPU。 它们并行工作,有时需要同步。 为了获得最佳性能,目标是尽可能长时间保持忙碌状态并尽量减少同步。 同步是不可取的,因为这意味着一个处理单元在等待另一个处理单元完成一些工作时处于空闲状态; 换句话说,它破坏了并行性。关于同步与异步本博主其他博客也有描述,地址:https://blog.csdn.net/yaotuzhi/article/d...原创 2018-04-29 21:42:50 · 4353 阅读 · 1 评论 -
4.1.4交换链和翻页_4.1.12
4.1.4交换链和翻页为了避免在动画中闪烁,最好将整个动画帧绘制到称为后缓冲区的离屏纹理中。一旦整个场景被绘制到给定动画帧的后台缓冲区,它将作为一个完整的帧呈现给屏幕;通过这种方式,观看者不会在画框被观看时观看 - 观看者只能看到完整的画面。为实现这一点,硬件维护两个纹理缓冲区,一个称为前端缓冲区,另一个称为后端缓冲区。前端缓冲区存储当前显示在监视器上的图像数据,而下一帧动画正被绘制到后台缓冲区。...原创 2018-04-28 00:11:04 · 1114 阅读 · 0 评论 -
第3.6节 转换函数
我们总结了DirectX Math相关的转换函数供参考。// Constructs a scaling matrix:构造一个缩放矩阵:XMMATRIX XM_CALLCONV XMMatrixScaling(float ScaleX,float ScaleY,float ScaleZ); // Scaling factors缩放因子// Constructs a scaling matrix f...原创 2018-04-27 18:24:56 · 266 阅读 · 0 评论 -
总结1.6节
SIMD(single instruction multiple data)是什么?答:字面上看:单指令多数据,通过使用SIMD,是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。我们可以用一个SIMD指令而不是四个标量指令来完成4D矢量加法。在DirectX Math中,核心向量类型是XMVECTOR,它映射到SIM...原创 2018-04-26 20:51:14 · 82 阅读 · 0 评论 -
1.6.9浮点错误
关于在计算机上处理媒介的问题,我们应该了解以下内容。 在比较浮点数时,由于浮点不精确,必须小心。 我们预计相同的两个浮点数可能略有不同。 例如,在数学上,我们希望归一化矢量的长度为1,但在计算机程序中,长度将只是大约1.此外,对于任何实数p,数学上1p = 1,但是当我们只 有1的数值近似,我们看到提升到p次幂的近似值增加了误差; 因此,数值误差也会累积。 以下简短的程序说明了这些想法:#incl...原创 2018-04-26 20:04:47 · 450 阅读 · 0 评论 -
1.6.8矢量函数
DirectX Math提供以下功能来执行各种矢量操作。 我们用3D版本来说明,但是2D和4D有类似的版本; 2D和4D版本与3D版本具有相同的名称,除了2和4分别替代3。XMVECTOR XM_CALLCONV XMVector3Length( // Returns||v||FXMVECTOR V); // Input vXMVECTOR XM_CALLCONV XMVector3LengthS...原创 2018-04-26 19:57:59 · 2203 阅读 · 0 评论 -
1.6.7 Setter函数
DirectX Math提供以下功能来设置XMVECTOR的内容:// Returns the zero vector 0XMVECTOR XM_CALLCONV XMVectorZero();// Returns the vector (1, 1, 1, 1)XMVECTOR XM_CALLCONV XMVectorSplatOne();// Returns the vector (x, y, ...原创 2018-04-26 19:50:58 · 200 阅读 · 0 评论 -
1.6.6杂项
DirectX Math库定义了以下用于近似涉及π的不同表达式的常量:const float XM_PI = 3.141592654f;const float XM_2PI = 6.283185307f;const float XM_1DIVPI = 0.318309886f;const float XM_1DIV2PI = 0.159154943f;const float XM_PIDIV2 =...原创 2018-04-26 19:46:48 · 167 阅读 · 0 评论 -
1.6.5重载操作符
XMVECTOR有几个重载操作符用于执行向量加法,减法和标量乘法。XMVECTOR XM_CALLCONV operator+ (FXMVECTOR V);XMVECTOR XM_CALLCONV operator- (FXMVECTOR V);XMVECTOR& XM_CALLCONV operator+= (XMVECTOR& V1,FXMVECTOR V2);XMVECTOR...原创 2018-04-26 19:44:20 · 127 阅读 · 0 评论 -
1.6.4常量向量
常量XMVECTOR实例应使用XMVECTORF32类型。 以下是DirectX SDK的CascadedShadowMaps11示例中的一些示例:static const XMVECTORF32 g_vHalfVector = { 0.5f, 0.5f,0.5f, 0.5f };static const XMVECTORF32 g_vZero = { 0.0f, 0.0f, 0.0f,0.0f ...原创 2018-04-26 19:42:11 · 489 阅读 · 0 评论 -
1.6.3参数传递
为了提高效率,可以将XMVECTOR值作为参数传递给SSE / SSE2寄存器中的函数,而不是堆栈中的函数。可以通过此方式传递的参数数量取决于平台(例如,32位Windows,64位Windows和Windows RT)和编译器。因此,为了独立于平台/编译器,我们使用FXMVECTOR,GXMVECTOR,HXMVECTOR和CXMVECTOR类型来传递XMVECTOR参数;这些被定义为基于平台和...原创 2018-04-26 18:44:08 · 339 阅读 · 0 评论 -
1.6.2加载和存储方法
1.6.2加载和存储方法我们使用以下方法将数据从XMFLOATn加载到XMVECTOR中:XMVECTOR XM_CALLCONV XMLoadFloat2(_In_ const XMFLOAT2* pSource);XMVECTOR XM_CALLCONV XMLoadFloat3(_In_ const XMFLOAT3* pSource);XMVECTOR X...原创 2018-04-26 18:24:25 · 148 阅读 · 0 评论 -
1.6DIRECTX数学矢量及1.6.1矢量类型
我们·来看·看英文版翻译1.6 DIRECTX数学矢量 对于Windows 8及更高版本,DirectX Math是Direct3D应用程序的3D数学库,它是Windows SDK的一部分。该库使用SSE2(流式SIMD扩展2)指令集。对于128位宽的SIMD(单指令多数据)寄存器,SIMD指令可以在一条指令的四个32位浮点数或整数值上运行。这对矢量计算非常有用;例如,如果你看看矢量加法: ...原创 2018-04-25 23:53:03 · 193 阅读 · 0 评论