|
|
星空是用点模拟星星,用点的运动来模拟飞船的运动。
单独渲染星空时,没有问题,是设置的白色。
当和别的物体一起渲染时就会跟最近那个物体纹理的颜色一样。
比如 Render3D()里最后渲染的是一个贴着黄色纹理的正方体,星星也就变成黄色的了。
不知道这是什么问题? 哪位高手告诉一下,谢谢了:)
我用directx8.
星星结构:
#define STAR_D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE) // 星星顶点格式,坐标和颜色
struct STAR_CUSTOMVERTEX
{
float x, y, z; // 坐标
DWORD color; // 颜色
}; // 星星顶点结构
下面是渲染函数:
//Setup the camera ready for 3D elements
Setup3DCamera();
//Now that the 3D camera is setup, render the 3D objects
Render3D();
// 移动星空
MoveStarfield();
// 渲染星空
Render_Starfield();
//Setup the camera ready for 2D elements
Setup2DCamera();
//Now that the 2D camera is setup, render the 2D objects
Render2D();
说明:
Setup3DCamera()里开启了灯光, Render_Starfield()时关闭了灯光, Setup2DCamera()也关闭了灯光。
渲染星空函数:
// 渲染星空
void CGame::Render_Starfield()
{
// 关闭z缓冲
pDev->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
// 关闭灯光,这样才能看见我们的星空
pDev->SetRenderState(D3DRS_LIGHTING, FALSE);
// 设置world矩阵.
D3DXMATRIX matIdentity;
D3DXMatrixIdentity(&matIdentity);
pDev->SetTransform(D3DTS_WORLD, &matIdentity);
//Set stream source and vertex shader.
pDev->SetStreamSource(0, pVB, sizeof(STAR_CUSTOMVERTEX));
pDev->SetVertexShader(STAR_D3DFVF_CUSTOMVERTEX);
//Render.
pDev->DrawPrimitive(D3DPT_POINTLIST, 0, NUM_STARS);
}
显示如下:
 |
|