Почему 3d-модели видны в Three.js без использования источников света? - PullRequest
0 голосов
/ 14 февраля 2019

Что у меня есть

Как показано на рисунке ниже, я использую библиотеку Three.js для создания холста WEBGL и загрузки модели .gltf в сцену с помощью GLTFLoader.js.

Demo Image

Код, который я использую

//Add THREE Renderer
renderer_Main = new THREE.WebGLRenderer({ antialias: true });
renderer_Main.setSize(canvasWidth, canvasHeight); //Set Renderer Size

//Add THREE Scene
scene_Main = new THREE.Scene();

//Add First THREE Camera
camera_Main = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.01, 10000);
camera_Main.position.set(-2000, 500, 500); //Set camera position

//Add THREE Grid Helper
var size = 1000; //Value of Each Square Size 
var divisions = 60; //Value of Grid Divisions 
gridHelper = new THREE.GridHelper(size, divisions);
gridHelper.material.opacity = 0.045;
gridHelper.material.transparent = false;
scene_Main.add(gridHelper); //Add Grid in the Scene

//Add THREE Orbit Controller for the first camera
//Activate mouse events (L_Click, Scroll, R_Click) for moving around in 3D scene
orbitController_Main = new THREE.OrbitControls(camera_Main, renderer_Main.domElement);
orbitController_Main.maxPolarAngle = Math.PI / 2;  
orbitController_Main.saveState();

//Add Lights
//var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
//scene_Main.add( directionalLight );

//Add a model (.gltf file)
var loader = new THREE.GLTFLoader();
loader.load( 'models/model_environment/scene.gltf', 
    function ( gltf ) {
        //Add 3d model - file types : .gltf, .bin and (.png materials)
        selectedModel = gltf.scene; 
        selectedModel.scale.set(3,3,3);
        selectedModel.position.y = 45;
        scene_Main.add(selectedModel);
    }, 
    ...
);

Выпуск

Проблема в том, что при загрузке объекты видны.Обратите внимание, что я не использую какие-либо огни (прокомментировано).Также, когда добавлены огни, ничего не меняется.Я пытался использовать THREE.DirectionalLight и THREE.PointLight , но безуспешно.Если вам интересны материалы, которые я использую для этого примера:

1) Куб:

camera_RT_Holder = new THREE.Mesh(
   new THREE.BoxGeometry(20, 20, 30),
   new THREE.MeshNormalMaterial()
);

2). Модель GLTF:

Ссылкамодель

Вопрос Если у вас есть идея, что происходит, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 14 февраля 2019

Материалы в вашем файле glTF имеют расширение KHR_materials_unlit .Материалы, использующие эти расширения, сопоставляются с THREE.MeshBasicMaterial , который является неосвещенным материалом.Это означает, что он не реагирует на свет, поэтому он виден даже без источников света в вашей сцене.

...