Three.js - 仅渲染场景背景但不渲染几何图形

Posted

技术标签:

【中文标题】Three.js - 仅渲染场景背景但不渲染几何图形【英文标题】:Three.js - Only renders scene background but no geometry 【发布时间】:2020-08-20 20:49:34 【问题描述】:

我会诚实地把头发从头上扯下来。我严重需要帮助。我需要做的就是在这个非常简单的 three.js 程序中渲染一些东西/任何东西。浪费了这么多时间,只想哭着睡觉……

我只能看到场景的背景颜色。我尝试放入简单的立方体,复制粘贴的几何图形,从其他可行的项目中获取几何图形,弄乱环境光和定向光,移动相机位置。为了挽救我的生命,我无法获得单个不同的像素。没有控制台错误,vs 代码中没有错误,其他项目工作正常。就像我开始从事的任何受启发的项目都必须一次又一次地被打败,就像打死马一样,通常会犯一些非常愚蠢的错误。这堵动态墙这次来到了我的前门,一开始就把我挡在了门外……

html 很好。正如我所说,它可以很好地渲染场景背景。它不会渲染任何阴影几何图形。在节点 liveserver 上运行 webapp...浏览器已完全更新 Firefox...


var context = null,
    renderer = null,
    loader = null,
    scene = null,
    camera = null;

var redSphere;
var cube;

function onLoad() 

    //CONTEXT
    context = document.getElementById("deep");
    context.style.height = "100vh";
    context.style.width = "100vw";

    //RENDERER
    renderer = new THREE.WebGLRenderer(  antialias: true  );
    renderer.setSize(window.innerWidth, window.innerHeight);
    context.appendChild(renderer.domElement);

    //CAMERA
    camera = new THREE.PerspectiveCamera(45, context.offsetWidth/context.offsetHeight, 1, 100);
    camera.position.set(0, 0, 0);

    //SCENE
    scene = new THREE.Scene();
    scene.background = new THREE.Color("rgb(20, 0, 20)");

    //LIGHTS
    var sun1 = new THREE.AmbientLight(0xffffff, 1.0);
    var sun2 = new THREE.DirectionalLight(0xffffff, 1.0);
    var sun3 = new THREE.DirectionalLight(0xffffff, 1.0);
    sun1.position.set(0, 0, 0);
    sun2.position.set(-3, 3, 2);
    sun3.position.set(0, -3, 2);
    scene.add(sun1, sun2, sun3);



    //RED OBJECT
    var sphereGeo = new THREE.BoxGeometry(1, 1, 1);
    var redSphereMat = new THREE.MeshPhongMaterial(color: "rgb(255, 0, 0)" );//, opacity: 0.5, transparent: true
    redSphere = new THREE.Mesh(sphereGeo, redSphereMat);
    redSphere.position.set(0, 5, 0);
    scene.add(redSphere);


    draw();


function draw() 
    renderer.render(scene, camera);
    camera.lookAt(redSphere);

    redSphere.rotation.y -= 0.1;

    requestAnimationFrame(draw);

【问题讨论】:

【参考方案1】:

lookAt() 需要 Vector3 作为参数,而不是 Mesh。试试:

camera.lookAt(redSphere.position);

【讨论】:

更具体地说是一个 THREE.Vector3 ;) :)

以上是关于Three.js - 仅渲染场景背景但不渲染几何图形的主要内容,如果未能解决你的问题,请参考以下文章

Three.js 不渲染纹理

渲染后将几何图形添加到 three.js 网格

three.js引擎基础知识—摄像机场景及渲染器

Three.js地球开发—4.Three.js渲染场景保存成贴图

Three.js地球开发—4.Three.js渲染场景保存成贴图

three.js入门