我正在使用D3DXVec3Project函數來獲取3D點的屏幕座標並繪製出現爲3D的2D線條。 顯而易見的結果是,即使對象應該位於線條的前面,繪製的線條也始終位於任何3D對象的頂部。如何在DirectX中繪製2D幾何體的Benind 3D對象? (D3D9)
這是我使用畫線的代碼:
void DrawLine(float Xa, float Ya, float Xb, float Yb, float dwWidth, D3DCOLOR Color)
{
if (!g_pLine)
D3DXCreateLine(d3ddev, &g_pLine);
D3DXVECTOR2 vLine[2]; // Two points
g_pLine->SetAntialias(0); // To smooth edges
g_pLine->SetWidth(dwWidth); // Width of the line
g_pLine->Begin();
vLine[0][0] = Xa; // Set points into array
vLine[0][1] = Ya;
vLine[1][0] = Xb;
vLine[1][1] = Yb;
g_pLine->Draw(vLine, 2, Color); // Draw with Line, number of lines, and color
g_pLine->End(); // finish
}
作爲一個例子我有稀土作爲3D球體和黃道的平面中的2D線的柵格,地球的一半是在頂部的黃道,所以地球的一半應該繪製在黃道網格上方,我使用整個網格的代碼總是在地球上,所以看起來整個星球都在網格之下。
下面是截圖:http://s13.postimg.org/3wok97q7r/screenshot.png
怎樣繪製3D對象後面的線?
好吧,我知道了現在的工作,這是岩石繪製在D3D9 3D行代碼:
LPD3DXLINE g_pLine;
void Draw3DLine(float Xa, float Ya, float Za,
float Xb, float Yb, float Zb,
float dwWidth, D3DCOLOR Color)
{
D3DXVECTOR3 vertexList[2];
vertexList[0].x = Xa;
vertexList[0].y = Ya;
vertexList[0].z = Za;
vertexList[1].x = Xb;
vertexList[1].y = Yb;
vertexList[1].z = Zb;
static D3DXMATRIX m_mxProjection, m_mxView;
d3ddev->GetTransform(D3DTS_VIEW, &m_mxView);
d3ddev->GetTransform(D3DTS_PROJECTION, &m_mxProjection);
// Draw the line.
if (!g_pLine)
D3DXCreateLine(d3ddev, &g_pLine);
D3DXMATRIX tempFinal = m_mxView * m_mxProjection;
g_pLine->SetWidth(dwWidth);
g_pLine->Begin();
g_pLine->DrawTransform(vertexList, 2, &tempFinal, Color);
g_pLine->End();
}
在3D中做網格不是更容易嗎?這樣可以自動處理深度內容。 –
@Adam Goodwin,是的,這就是我最初想要做的,但我不知道如何繪製3D線條,我該怎麼做?任何代碼示例? – Haalef
對不起,我不知道如何使用DirectX來完成它,但是在OpenGL中,您可以將繪製模式從填充的多邊形更改爲線條。 DirectX最有可能與此類似。感謝好友 –