|
以下是我的一个简单的刷新函数。问题出在里面的ShowXYZ()未正确执行。
void Render(){
D3DXMATRIX ViewMatrix=Circumroutate();//Circumroutate()是一个变换world矩阵的自定义函数,ViewMatrix用以保存未变之前的world矩阵,好用来在最后还原world。
lp3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(255,255,255),1,0);
lp3DDevice->BeginScene();
lp3DDevice->SetStreamSource(0,lpVexBuffer,sizeof(CUSTOMVERTEX));
lp3DDevice->SetVertexShader(CUSTOMVERTEXFVF);
lp3DDevice->SetTexture(0,lpTexture1);
lp3DDevice->SetTexture(1,lpTexture2);
lp3DDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
lp3DDevice->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_MODULATE);
lp3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2*nCylinderSegments);
lp3DDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,2*nCylinderSegments+2,nCylinderSegments);
lp3DDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,3*nCylinderSegments+4,nCylinderSegments);
//上面3段,画出了一个圆柱体。
ShowXYZ();//!!!!!!请注意这里!!!!!!(这个函数在下面贴出)ShowXYZ()这个函数的功能是显示出第一个顶点的坐标。可是,实际运行中,圆柱旋转时显示的结果全是0,这显然不正确。
lp3DDevice->EndScene();
lp3DDevice-> resent(NULL,NULL,NULL,NULL);
lp3DDevice->SetTransform(D3DTS_WORLD,&ViewMatrix);
}
ShowXYZ()函数:
void ShowXYZ(){
CUSTOMVERTEX *pVertex;
lpVexBuffer->Lock(0,0,(BYTE**)&pVertex,0);
// pVertex+=20;
int x=pVertex->x;
int y=pVertex->y;
int z=pVertex->z;
lpVexBuffer->Unlock();
DisplayScore(ItoA(x),10,10);//Char* ItoA(int)是将int转换成char*,后面两个参数是坐标。
DisplayScore(ItoA(y),20,20);
DisplayScore(ItoA(z),30,30);
}
还请哪位明白的解答一下…… |
|