C++ 广告牌D3DXSPRITE的3d替代方案

C++ 广告牌D3DXSPRITE的3d替代方案,c++,directx,C++,Directx,我想在我的3d世界(directx 9)上登一张太阳图片广告牌 在某些情况下,创建一个D3DXSPRITE很不错,但它只是一个2d对象,不能作为3d对象存在于我的“世界”中。广告牌的替代方法是什么,类似于d3dxsprite?我如何实现它 我目前找到的唯一替代方法是此链接:它似乎不起作用以对象vCenter为中心。对象的宽度和高度为(w,h) 首先,你需要你的相机到广告牌向量。计算公式为vCamToCen=normalise(vCamera-vCenter) 然后需要一个适当的粗糙上方向向量。这

我想在我的3d世界(directx 9)上登一张太阳图片广告牌

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


我目前找到的唯一替代方法是此链接:它似乎不起作用

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

首先,你需要你的相机到广告牌向量。计算公式为vCamToCen=normalise(vCamera-vCenter)

然后需要一个适当的粗糙上方向向量。这可以从视图矩阵(即第二列)中提取。然后可以通过执行vSide=vCamToCen x vUp来计算边向量。然后通过执行vUp=vCamToCen x vSide计算实际上方向向量。其中“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;
用这些顶点构建两个三角形,并将其作为法线(即法线视图和投影矩阵)通过管道