glPolygoneMode(GL_FRONT_AND_BACK, GL_FILL)
已打開,如何在此情況下獲取線框?沒有任何方法可以在沒有開關多邊形模式的情況下獲得線框渲染爲GL_LINE
?OpenGL中的線框
回答
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
填充填滿它...你想要線條。
編輯: 記住,你可以隨時把它放回去,以填補當你做,這樣
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
// add polygons here
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
你的問題不太清楚,但我想這要渲染兩個多邊形填充和線框。事實證明,這並不是那麼簡單。解決這個問題的一個經典的方式是:
glPolygonMode(... GL_FILL);
draw();
glPolygonOffset(param1, param2);
glPolygonMode(... GL_LINE);
draw();
但這也不是沒有問題,比如搞清楚的值傳遞給glPolygonOffset
等
從你的問題我假設你有一些巨大的中間件,並且只能訪問着色器,對嗎?
在這種情況下,建立在你的頂點着色變化的調用,例如,vertexID:
varying float vertexID; # in GLSL <= 3, or
out float vertexID; # in GLSL 4
並給它內置gl_VertexID:
vertexID = (float)gl_VertexID;
這樣,你」會從片段着色器中獲得對gl_VertexID的訪問權限,但可以插入!這很好,因爲它將是,例如,在一個頂點2,鄰居3和中間2.5。
所以你只需要檢查vertexID是否接近2(3):如果是的話,你接近邊緣。這應該足以用於可視化&調試。
in float vertexID; # or
varying float vertexID;
// blabla
if (fract(vertexID) < 0.1){
outcolor = vec4(1,0,0,0); # in glsl 4
}
請注意,您將只能以這種方式得到每個三角形的兩條邊。也許有些會變得稀薄(如果一個頂點ID是2,另一個是1000,那麼0.1的區域很少)。在渲染場景的所有時間
是的,你是對的:系統是着色器導向的(意味着只有可編程管道)。你的答案非常接近,謝謝! – infra
但它看起來很奇怪 - 在場景中爲所有對象添加着色器:( – infra
@infra我沒有收到最後一條評論,如果你願意,可以只爲一個網格設置它,我的意思是,如果你的系統允許的話。 – Calvin1602
- 1. OpenGL:線框疊加隱藏線刪除
- 2. openGL的領域,既線框和固體
- 3. OpenGL線框OBJ文件的渲染
- 4. OpenGL的線程
- 5. OpenGL中的視線矢量
- 6. openGL中的彩虹線es
- 7. 多線程OpenGL中的Segfault?
- 8. OpenGL ES中的法線
- 9. iOS OpenGL ES繪製網格線框
- 10. OpenGL:調試「單通線框渲染」
- 11. openGL的射線挑
- 12. OpenGL線條圖
- 13. 在OpenGL中繪製線條
- 14. 曲線在OpenGL中表示
- 15. OpenGL掃描線算法 - 它使用光線和邊界框嗎?
- 16. 如何在opengl中繪製線框球體
- 17. Android的OpenGL ES的法線
- 18. VC++ OpenGl框架
- 19. opengl中2d和3d線的區別
- 20. LWJGL中的OpenGL多線程(JAVA)
- 21. Cocos2D-iPhone中的多線程OpenGL編程
- 22. OpenGL中的顯示窗口和線段
- 23. Android:幾個線程中的OpenGL
- 24. OpenGL中的厚貝塞爾曲線
- 25. OpenGL流水線中的剪裁空間
- 26. OpenGL紋理中的對角線
- 27. OpenGL線條粗細
- 28. OpenGL法線誤解?
- 29. Android 2D opengl線圈
- 30. OpenGL線條邊界
神祕的着色器(或黑魔法與α-深度融合)的任何答案被接受 – infra
glPolygoneMode(GL_FRONT_AND_BACK,GL_FILL)是,我無法將其關閉 – infra
你能告訴我們爲什麼你不能關掉它? – Hannesh