我希望在 3d 世界(directx 9)中展示太阳图像。
在某些情况下创建D3DXSPRITE
非常棒,但它只是 2d 对象,并且不能作为 3d 对象存在于我的“世界”中。什么是广告牌的替代方法,类似于d3dxsprite
?我该如何实施呢?
我目前找到的唯一选择是此链接:http://www.two-kings.de/tutorials/dxgraphics/dxgraphics17.html似乎不起作用
答案 0 :(得分:2)
将对象的中心置于vCenter。该对象的宽度和高度为(w,h)。
首先你需要你的相机广告牌矢量。这是按vCamToCen = normalize(vCamera - vCenter)计算的。
然后你需要一个合适的粗糙向量。这可以从视图矩阵中提取(方便地描述here,即第二列)。然后,您可以通过执行vSide = vCamToCen x vUp来计算边向量。然后通过执行vUp = vCamToCen x vSide计算REAL向量。其中'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个三角形,并将其正常传递到您的管道中(即使用普通视图和投影矩阵)。