0
我想繪製三個頂點a,b,c的三角形。通常,我會將這三個頂點座標放在一個數組中,並將其作爲屬性傳遞給我的頂點着色器。在OpenGL ES 2.0頂點着色器中生成頂點
但是,是否有可能在頂點着色器本身內生成這些頂點座標,而不是作爲屬性傳遞(即,對應頂點位置的每個頂點座標值)。如果是,任何示例程序支持它?
謝謝。
我想繪製三個頂點a,b,c的三角形。通常,我會將這三個頂點座標放在一個數組中,並將其作爲屬性傳遞給我的頂點着色器。在OpenGL ES 2.0頂點着色器中生成頂點
但是,是否有可能在頂點着色器本身內生成這些頂點座標,而不是作爲屬性傳遞(即,對應頂點位置的每個頂點座標值)。如果是,任何示例程序支持它?
謝謝。
您可以在頂點着色器中創建變量並將其傳遞給片段着色器。舉個例子:
頂點着色器
precision highp float; uniform float u_time; uniform float u_textureSize; uniform mat4 u_mvpMatrix; attribute vec4 a_position; // This will be passed into the fragment shader. varying vec2 v_textureCoordinate0; void main() { // Create texture coordinate v_textureCoordinate0 = a_position.xy/u_textureSize; gl_Position = u_mvpMatrix * a_position; }
而且片段着色器:
precision mediump float; uniform float u_time; uniform float u_pixel_amount; uniform sampler2D u_texture0; // Interpolated texture coordinate per fragment. varying vec2 v_textureCoordinate0; void main(void) { vec2 size = vec2(1.0/u_pixel_amount, 1.0/u_pixel_amount); vec2 uv = v_textureCoordinate0 - mod(v_textureCoordinate0,size); gl_FragColor = texture2D(u_texture0, uv); gl_FragColor.a=1.0; }
你怎麼能看到,矢量2D命名v_textureCoordinate0在頂點着色器和它的創建內插值在片段着色器中使用。
我希望它能幫助你。
對不起,但我想要的是在頂點着色器中生成a_textureCoordinate0,而不是將其作爲屬性傳遞 –
您也可以使用內置變量或常量來確定v_textureCoordinate0的值。我更新示例代碼。 – xcesco
我的實現似乎正在工作,將很快粘貼代碼。 –