2012-07-20 45 views
1

我嘗試使用D3DPT_TRIANGLELIST時遇到問題。下面的例子來自一本書,所以我沒有看到問題是什麼。D3DPT_TRIANGLELIST無法正常工作

VertexData:

ColorVertex *v; 

Triangle->Lock(0,0,(void**)&v,0); 

v[0] = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255, 0,0)); 
v[1] = ColorVertex(0.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,255,0)); 
v[2] = ColorVertex(1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,0,255)); 

Triangle->Unlock(); 

製圖功能:

Device->SetFVF(ColorVertex::FVF); 
Device->SetStreamSource(0,Triangle,0,sizeof(ColorVertex)); 

D3DXMatrixTranslation(&World,-1.25f,0.0f,0.0f); 
Device->SetTransform(D3DTS_WORLD,&World); 

Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT); 
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); 

D3DXMatrixTranslation(&World,1.25f,0.0f,0.0f); 
Device->SetTransform(D3DTS_WORLD,&World); 

Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); 
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); 

Device->EndScene(); 
Device->Present(0,0,0,0); 

但是,如果我從D3DPT_TRIANGLELIST更改爲例如D3DPT_LINELIST它繪製一條線。如果我使用D3DPT_POINTLIST,它僅爲每個DrawPrimite調用繪製一個點(像素)。

感謝您的幫助!

回答

0

您的頂點座標不會形成一個三角形,它們是一行三個點。

+0

感謝您的回覆。 但ColorVertex是一個結構,並且由於我傳遞了它內部的所有值,所以它應該設置x,y,z和3個不同點的顏色。當應用程序在它們之間劃一條線時,它們一起形成一個三角形? – Araw 2012-07-20 21:41:36

+0

YEs,對不起,我沒有很快回復,但看起來你知道我的意思了 – jcoder 2012-07-24 14:48:02

0

那麼,在解決問題後,我發現了MISTAKE(!),這是新手的好習慣。 這是在我面前的時候,它是在座標:

v[0] = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255, 0,0)); 
v[1] = ColorVertex(0.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,255,0)); 
v[2] = ColorVertex(1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,0,255)); 

這不能形成一個三角形的任何頂點的Y座標更新的變化。當然,可以繪製直線和點,因爲它們不需要Y座標來形成規格。所以一個解決方案是,例如:

v[0] = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255, 0,0)); 
v[1] = ColorVertex(0.0f, 1.0f, 2.0f, D3DCOLOR_XRGB(0,255,0)); 
v[2] = ColorVertex(1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,0,255));