1. m_d3dEnumeration.AppUsesDepthBuffer = TRUE; // 设置为FALSE,产生花屏。
2. m_pFont->RestoreDeviceObjects(); // 忽略后显示-“xx”指令的“xx”内存不能为读。
3. m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE); // 背面剔除
4. m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, // _TRIANGLESTRIP左下方三角无图,显示颜色(彩虹) 0,
0, 4, //number of vertices 0, 2 //number of primitives );
以下代码,用4个定点画个巨型,结果只显示一个三角形,
{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color
{ 150.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },
{ 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },
{ 20.0f, 50.0f, 0.5f, 1.0f, 0xff00ff0f, }, ........
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,0,2);
解决办法: 关闭背面剔除,显示2个三角,但不是矩形。http://bbs.gameres.com/showthread.asp?threadid=29028
"可以画出两个三角形的,却组不成正方形,你看不到,是因为法线在反面,设定为双面渲染你就知道了!"
10月16日:
| HRESULT DrawPrimitiveUP( D3DPT_POINTLIST, //D3DPRIMITIVETYPE PrimitiveType 图元类型 |
DrawPrimitiveup()函数的参数包括要绘制的图元类型、图元数量、保存要绘制的数据数组、顶点流大小。
第一个参数是图元类型,如果要绘制的图元是一些点,那么该参数值可以设为D3DPT_POINTLIST;如果要绘制的图元是一些线段,那么该参数值可以设为D3DPT_LINELIST(例如:点1和点2连接,点3和点4连接);如果要绘制的图元是连接的线段,那么该参数值可以设为D3DPT_LINESTRIP(例如:点1和点2相连,点2和点3相连);如果要绘制的图元是一些离散的三角形,那么该参数值可以设为D3DPT_TRIANGLELIST(例如:点1、点2和点3构成一个三角形,而点4、点5和点6构成另一个三角形);如果要绘制的图元是一些相连的三角形,那么该参数值可以设为D3DPT_TRIANGLESTRIP(例如:点1、点2和点3构成一个三角形,点2、点3和点4构成另一个三角形);也可以设为D3DPT_TRIANGLEFAN(例如:点1、点2和点3构成一个三角形,而点1、点3和点4构成另一个三角形)。当处理三角形时,所选的三角形类型取决于将数据发送给渲染API的方式。如果发送给Direct3D API一列三角形,而三角形中的每个点互不相同,那么D3DPT_TRIANGLELIST就是最佳选择。其余参数非常简单明了。 第二个参数是发送给函数的图元总数。如果将要绘制10个三角形,那么应该设该参数为10,除非只想绘制某一部分图元。 第三个参数是发送给该函数的图元数据数组。 第四个参数和最后一个参数是每个顶点的大小(单位:字节)。如果每个顶点都只指定了x、y、z浮点坐标位置数据,那么该参数值应该是12个字节。这因为它包含三个值,每个值分别是4个字节。