使用THREE.ShaderMaterial时,Forge Viewer Autodesk v7会为THREE.BufferGeoemtry重新着色

问题描述

编辑:我正在使用的Forge Viewer具有Three.js版本r71(源)的自定义版本,这就是为什么我使用过时的代码。 Three.js的当前版本是r121。

我创建了THREE.Group(),其中包含各种THREE.Pointcloud(geometry,material)。点之一由THREE.BufferGeometry()和THREE.ShaderMaterial()组成。

当我将颜色属性添加到BufferGeometry时,只有红色(1,0),白色(1、1,1)或黄色(1,1,0)似乎起作用。我将image的颜色设置为(1,0)时。这是我将颜色设置为蓝色(0,1)的image

我的问题是,我该如何解决?着色器中有问题吗?我如何构建BufferGeometry是否存在问题?是虫子吗?谢谢。

我的着色器:

var vShader = `uniform float size;
        varying vec3 vColor;
        void main() {
            vColor = color;
            vec4 mvPosition = modelViewMatrix * vec4( position,1.0 );
            gl_PointSize = size * ( size / (length(mvPosition.xyz) + 0.00001) );
            gl_Position = projectionMatrix * mvPosition;
        }`
        var fShader = `varying vec3 vColor;
        uniform sampler2D sprite;
        void main() {
            gl_FragColor = vec4(vColor,1.0 ) * texture2D( sprite,gl_PointCoord );
            if (gl_FragColor.x < 0.2) discard;
        }`

我的资料

var materialForBuffers = new THREE.ShaderMaterial( {
            uniforms: {
                size: { type: 'f',value: this.pointSize},sprite: { type: 't',value: THREE.ImageUtils.loadTexture("../data/white.png") },},vertexShader: vShader,fragmentShader: fShader,transparent: true,vertexColors: true,});

如何添加颜色:

const colors = new Float32Array( [ 1.0,0.0,0.0 ] );
                geometryForBuffers.addAttribute('color',new THREE.BufferAttribute( colors,3 ));

Link to code

解决方法

您似乎已经在使用该示例代码的一部分,但如果没有使用,请参阅https://github.com/petrbroz/forge-point-clouds/blob/develop/public/scripts/extensions/pointcloud.js(实时演示https://forge-point-clouds.autodesk.io)。此示例代码已经使用color几何属性来指定各个点的颜色。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...