我已经为一架3D飞机跟踪器添加了发光效果:
这个效果由一个
场景创建的代码如下所示:
THREE.ShaderMaterial
提供支持。这个效果只在某些电脑上工作,在其他电脑上,这个效果看不到,但是没有错误显示,其他所有功能都能正常使用。我已经在多台电脑和操作系统上进行了尝试,似乎是硬件相关的问题,而不是操作系统问题。
glow
效果的代码如下:private _createGlow(radius: number, segments: number) {
let material = new THREE.ShaderMaterial({
uniforms: {
"c": { type: "f", value: 0.01 },
"p": { type: "f", value: 6 },
glowColor: { type: "c", value: new THREE.Color(0x002296) },
viewVector: { type: "v3", value: this._camera.position }
},
vertexShader: `
uniform vec3 viewVector;
uniform float c;
uniform float p;
varying float intensity;
void main()
{
vec3 vNormal = normalize( normalMatrix * normal );
vec3 vNormel = normalize( normalMatrix * viewVector );
intensity = pow( c - dot(vNormal, vNormel), p );
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}`,
fragmentShader: `
uniform vec3 glowColor;
varying float intensity;
void main()
{
vec3 glow = glowColor * intensity;
gl_FragColor = vec4( glow, 1.0 );
}`,
side: THREE.FrontSide,
blending: THREE.AdditiveBlending,
transparent: true
});
let geometry = new THREE.SphereGeometry(radius, segments, segments);
let mesh = new THREE.Mesh(geometry, material);
mesh.scale.multiplyScalar(1.2);
return mesh;
}
场景创建的代码如下所示:
this._scene = new THREE.Scene();
this._scene.add(this._universe);
this._scene.add(this._glow);
this._scene.add(this._atmosphere1);
this._scene.add(this._atmosphere2);
this._scene.add(this._earth);
this._scene.add(this._light);
this._scene.add(new THREE.AmbientLight(0x333333, 0.9));
这是显卡驱动问题还是其他问题?我该如何解决?谢谢!
vertexShader
和fragmentShader
已经包含在问题中。 - Remo H. Jansen