【发布时间】:2015-07-05 12:32:41
【问题描述】:
使用three.js,我想创建从球体中心发出的明亮光线的效果。
使用 THREE.lensflare() 我得到了一个很好的光线,但是一旦我把它放在一个球体中,它就会消失。我为 renderOrder 尝试了不同的值,但无济于事。
我的 JSFiddle 在这里:http://jsfiddle.net/blwoodley/ds8ydm4t/8/
您可以通过简单地注释掉我将球体网格添加到场景中的行(第 33 行)来确认镜头光晕是否正常工作。
r71.
var SCREEN_WIDTH = window.innerWidth - 100;
var SCREEN_HEIGHT = window.innerHeight - 100;
var camera, scene, _planeMesh;
var canvasRenderer, webglRenderer;
var container, mesh, geometry, plane;
container = document.createElement('div');
document.body.appendChild(container);
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(30, window.innerWidth / window.innerHeight, 1, 100000);
camera.position.set( 380, 80, 100 );
var spotLight = new THREE.SpotLight( 0xffffff );
spotLight.position.set( 180, 160, 0 );
var grid = new THREE.Mesh( new THREE.PlaneGeometry( 10000, 10000 ),
new THREE.MeshBasicMaterial( { color: 0xaaaaaa } ) );
var grid = new THREE.GridHelper(400, 40);
//grid.rotation.x = -1.57;
grid.position.y = -20;
scene.add(grid);
scene.add(spotLight);
camera.lookAt( scene.position );
var transparentmaterial = new THREE.MeshLambertMaterial( {
color: 0xaaaa00,
shading: THREE.SmoothShading,
opacity: .5, transparent: true } );
var sphereGeo = new THREE.SphereGeometry( 32.0, 32, 16 );
var mesh = new THREE.Mesh( sphereGeo,transparentmaterial);
scene.add(mesh);
addLight(scene,0.55, 0.9, 0.5,0,0,0);
// RENDERER
webglRenderer = new THREE.WebGLRenderer({antialias: true, alpha: true });
webglRenderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
webglRenderer.domElement.style.position = "relative";
webglRenderer.setClearColor( 0x000000 );
container.appendChild(webglRenderer.domElement);
animate();
function addLight(scene, h, s, l, x, y, z ) {
THREE.ImageUtils.crossOrigin = '';
var textureFlare0 = THREE.ImageUtils.loadTexture('https://s3.amazonaws.com/jsfiddle1234/lensflare0.png');
var light = new THREE.PointLight( 0xffffff, 1.5, 10 );
light.color.setHSL( h, s, l );
light.position.set( x, y, z );
scene.add( light );
light = light;
var flareColor = new THREE.Color( 0xffffff );
flareColor.setHSL( h, s, l + 0.5 );
var lensFlare = new THREE.LensFlare( textureFlare0, 200, 0.0, THREE.AdditiveBlending, flareColor );
lensFlare.position.copy( light.position );
var lensFlare = lensFlare;
scene.add( lensFlare );
}
function animate() {
requestAnimationFrame(animate);
render();
}
function render() {
webglRenderer.render(scene, camera);
}
【问题讨论】:
标签: three.js