2014-02-08 154 views
1

我想在我的DirectX 11應用程序中畫一條線。我希望它有恆定寬度(不取決於距離相機的距離),但它必須是空間(3D)中的線,所以類似線框模式中的對象線。我會用一些着色器在一個充滿其他對象的場景中渲染我的行。在DirectX 11(C++)中繪製直線的最簡單方法?

用C++(而不是C#)在DirectX 11中實現它的最好和最簡單的方法是什麼?

代碼示例可以理解的;)

+3

您可能想詳細說明爲什麼您不能在* IASetPrimitiveTopology *調用中簡單地使用D3D11_PRIMITIVE_TOPOLOGY_LINELIST。似乎涵蓋大部分需求。 –

+0

我一直無腦;)當然,謝謝。我想這將是最簡單的解決方案。仍然 - 它會是最快的嗎?從D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST切換到D3D11_PRIMITIVE_TOPOLOGY_LINELIST每一幀(我不僅要渲染線條,而且要渲染原始圖像)?順便說一句,你可以發表你的評論,因此我可以標記它嗎? – PolGraphic

+0

讓我評論一個答案,很高興幫助!我不知道「最快」,但它從來不是我的瓶頸。 –

回答

2

最常見的解決辦法是在你的IASetPrimitiveTopology呼叫使用D3D11_PRIMITIVE_TOPOLOGY_LINELIST。

我懷疑(但沒有配置文件)它也是渲染線條的一個非常快速的方式。在您的評論中,您提到切換基本拓撲設置的成本。我會說成本是微不足道的,因爲它歸結爲每幀一個狀態切換(首先渲染原語,最後一行)。

+0

在窗口模式下,我的應用按照fraps使用*非常*未優化的循環(使用定時器)以64 FPS運行。通過在同一個渲染事件中內聯多次調用Render(),我能夠將渲染速度提高到150 fps。長話短說,在我看到fps的最小下降之前,我必須渲染超過1800行(使用linelist)。這是渲染一個位圖和一個文本窗口的頂部。相當快。 –