游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1917|回复: 4

菜鸟d3d问题3

[复制链接]

32

主题

377

帖子

378

积分

中级会员

Rank: 3Rank: 3

积分
378
发表于 2004-8-14 23:38:00 | 显示全部楼层 |阅读模式
以下是我的一个简单的刷新函数。问题出在里面的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-&gtresent(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);
       
}
还请哪位明白的解答一下……

0

主题

237

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
发表于 2004-8-15 00:32:00 | 显示全部楼层

Re:菜鸟d3d问题3

你是用Matrix Transform?砀淖?3d物件, 但?K?]有???改?Vertices的?抵? 所以?抵?]?是很正常的. 而且Vertex?抵刀??loat, 你??Q成int再display的?, ???????出?.

而且, 有趣的是你先Render, 後Transform, 但正?的???是先Transform, 後Render...

32

主题

377

帖子

378

积分

中级会员

Rank: 3Rank: 3

积分
378
 楼主| 发表于 2004-8-15 13:03:00 | 显示全部楼层

Re:菜鸟d3d问题3

我在Circumroutate()里面其实已经Transform了一次。

最后那个是我还原world用的。

请问:难道用tansform,各顶点的坐标不会改变吗?如果是这样,那么物体的旋转移动又是通过改变什么来的呢?是把整个3维坐标系改变了吗?

0

主题

237

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
发表于 2004-8-15 14:02:00 | 显示全部楼层

Re:菜鸟d3d问题3

Transform是不??淖?Vertices的local值的. Transform matrix後render的?|西就???ocal??Q??orld, 所以如果你只做一次matrix transform, 之後render所有物件, 都只???S那次的matrix作??Q. 若果你有三??移?游锛? 便?? transform1 > render1; transform2 > render2; transform3 > render3; 如此?推.

如果你不用transform matrix?硪??D物件, 便要用如D3DXVec3Transform等的工具?⒚恳??vertex按?定好的matrix??Q??orld值.

32

主题

377

帖子

378

积分

中级会员

Rank: 3Rank: 3

积分
378
 楼主| 发表于 2004-8-15 17:14:00 | 显示全部楼层

Re:菜鸟d3d问题3

谢了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-16 23:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表