Forge Viewer Autodesk v7在使用THREE.ShaderMaterial时会出现重新着色THREE



EDIT:我使用的Forge Viewer有Three.js版本r71(源代码(的自定义版本,这就是我使用过时代码的原因。Three.js的当前版本是r121。

我创建了THREE.Group((,其中包含各种THREE.Pointcloud(几何体、材质(。其中一个点由THREE.BufferGeometry((和THREE.ShaderMaterial((.组成

当我将颜色属性添加到BufferGeometry时,似乎只有红色(1,0,0(、白色(1,1,1(或黄色(1,1,0(有效。此图像是我将颜色设置为(1,0,0(时的图像。此图像是我将颜色设置为蓝色(0,0,1(时的图像。

我的问题是,我该如何解决这个问题?着色器中有问题吗?是我如何构建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 ));

链接到代码

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

最新更新