c++ - 用于广告牌的 D3DXSPRITE 的 3d 替代方案

标签 c++ directx

我希望在我的3d 世界 (directx 9) 中发布太阳图像。

创建 D3DXSPRITE在某些情况下很棒,但它只是一个 2d 对象,不能作为 3d 对象存在于我的“世界”中。什么是广告牌的替代方法,类似于 d3dxsprite ?我该如何实现?

我目前找到的唯一选择是此链接:http://www.two-kings.de/tutorials/dxgraphics/dxgraphics17.html这似乎不起作用

最佳答案

以对象 vCenter 为中心。该对象的宽度和高度为 (w,h)。

首先你需要你的相机到广告牌 vector 。这是计算为 vCamToCen = normalise( vCamera - vCenter )。

然后您需要一个适当的粗略 vector 。这可以从 View 矩阵中提取(方便描述 here ,即第二列)。然后,您可以通过执行 vSide = vCamToCen x vUp 来计算侧 vector 。然后通过执行 vUp = vCamToCen x vSide 计算 REAL 向上 vector 。其中“x”是叉积。

您现在拥有制作广告牌所需的所有信息。

然后您可以按如下方式形成 4 个顶点。

const float halfW = w / 2.0f;
const float halfH = h / 2.0f;

const D3DXVECTOR3 vHalfSide = vSide * halfW;
const D3DXVECTOR3 vHalfUp = vUp  * halfH;

vertex[0].pos = vCenter;
vertex[1].pos = vCenter;
vertex[2].pos = vCenter;
vertex[3].pos = vCenter;

vertex[0].pos -= vHalfSide;
vertex[0].pos -= vHalfUp;

vertex[1].pos += vHalfSide;
vertex[1].pos -= vHalfUp;

vertex[2].pos += vHalfSide;
vertex[2].pos += vHalfUp;

vertex[3].pos -= vHalfSide;
vertex[3].pos += vHalfUp;

用这些顶点构建你的 2 个三角形,并像往常一样通过你的管道(即使用你的普通 View 和投影矩阵)。

关于c++ - 用于广告牌的 D3DXSPRITE 的 3d 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1703006/

相关文章:

c++ - 如何遍历类似场景图的树结构?

c# - HLSL:有问题的像素着色器代码(采样时 alpha 为零)?

Linux 的 C++ 对象序列化

c++ - 从文件中读取十六进制值 (C++)

c++ - 如何使用 stb_truetype 在 directx9 中渲染文本?

c# - 如何在 SharpDX 上获取 Direct2D 位图的像素颜色

c - 在 C 中替代 __uuidof

c++ - 从 istream 读取输入直到 EOF

c++ - 从 std::string 中删除空格的最佳方法

c++ - C++使用Visual Studio 2020不能使用.length()