я добавил эффект свечения в 3d самолета трекере:Three.js ShaderMaterial работает только на некоторых графических процессорах
Эффект питается от 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));
Является ли это проблемой драйверов GPU или что-то подобное? Как я могу это исправить? Благодаря!
'vertexShader' и' fragmentShader' уже включены в вопрос. –