[程式] 用DirectX 畫 Sierpinski 三角形
我在網路上看到有人用DirectX9寫一個sierpinski三角形的程式....
想說也來寫看看......沒想到遇到很多問題......
我的問題是:
他寫的DrawTriangle這個函式不知道該放在那裡才好....
因為在進行遞迴...最後要畫出三角形(DrawTriangle)時
必須要lock頂點緩衝區.....
但是要怎麼一邊lock頂點緩衝區一邊送到BeginScene下render
在程式碼內的紅字就是我的問題所在....
有沒有人可以給我一點意見呢....謝謝各位
以下是那個大陸作者提供的二個程式碼:(他只給了二段函式的程式碼)
(怕侵權所以稍微修改一下)
**********************頂點結構****************
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw;
DWORD color;
};
*********************函式原型*******************
DrawTriangle( CUSTOMVERTEX vertex[] )
DrawSierpinski( CUSTOMVERTEX vertex[], int deepth )
*********************函式源碼**********************
void DrawTriangle(CustomVertex vertex[])
{
// 複製到頂點緩衝區
memcpy(pVertices,vertex,3 * sizeof(CustomVertex));
這段應該要放在Lock頂點緩衝區內吧....
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);
這段應該要放到BeginScene下吧....... QQ
}
void DrawSierpinski(CustomVertex vertex[],int deepth)
{
if(deepth == 0)
{
DrawTriangle(vertex);
return;
}else
{
// 計算三邊的中點
CustomVertex midVertex[] ={..................};
CustomVertex tempVertex[3];
//分三部分進行遞迴繪製
tempVertex[0] = vertex[0];
tempVertex[1] = midVertex[2];
tempVertex[2] = midVertex[1];
DrawSierpinski(tempVertex,deepth - 1);
tempVertex[0] = midVertex[2];
tempVertex[1] = vertex[1];
tempVertex[2] = midVertex[0];
DrawSierpinski(tempVertex,deepth - 1);
tempVertex[0] = midVertex[1];
tempVertex[1] = midVertex[0];
tempVertex[2] = vertex[2];
DrawSierpinski(tempVertex,deepth - 1);
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 134.208.26.227
→
06/16 14:20, , 1F
06/16 14:20, 1F
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章