终于有时间玩着色器,但一时间卡住了.我想将顶点传递给着色器并在其上制作一些gpgpu.
Gpgpu工作正常,我猜是因为我看到几个像素,中间的一个被推到一边,因为我放入代码只是为了测试.
现在我想传递球体顶点.以下是我要采取的步骤.请指出错误:-)
编辑:小提琴添加 - 点击这里
1)创建几何体,并将其传递给数据数组.
geometry = new THREE.SphereGeometry( 0.2, 15, 15 ); console.log(geometry.vertices.length); var a = new Float32Array(geometry.vertices.length * 4); for(var k=0; k2)将其保存在数据纹理中
posTexture[2] = new THREE.DataTexture(a, 16, 16, THREE.RGBAFormat, THREE.FloatType);3)设置'Set scene'(它应该将datatexture传递给它一次)setUniforms = {posTexture:{type:"t",value:posTexture [2]}};
var setMaterial = new THREE.ShaderMaterial({ uniforms: setUniforms, vertexShader: document.getElementById('setVert').textContent, fragmentShader: document.getElementById('setFrag').textContent, wireframe: true }); var setPlane = new THREE.Mesh(new THREE.PlaneGeometry(16,16), setMaterial); setScene.add(setPlane);4)设置着色器.
5)动画!!! start设置SetShader以保存数据并将WebGLRenderTarget输出到下一个着色器:一个负责进行计算并返回带坐标的纹理,下一个用于显示
function animate() { requestAnimationFrame(animate); renderer.setViewport(0,0,16, 16); if(buffer == 0) { buffer = 1; a = 0; b = 1; } else { buffer = 0; a = 1; b = 0; } if(start) { renderer.render(setScene, processCamera, posTexture[a]); start = false; } posUniforms.posTexture.value = posTexture[a]; renderer.render(posScene, processCamera, posTexture[b]) dispUniforms.posTexture.value = posTexture[b]; renderer.setViewport(0,0,dispSize.x, dispSize.y); renderer.render(scene, camera); }编辑:我不明白所有的downvoting.只是问我的代码有什么问题,为什么它不起作用.我不是要求为我写的.显然,试图解释它的人写了不同的东西,这与问题无关,这就是我不接受答案的原因.