2012-05-10 70 views
-1

是否有可能爲頂點着色器中的頂點中的所有頂點維護單個變量。 我的意思是可變的更新用在訪問第一個頂點應該反映在訪問第二個頂點....所有頂點的公共變量

+1

_updation_?哈哈哈(沒有冒犯性) – Shahbaz

+0

所以你想要的是有很多頂點都有相同的數據?所以當你改變一個時,所有這些都改變了?如果是這樣,請問有什麼意義? – Shahbaz

+1

有制服,它們在所有頂點之間是均勻的,但是你必須從着色器外面設置它們。我不確定你想要做什麼,但這聽起來像是一個可怕的方式來做到這一點,你可能需要一個幾何着色器。 – andyvn22

回答

2

思考頂點着色器的方法是所有頂點的着色器或多或少同時運行,至少在硬件可以支持的情況下運行。

因此,「在訪問第一個頂點時更新變量應該在訪問第二個頂點時反映」的整個想法是沒有意義的 - 第二個頂點可能最終在第一個頂點之前被處理。

0

您需要在着色器聲明勻變速,如:

uniform vec3 lightDir; 

,然後從C傳遞價值/ C++有:

glUseProgram(shader_id) 
GLint location = glGetUniformLocation(shader_id, "lightDir"); 
    if(location != -1)glUniform3f(location, x,y,z); 

編輯:

可以遍歷在幾何着色器(迴路gl_VerticesIn)的頂點,並設定每 - 外來數據。 http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/geometry-shader-examples/

+1

「制服之所以如此命名,是因爲它們在特定的渲染調用中不會從着色器程序的一次執行更改爲下一次。」如果他試圖在頂點之間更新這個變量,那麼Uniform將不適合他。 – luke

+0

呵呵,是的。不知道他想做什麼,但他可以迭代幾何着色器中的頂點並設置一些頂點數據。 – ChatCloud