0
爲了好玩,我試圖用(現代)OpenGL構建一個微型Blender。作爲它的一部分,我希望用戶能夠選擇頂點。每次用戶選擇一個頂點時,我都希望頂點變成紅色。我的問題與查找相交頂點無關,而是人們如何將拾取的頂點可視化。 我設法用油漆拾取三角形(而不是挑頂點)在我的片段着色器執行以下操作:在OpenGL中對網格進行Vizualizing頂點拾取
if(gl_PrimitiveID==intersectingFace)
color=vec4(1.0f,0.0f,0.0f,1.0f);
其中intersectingFace是保存meshe的交叉面的指標的統一。
爲了選擇一個頂點而不是一個面,我想將一個球面網格加載到我的場景中,縮小它並將其中心平移到相交頂點的位置。我想知道是否有一個更簡單的解決方案,這一個。
因爲我使用三角形作爲圖元,所以我在我提供的代碼中將當前處理的片段(又名三角形)的顏色設置爲紅色(如果它與交叉面板匹配)。 如果片段着色器輸出片段的顏色而不是頂點的顏色,如何設置頂點的顏色? –
是的,你說你有辦法找到選定的頂點嗎?一旦您知道所選頂點是「面號N」的「數字2」,那麼您的索引是3 * N + 2。你可以將它設置爲你的「indexTarget」,如果gl_VertexID == indexTarget,那麼你將它變成紅色。這只是一個例子,您想用作目標的有效索引值將受到您使用的是GL_ELEMENT_ARRAY_BUFFER和/或應用basevertex的影響。鏈接解釋了這個 – Edd
據我所知(如果我錯了,請糾正我)OpenGL繪製基元插入基元頂點的顏色到基元內的每個像素。如果我做了這樣的事情: if(gl_vertexID == 1)color = vec3(1.0f,0.0f,0.0f);在頂點着色器中,我不會得到一個紅色的頂點。我會得到一個原始的部分是紅色的(因爲片段顏色內插了頂點的顏色),這不是我正在尋找的。但沒有什麼被塗成紅色。 –