
圖里是虛幻引擎編輯器中渲染的線條,非常完美
這種線條特點是無論多遠都可以看的到無論多遠粗細都不會變,而且可以被其他mesh遮擋
請教怎么才能在圖形渲染API里做到渲染出這樣的線條?(改變繪制模式為Line模式不行,因為只能是那一種樣式,我想變一個樣子就不行了)
在我的認知里一切mesh都是三角形構成的,但是這種線條有點特別,要是用mesh實作一個線條的話遠的地方就看不到了,真的非常好奇到底該如何做到的不受距離影響
我能想到的方法:
1.構建一個四邊形面片,然后通過計算使其越遠的地方越寬,這樣可以就無論多遠看起來粗細都一樣了,但是感覺這個方法太笨了而且耗資源,肯定有更好的辦法
2.在直接螢屏上繪制(就是把矩陣切換到正交矩陣然后把兩個點的位置轉換為螢屏坐標然后繪制然后在還原矩陣) 但是這樣繪制出來的無論怎么樣都不會被其他物體遮擋,永遠在最前面
3.在光柵化這個步驟里自己控制顏色輸出(但是這些圖形api我沒發現到底該如何自己控制這個步驟)
求高人解答,真的是困惑了我好久的問題
uj5u.com熱心網友回復:
你還沒有理解3D API的作業在vertex shader 階段,把3d坐標變成NDC坐標,而NDC坐標的xy(例如0.5, 0.5)乘上螢屏大小(例如800, 800),就等于螢屏坐標(400, 400)。
其實3d只不過是一個數學游戲而已。
uj5u.com熱心網友回復:
fillmode 設成 wireframe 就行了dx9在RenderState里設
dx11在RasterizerState
dx12沒怎么用過,應該和11一樣,反正都支持hlsl5,不行就在效果框架里設
如果你想要UE這種效果,只顯示四邊面,不顯示三邊面,還得用其他方法,比如用線圖元,或者用GS做
uj5u.com熱心網友回復:
不不不,重點不是在說ue這種box型的線,我只是懶得draw一條線來截圖,直接拖出了一個box,要是有辦法畫一條線不管是什么形狀都很簡單了,
問題是改變渲染模式為wireframe畫出來的線只能是那一種樣式,比如無法改變粗細,或者我想外發光所以我在想怎么才能自己實作一個畫線的shader,然后問題就回到一樓說的那樣了(怎么樣才可以無論多遠都可以看的到)
uj5u.com熱心網友回復:
為什么會遠的地方看不到,你給我截張圖看看,不明白什么意思
uj5u.com熱心網友回復:

左邊是改變渲染模式渲染的線條,右邊是我自己實作的,但是明顯越遠越細直到看不到,而右邊是我想要達到的效果,無論多遠粗細都看起來一樣,多遠都看的到
uj5u.com熱心網友回復:
fillmode 設成 wireframe 就行了
dx9在RenderState里設
dx11在RasterizerState
dx12沒怎么用過,應該和11一樣,反正都支持hlsl5,不行就在效果框架里設
如果你想要UE這種效果,只顯示四邊面,不顯示三邊面,還得用其他方法,比如用線圖元,或者用GS做
不不不,重點不是在說ue這種box型的線,我只是懶得draw一條線來截圖,直接拖出了一個box,要是有辦法畫一條線不管是什么形狀都很簡單了,
問題是改變渲染模式為wireframe畫出來的線只能是那一種樣式,比如無法改變粗細,或者我想外發光所以我在想怎么才能自己實作一個畫線的shader,然后問題就回到一樓說的那樣了(怎么樣才可以無論多遠都可以看的到)
為什么會遠的地方看不到,你給我截張圖看看,不明白什么意思

左邊是改變渲染模式渲染的線條,右邊是我自己實作的,但是明顯越遠越細直到看不到,而右邊是我想要達到的效果,無論多遠粗細都看起來一樣,多遠都看的到
uj5u.com熱心網友回復:
怎么會出現這種效果,是用網格代替的線嗎?uj5u.com熱心網友回復:
怎么會出現這種效果,是用網格代替的線嗎?
wireframe模式畫出來的線就是這樣的,多遠都看起來粗細一樣
uj5u.com熱心網友回復:
怎么會出現這種效果,是用網格代替的線嗎?
wireframe模式畫出來的線就是這樣的,多遠都看起來粗細一樣
我說你自己實作那個,是用長方體代替的嗎,還是用什么別的方法做的?
dx9能設定點線圖元的尺寸,比較簡單
之后的版本,可以參考下dx9紅龍書里勾勒輪廓的例子,用退化四邊形去做
熟悉幾何著色器的話更容易些
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/44129.html
標籤:其它游戲引擎
上一篇:Vuforia怎么讓識別圖移動
