gpt4 book ai didi

javascript - Three.js环境光意想不到的效果

转载 作者:数据小太阳 更新时间:2023-10-29 05:55:29 29 4
gpt4 key购买 nike

在下面的代码中,我渲染了一些立方体并使用 PointLight 和 AmbientLight 照亮它们。然而,当设置为 0xffffff 时,AmbientLight 会将侧面的颜色更改为白色,无论它们指定的颜色如何。奇怪的是,点光源按预期工作。

我怎样才能使环境光表现得像点光源,因为它不应该冲淡面部颜色,而只是照亮它们? IE。所以将环境光设置为 0xffffff 相当于在物体周围有多个全强度的点光源。

$(function(){
var camera, scene, renderer;
var airplane;
var fuselage;
var tail;
init();
animate();

function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 35, window.innerWidth / window.innerHeight, 0.1, 10000 );
camera.position.z = 2;

airplane = new THREE.Object3D();
fuselage = newCube(
{x: 1, y: 0.1, z: 0.1},
{x: 0, y: 0, z: 0},
[0xffff00, 0x808000, 0x0000ff, 0xff00000, 0xffffff, 0x808080],
[0, 1, 2, 3, 4, 5]
);
airplane.add(fuselage);
tail = newCube(
{x: 0.15, y: 0.2, z: 0.05},
{x: 0.5, y: 0.199, z: 0},
[0xffff00, 0x808000, 0x0000ff, 0xff00000, 0xffffff, 0x808080],
[0, 1, 2, 3, 4, 5]
);
airplane.add(tail);
scene.add( airplane );

var ambientLight = new THREE.AmbientLight(0xffffff);
scene.add(ambientLight);

var pointLight = new THREE.PointLight(0x888888);
pointLight.position.x = 100;
pointLight.position.y = 100;
pointLight.position.z = 100;
scene.add(pointLight);

renderer = new THREE.WebGLRenderer();
renderer.setClearColorHex(0x000000, 1);
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
}

function animate() {
requestAnimationFrame( animate );
render();
}
function render() {
airplane.rotation.x += 0.005;
airplane.rotation.y += 0.01;
renderer.render( scene, camera );
}
});

function newCube(dims, pos, cols, colAss){
var mesh;
var geometry;
var materials = [];
geometry = new THREE.CubeGeometry( dims.x, dims.y, dims.z );
for (var i in cols){
materials[i] = new THREE.MeshLambertMaterial( { color: cols[i], overdraw: true } );
}
geometry.materials = materials;
for (var i in colAss){
geometry.faces[i].materialIndex = colAss[i];
}
mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );
mesh.position = pos;
return mesh;
}

最佳答案

编辑 - three.js API 已更改; material.ambient 已被弃用。


解决方案是将环境光的强度设置为合理的值。

var ambientLight = new THREE.AmbientLight( 0xffffff, 0.2 );

更新到 three.js r.84

关于javascript - Three.js环境光意想不到的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717135/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com