|
10Qter豆
本帖最后由 adadadda 于 2017-8-21 18:19 编辑
各位吼啊。最近着手做一个可以显示和编辑3D图形的软件,基本思路是用Canvas3D,基于Three.js引擎来设计。现在遇到一个问题,就是无法显示阴影。求助啊
代码如下:
- .import "three.js" as Engine
- var camera, scene, renderer;
- var cube;
- function initializeGL(canvas) {
- scene = new Engine.THREE.Scene();
- // var axes = new Engine.THREE.AxisHelper(20);
- // scene.add(axes);
- var planeGeometry = new Engine.THREE.PlaneGeometry(60, 20);
- var planeMaterial = new Engine.THREE.MeshLambertMaterial({color: 0xcccccc});
- var plane = new Engine.THREE.Mesh(planeGeometry, planeMaterial);
- plane.rotation.x = -0.5*Math.PI;
- plane.position.set(15, 0, 0);
- scene.add(plane);
- var cubeGeometry = new Engine.THREE.CubeGeometry(4, 4, 4);
- var cubeMaterial = new Engine.THREE.MeshLambertMaterial({color: 0xff0000});
- cube = new Engine.THREE.Mesh(cubeGeometry, cubeMaterial);
- cube.position.set(-4, 3, 0);
- scene.add(cube);
- var sphereGeometry = new Engine.THREE.SphereGeometry(4, 20, 20);
- var sphereMaterial = new Engine.THREE.MeshLambertMaterial({color: 0x7777ff});
- var sphere = new Engine.THREE.Mesh(sphereGeometry, sphereMaterial);
- sphere.position.set(20, 4, 2);
- scene.add(sphere);
- var spotLight = new Engine.THREE.SpotLight(0xffffff);
- spotLight.position.set(-40, 60, 10);
- scene.add(spotLight);
- camera = new Engine.THREE.PerspectiveCamera(45, canvas.width/canvas.height, 0.1, 1000);
- // camera = new Engine.THREE.OrthographicCamera(-canvas.width/2, canvas.width/2,
- // canvas.height/2, -canvas.height/2, 0.1, 1000);
- camera.position.set(-30, 40, 30);
- camera.lookAt(scene.position);
- renderer = new Engine.THREE.Canvas3DRenderer({
- canvas: canvas,
- antialias: true,
- devicePixelRatio: canvas.devicePixelRatio });
- renderer.setSize(canvas.width, canvas.height);
- renderer.setClearColor(0xeeeeee, 1.0);
- renderer.shadowMapEnabled = true;
- plane.receiveShadow = true;
- cube.castShadow = true;
- sphere.castShadow = true;
- spotLight.castShadow = true;
- }
复制代码 还有一个问题就是,qt使用的Three.js貌似在官方版的基础上进行一定的修改,因为我尝试用最新的Three.js版本,无法运行。即便用Three.js的Version74(qt官方的最近Three.js版本是V74),也无法运行。
最后, QT的Canvas3D组件没有requestAnimation方法,但是有 renderOnDemand属性可以直接使用。QT的Canvas3D组件无法貌似无法加载Stats模块,但自带FPS属性可以使用。
然而,阴影效果始终弄不出来,求帮助!!
最终跑出来是这么个东西: |
|