RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 909148
Accepted
Angel Pensive
Angel Pensive
Asked:2020-11-20 20:54:56 +0000 UTC2020-11-20 20:54:56 +0000 UTC 2020-11-20 20:54:56 +0000 UTC

三个js阴影不起作用

  • 772

我正在尝试设置我写这一行的阴影:

renderer.shadowMap.enabled = true;

什么都没有出现,之后编译器会写一个错误:

TypeError: Cannot set property 'enabled' of undefined

完整代码:

var camera, controls, scene, renderer;
var plane
var shoulder, cubit, wrist;
var root_beam, top_beam;
var claw_base, claw_one, claw_two;

function init() {

    // create a scene, that will hold all our elements such as objects, cameras and lights.
    scene = new THREE.Scene();

    // create a camera, which defines where we're looking at.
    camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);

    // create a render and set the size
    renderer = new THREE.WebGLRenderer();
    renderer.setClearColorHex();
    renderer.setClearColor(new THREE.Color(0x000000));
    renderer.setSize(window.innerWidth-350, window.innerHeight-65);

    // show axes in the screen
    var axes = new THREE.AxisHelper(20);
    scene.add(axes);

    // create the ground plane
    var planeGeometry = new THREE.PlaneGeometry(60, 60);
    var planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff});
    plane = new THREE.Mesh(planeGeometry, planeMaterial);

    // rotate and position the plane
    plane.rotation.x = -0.5 * Math.PI;
    plane.position.x = 0;
    plane.position.y = 0;
    plane.position.z = 0;

    // add the plane to the scene
    scene.add(plane);

    var sphereGeometry = new THREE.SphereGeometry(2, 20, 20);
    var sphereMaterial = new THREE.MeshBasicMaterial({color: 0x8B0000, wireframe: false});

    shoulder = new THREE.Mesh(sphereGeometry, sphereMaterial);
    shoulder.position.z = 2;


    plane.add(shoulder);

    var geometry = new THREE.CylinderGeometry( 1.5, 1.5, 20, 32 );
    var material = new THREE.MeshBasicMaterial( {color: 0x778899} );
    root_beam = new THREE.Mesh( geometry, material );
    root_beam.rotation.x = 0.5 * Math.PI;
    root_beam.position.z = 10;

    shoulder.add(root_beam);

    cubit = new THREE.Mesh(sphereGeometry, sphereMaterial);
    cubit.position.y = 10;

    root_beam.add(cubit);

    top_beam = new THREE.Mesh( geometry, material );
    top_beam.position.y = 10;
    cubit.add(top_beam);

    wrist = new THREE.Mesh(sphereGeometry, sphereMaterial);
    wrist.position.y = 10;

    top_beam.add(wrist);

    var cubeGeometry = new THREE.BoxGeometry(12, 1, 4);
    var cubeMaterial = new THREE.MeshBasicMaterial({color: 0x778899, wireframe: false});
    claw_base = new THREE.Mesh(cubeGeometry, cubeMaterial);
    claw_base.position.y = 2;

    wrist.add(claw_base);

    cubeGeometry = new THREE.BoxGeometry(6, 1, 4);
    cubeMaterial = new THREE.MeshBasicMaterial({color: 0xFF0000, wireframe: false});

    claw_one = new THREE.Mesh(cubeGeometry, cubeMaterial);
    claw_one.rotation.z = 0.5 * Math.PI;
    claw_one.position.y = 3.5;
    claw_one.position.x = 5.5;

    claw_base.add(claw_one);

    cubeMaterial = new THREE.MeshBasicMaterial({color: 0x0000FF, wireframe: false});

    claw_two = new THREE.Mesh(cubeGeometry, cubeMaterial);
    claw_two.rotation.z = 0.5 * Math.PI;
    claw_two.position.y = 3.5;
    claw_two.position.x = -5.5;

    claw_base.add(claw_two);

    shoulder.rotation.y = 0.5;

    cubit.rotation.z = 1.5;

    wrist.rotation.y = 0.8;

    // position and point the camera to the center of the scene
    camera.position.x = -30;
    camera.position.y = 40;
    camera.position.z = 30;
    camera.lookAt(scene.position);

    // add the output of the renderer to the html element
    document.getElementById("imterBody").appendChild(renderer.domElement);

    controls = new THREE.OrbitControls( camera, renderer.domElement );
                //controls.addEventListener( 'change', render ); // call this only in static scenes (i.e., if there is no animation loop)
    controls.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled
    controls.dampingFactor = 0.25;
    controls.screenSpacePanning = false;
    controls.minDistance = 100;
    controls.maxDistance = 500;
    controls.maxPolarAngle = Math.PI / 2;


    window.addEventListener( 'resize', onWindowResize, false );
}

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

function animate() {
    requestAnimationFrame( animate );
    controls.update();
    render();
}

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

function start(){
    init();
    animate();
}
window.onload = start;
javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Randall
    2020-11-20T21:20:52Z2020-11-20T21:20:52Z

    因为您的渲染器变量未定义

    首先创建一个像这样的变量

    let renderer = new THREE.WebGLRenderer();
    

    然后在函数中或任何你需要的地方使用它

    这是一个简单的例子。

    function getRenderer() {
        let renderer = new THREE.WebGLRenderer({antialias: true});
        renderer.setPixelRatio(window.devicePixelRatio);    
        renderer.setSize(window.innerWidth, window.innerHeight);
        renderer.shadowMap.enabled = true;
        renderer.shadowMap.type = THREE.PCFSoftShadowMap;
        document.body.appendChild(renderer.domElement);
        return renderer;
      }
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5