使用sample2D作为顶点着色器中的位置

时间:2013-08-15 14:53:23

标签: webgl

我正在学习如何在webGL中使用FBO操作粒子,我试图用纹理存储位置并使用它作为位置参考,但是没有任何东西出现在舞台上。

片段着色器     

precision mediump float;

void main() {

gl_FragColor = vec4(vec3(1.0), 1.0);

}

</script>

顶点渲染着色器脚本     

attribute vec2 aTextureUV;
uniform sampler2D uTexture;

void main() {
vec4 texture = texture2D( uTexture, aTextureUV );
gl_Position = vec4( texture.rgb, 1.0 );
gl_PointSize = 3;
}

</script>

JS脚本

// Determine the UVs
var uvs = new Float32Array([
0.0, 0.0,
1.0, 0.0,
0.0, 1.0,
1.0, 1.0
])

var uvBuffer = gl.createBuffer();
gl.bindBuffer( gl.ARRAY_BUFFER, uvBuffer );
gl.bufferData( gl.ARRAY_BUFFER, uvs, gl.STATIC_DRAW );
gl.enableVertexAttribArray( defaultProgram.aTextureUVLoc );
gl.vertexAttribPointer( defaultProgram.aTextureUVLoc, 2, gl.FLOAT, false, 0, 0);

// Texture initialization
for(var i = 0; i < particleCount; i++) {
            initialData.push(
                Math.random(),
                Math.random(),
                Math.random(),
                0
            );
        }

var texture = gl.createTexture();
gl.activeTexture( gl.TEXTURE0 );
gl.bindTexture( gl.TEXTURE_2D, texture );
gl.pixelStorei( gl.UNPACK_ALIGNMENT, 1 );

gl.texImage2D(
gl.TEXTURE_2D, 0, gl.RGBA, fboWidth, fboWidth, 0,
gl.RGBA, gl.FLOAT, new Float32Array(initialData)
);

gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);

.....


function draw() {

   requestAnimationFrame( draw );

   gl.viewport( 0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight );
   gl.clear( gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
   gl.drawArrays( gl.POINTS, 0, particleCount );
}

1 个答案:

答案 0 :(得分:0)

无法发表评论,但就像桌面GL 一样,我可以看到1)您的脚本中没有实际的绘制调用,即glDrawElements / {{1} (除非你把它的一部分遗漏了),2)你错过了一个片段着色器。参考例如this