作者insightful (彩虹总在转身後看见)
看板GameDesign
标题[程式] 用DirectX 画 Sierpinski 三角形
时间Wed Jun 6 14:20:05 2007
我在网路上看到有人用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
1F:→ jellyice:不能在BeginScene之下lock缓冲区再呼叫DrawTriangle? 06/16 14:20