Debugging 平移时着色器材质发光错误,放大三个.js
我用以下代码创建了一个虚拟地球:Debugging 平移时着色器材质发光错误,放大三个.js,debugging,three.js,shader,vertex-shader,Debugging,Three.js,Shader,Vertex Shader,我用以下代码创建了一个虚拟地球: function earthView(){ if (!scene){ main(); // create three js basic code(camera, renderer etc.) } // create the geometry sphere stars var geometry = new THREE.SphereBufferGeometry(6371000000, 36, 36) // create the material, usi
function earthView(){
if (!scene){
main(); // create three js basic code(camera, renderer etc.)
}
// create the geometry sphere stars
var geometry = new THREE.SphereBufferGeometry(6371000000, 36, 36)
// create the material, using a texture of startfield
var material = new THREE.MeshBasicMaterial()
material.map = THREE.ImageUtils.loadTexture('images/earthView/ESO_-_Milky_Way.jpg')
material.side = THREE.BackSide
// create the mesh based on geometry and material
var mesh = new THREE.Mesh(geometry, material)
mesh.position.set(0,0,-6371000)
scene.add(mesh)
/*
var geometry = new THREE.SphereGeometry(5000,10,10);
var material = new THREE.MeshBasicMaterial({color:"0xff0000"});
var mesh_test = new THREE.Mesh(geometry,material);
scene.add(mesh_test);*/
//earth
var geometry = new THREE.SphereBufferGeometry(6371000, 36, 36)
var material = new THREE.MeshPhongMaterial()
var earthMesh = new THREE.Mesh(geometry, material)
earthMesh.position.set(0,0,-6371000)
earthMesh.rotation.set(Math.PI/2,Math.PI/2,0)
earthMesh.rotation.y -=22.87*Math.PI/180//rightturn ^
earthMesh.rotation.x +=49.02*Math.PI/180//rightturn ^
helper = new THREE.EdgesHelper( earthMesh );
helper.material.color.set( 0xffffff );
material.map = THREE.ImageUtils.loadTexture('images/earthView/earthmap1k.jpg')
material.bumpMap = THREE.ImageUtils.loadTexture('images/earthView/earthbump1k.jpg')
material.bumpScale = 100
material.specularMap = THREE.ImageUtils.loadTexture('images/earthView/earthspec1k.jpg')
scene.add(earthMesh);
scene.add( helper );
//atmosphere
var geometry = new THREE.SphereBufferGeometry(9371000, 36, 36)
var material = new createAtmosphereMaterial()
material.uniforms.glowColor.value.set(0x00b3ff)
material.uniforms.coeficient.value = 0.02
material.uniforms.power.value = 2.5
material.side = THREE.DoubleSide
var earthAtmo = new THREE.Mesh(geometry, material)
earthAtmo.position.set(0,0,-6371000)
scene.add(earthAtmo);
/**
* from http://stemkoski.blogspot.fr/2013/07/shaders-in-threejs-glow-and- halo.html
* @return {[type]} [description]
*/
function createAtmosphereMaterial(){
var vertexShader = [
'varying vec3 vNormal;',
'void main(){',
' // compute intensity',
' vNormal = normalize( normalMatrix * normal );',
' // set gl_Position',
' gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',
'}',
].join('\n')
var fragmentShader = [
'uniform float coeficient;',
'uniform float power;',
'uniform vec3 glowColor;',
'varying vec3 vNormal;',
'void main(){',
' float intensity = pow( coeficient - dot(vNormal, vec3(0.0, 0.0, 1.0)), power );',
' gl_FragColor = vec4( glowColor * intensity, 1.0 );',
'}',
].join('\n')
// create custom material from the shader code above
// that is within specially labeled script tags
var material = new THREE.ShaderMaterial({
uniforms: {
coeficient : {
type : "f",
value : 1.0
},
power : {
type : "f",
value : 2
},
glowColor : {
type : "c",
value : new THREE.Color('blue')
},
},
vertexShader : vertexShader,
fragmentShader : fragmentShader,
side : THREE.BackSide,
blending : THREE.AdditiveBlending,
transparent : true,
depthWrite : false,
});
return material
}
}
在中,我在渲染器上遇到了问题,因为我以真实比例(1px=1m)创建了虚拟地球。我克服了这个错误,在定义渲染器时设置了对数深度缓冲区:true
现在的问题是,大气(光晕着色器材质)在webgl-容器中平移或缩放时有一个错误,这是已经说明的,并且是解决此问题的一个示例
问题是:如何更改代码以克服此错误?(我想渲染函数中应该添加一些东西,但我就是无法让它工作)
Hint1:此错误仅在设置对数深度缓冲区:true
时发生。否则,由于我使用的是大比例对象,因此会得到错误的渲染
Image1:渲染选项<代码>对数深度缓冲区:false,没有错误,只有false渲染
图像2:渲染选项对数深度缓冲区:true
,如果没有缩放或平移,则没有错误
Image3:渲染选项对数深度缓冲区:true
,当放大应用着色器材质接缝的区域以缩小时
Image4:平移应用着色器材质接缝的区域时,渲染选项对数深度缓冲区:true
,以不跟随或理解平移
Hint2:着色器材质可渲染的区域缩小时变大,放大时变小
更新:现在,当我添加星体球体时,问题发生了。如果我不加星体,那么一切都正常。。你知道为什么会这样吗