将顶点保存到纹理并传递到着色器

 mobiledu2502910337 发布于 2023-01-16 10:04

终于有时间玩着色器,但一时间卡住了.我想将顶点传递给着色器并在其上制作一些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; k

2)将其保存在数据纹理中

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.只是问我的代码有什么问题,为什么它不起作用.我不是要求为我写的.显然,试图解释它的人写了不同的东西,这与问题无关,这就是我不接受答案的原因.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有