Javascript 显示白色模型的Three.js

Javascript 显示白色模型的Three.js,javascript,three.js,3d,Javascript,Three.js,3d,我正在尝试使用three.js在网页中显示3D.obj模型。该模型是一个obj文件。我可以看到使用three.js脚本的模型,但是它有一个奇怪的while颜色 原始模型看起来像。(使用3D查看器上载obj文件)。但是我得到的输出是完全白色的 如果(!Detector.webgl){ Detector.addGetWebGLMessage(); } var容器; 摄像机、控件、场景、渲染器; 无功照明、环境照明、钥匙灯、填充灯、背光; init(); 制作动画(); 函数init(){ cont

我正在尝试使用three.js在网页中显示3D.obj模型。该模型是一个obj文件。我可以看到使用three.js脚本的模型,但是它有一个奇怪的while颜色

原始模型看起来像。(使用3D查看器上载obj文件)。但是我得到的输出是完全白色的


如果(!Detector.webgl){
Detector.addGetWebGLMessage();
}
var容器;
摄像机、控件、场景、渲染器;
无功照明、环境照明、钥匙灯、填充灯、背光;
init();
制作动画();
函数init(){
container=document.createElement('div');
文件.正文.附件(容器);
/*摄像机*/
摄像头=新的三个透视摄像头(45,window.innerWidth/window.innerHeight,1900000000);
摄像机位置z=4000;
/*场面*/
场景=新的三个。场景();
照明=假;
环境光=新的三个环境光(0xffffff);
场景。添加(环境光);
keyLight=新三点方向光(新三点颜色('hsl(30,10,7%)),1.0);
按键灯。位置。设置(-100,0,100);
fillLight=新三点方向光(新三点颜色('hsl(240,10%,7%)),0.75);
fillLight.position.set(100,0100);
背光=新的三方向光(0xffffff,1.0);
backLight.position.set(100,0,-100).normalize();
/*模型*/
var mtlLoader=new THREE.mtlLoader();
mtlLoader.setBaseUrl('caster/');
mtlLoader.setPath('caster/');
mtlLoader.load('edger-QLgame.mtl',功能(材料){
材料。预加载();
//materials.materials.default.map.magFilter=THREE.NearestFilter;
//materials.materials.default.map.minFilter=THREE.LinearFilter;
var objLoader=new THREE.objLoader();
//objLoader.setMaterials(物料);
mtlLoader.setBaseUrl('caster/');
setPath('caster/');
objLoader.load('edger-QLgame.obj',函数(对象){
场景。添加(对象);
});
});
/*渲染器*/
renderer=new THREE.WebGLRenderer();
//renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth、window.innerHeight);
setClearColor(新的三种颜色(“hsl(0,0%,10%)”));
renderer.gammaOutput=true;
container.appendChild(renderer.domeElement);
/*控制*/
控件=新的三个.轨道控件(摄影机、渲染器.doElement);
controls.enableDamping=true;
控制。阻尼系数=0.25;
controls.enableZoom=true;
/*事件*/
addEventListener('resize',onWindowResize,false);
window.addEventListener('keydown',onKeyboardEvent,false);
}
函数onWindowResize(){
camera.aspect=window.innerWidth/window.innerHeight;
camera.updateProjectMatrix();
renderer.setSize(window.innerWidth、window.innerHeight);
}
函数onKeyboardEvent(e){
如果(e.code=='KeyL'){
照明=!照明;
if(照明){
环境强度=0.25;
场景。添加(关键灯光);
场景。添加(fillLight);
场景。添加(背光);
}否则{
环境强度=1.0;
场景。移除(按键灯);
场景。移除(fillLight);
场景。移除(背光);
}
}
}
函数animate(){
请求动画帧(动画);
控件更新();
render();
}
文件。添加的文件列表器('mouseweel',OnDocumentMouseweel,false);
函数render(){
渲染器。渲染(场景、摄影机);
}
DocumentMouseWheel函数(事件){
var fovMAX=160;
var fovMIN=1;
camera.fov-=event.wheelDeltaY*0.05;
camera.fov=Math.max(Math.min(camera.fov,fovMAX),fovMIN);
camera.projectionMatrix=new THREE.Matrix4().makePerspective(camera.fov,window.innerWidth/window.innerHeight,camera.near,camera.far);
}

必须将mtl文件中的材质指定给对象。但是你已经提到了这一部分(…setMaterials…),我评论了这一部分是为了测试。即使添加mtl文件,结果也是相似的。谢谢。试着调暗或关闭环境灯。与mtl文件中设置的白色材质或未设置mtl的白色默认材质结合使用时,将生成没有阴影的白色。其他灯光没有任何效果。如果我关闭环境光,模型会变得太暗。但是你看到阴影了吗?可以将环境光设置为
0x888888
  <script>
      if (!Detector.webgl) {
          Detector.addGetWebGLMessage();
      }

      var container;

      var camera, controls, scene, renderer;
      var lighting, ambient, keyLight, fillLight, backLight;

      init();
      animate();

      function init() {
          container = document.createElement('div');
          document.body.appendChild(container);

          /* Camera */
          camera = new THREE.PerspectiveCamera(45, window.innerWidth /window.innerHeight, 1, 90000000000);
          camera.position.z = 4000;

          /* Scene */
          scene = new THREE.Scene();
          lighting = false;

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

          keyLight = new THREE.DirectionalLight(new THREE.Color('hsl(30, 10%, 7%)'), 1.0);
          keyLight.position.set(-100, 0, 100);

          fillLight = new THREE.DirectionalLight(new                THREE.Color('hsl(240, 10%, 7%)'), 0.75);

          fillLight.position.set(100, 0, 100);

          backLight = new THREE.DirectionalLight(0xffffff, 1.0);
          backLight.position.set(100, 0, -100).normalize();

          /* Model */
          var mtlLoader = new THREE.MTLLoader();
          mtlLoader.setBaseUrl('caster/');
          mtlLoader.setPath('caster/');
          mtlLoader.load('edger-QLgame.mtl', function (materials) {

          materials.preload();

          //materials.materials.default.map.magFilter = THREE.NearestFilter;
          //materials.materials.default.map.minFilter = THREE.LinearFilter;

          var objLoader = new THREE.OBJLoader();
          //objLoader.setMaterials(materials);
          mtlLoader.setBaseUrl('caster/');
          objLoader.setPath('caster/');
          objLoader.load('edger-QLgame.obj', function (object) {
              scene.add(object);
          });
      });

      /* Renderer */
      renderer = new THREE.WebGLRenderer();
      //renderer.setPixelRatio(window.devicePixelRatio);
      renderer.setSize(window.innerWidth, window.innerHeight);
      renderer.setClearColor(new THREE.Color("hsl(0, 0%, 10%)"));
      renderer.gammaOutput = true;

      container.appendChild(renderer.domElement);

      /* Controls */
      controls = new THREE.OrbitControls(camera, renderer.domElement);
      controls.enableDamping = true;
      controls.dampingFactor = 0.25;
      controls.enableZoom = true;

     /* Events */
     window.addEventListener('resize', onWindowResize, false);
     window.addEventListener('keydown', onKeyboardEvent, false);
}

function onWindowResize() {
    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();
    renderer.setSize(window.innerWidth, window.innerHeight);   
}

function onKeyboardEvent(e) {  
    if (e.code === 'KeyL') {
        lighting = !lighting;

        if (lighting) {
            ambient.intensity = 0.25;
            scene.add(keyLight);
            scene.add(fillLight);
            scene.add(backLight);
        } else {
            ambient.intensity = 1.0;
            scene.remove(keyLight);
            scene.remove(fillLight);
            scene.remove(backLight);
        }
    }
}

function animate() {
    requestAnimationFrame(animate);
    controls.update();
    render();
}
document.addEventListener( 'mousewheel', onDocumentMouseWheel, false );

function render() {
    renderer.render(scene, camera);
}

function onDocumentMouseWheel( event ) {
    var fovMAX = 160;
    var fovMIN = 1;

    camera.fov -= event.wheelDeltaY * 0.05;
    camera.fov = Math.max( Math.min( camera.fov, fovMAX ), fovMIN );
    camera.projectionMatrix = new THREE.Matrix4().makePerspective(camera.fov, window.innerWidth / window.innerHeight, camera.near, camera.far);
}