将WebGLRenderTarget绘制到屏幕
我正在研究一个GPGPU动画,首先是Joshua Koo的优秀flocking example。为了帮助将来进行任何调试,我想将纹理渲染到屏幕上,但是我得到了奇怪的结果。这是我采取的方法:
然后,我执行以下每一帧:
这会将GPGPU纹理映射到我的网格对象,但会导致位置数据减少到0,0,0(或接近此值)。我只看到一个模糊的灰色球,在屏幕中央旋转着4000只鸟。在这个过程的某个地方,我似乎正在重置位置数据。或许我采取了错误的做法。
我尝试了很多不同的方法,包括克隆GPGPU WebGLRenderTarget对象以及使用MeshBasicMaterial和map。奇怪的是,如果我使用PerspectiveCamera而不是othographic,定位问题似乎消失了。但是,更奇怪的是,当我尝试将调试网格定位在屏幕的中心时,问题又回来了。为什么网格的x / y值会干扰其纹理像素的绘制?
以下是我写过的着色器。据我所知,它们不应该改变纹理:
<!-- debug fragment shader -->
<script id="fragment_shader_debug" type="x-shader/x-fragment">
uniform vec2 resolution;
uniform sampler2D texture;
void main() {
gl_FragColor = texture2D(texture, vec2(gl_FragCoord.xy / resolution.xy));
}
</script>
<!-- debug vertex shader -->
<script id="vertex_shader_debug" type="x-shader/x-vertex">
void main() {
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
</script>
这是rest of the code。任何帮助都会很棒。我已经坚持了很长时间。