निम्नलिखित कोड में, मैं कुछ क्यूब्स प्रस्तुत करता हूं और उन्हें प्वाइंटलाइट और परिवेश प्रकाश के साथ प्रकाश देता हूं। हालांकि 0xffffff पर सेट होने पर AmbientLight पक्षों के रंग को सफेद रंग में बदल देता है, चाहे उनके असाइन किए गए रंग हों। आश्चर्यजनक रूप से, बिंदु प्रकाश अपेक्षित के रूप में काम कर रहा है।थ्री.जेएस परिवेश प्रकाश अप्रत्याशित प्रभाव
मैं परिवेश प्रकाश बिंदु बिंदु की तरह व्यवहार कैसे कर सकता हूं, इसमें चेहरे के रंगों को धोना नहीं चाहिए, बस उन्हें रोशन करें? अर्थात। इसलिए 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;
}