[程式] 用DirectX 畫 Sierpinski 三角形

看板GameDesign (遊戲設計)作者 (彩虹總在轉身後看見)時間17年前 (2007/06/06 14:20), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
我在網路上看到有人用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
不能在BeginScene之下lock緩衝區再呼叫DrawTriangle?
06/16 14:20, 1F
文章代碼(AID): #16Pb8Q2d (GameDesign)
文章代碼(AID): #16Pb8Q2d (GameDesign)