找回密码
 立即注册
收起左侧

Canvas3D添加阴影

2
回复
7300
查看
[复制链接]
累计签到:3 天
连续签到:1 天
来源: 2017-8-21 16:57:57 显示全部楼层 |阅读模式
10Qter豆
本帖最后由 adadadda 于 2017-8-21 18:19 编辑

各位吼啊。最近着手做一个可以显示和编辑3D图形的软件,基本思路是用Canvas3D,基于Three.js引擎来设计。现在遇到一个问题,就是无法显示阴影。求助啊
代码如下:
  1. .import "three.js" as Engine

  2. var camera, scene, renderer;
  3. var cube;

  4. function initializeGL(canvas) {
  5.     scene = new Engine.THREE.Scene();

  6. //    var axes = new Engine.THREE.AxisHelper(20);
  7. //    scene.add(axes);

  8.     var planeGeometry = new Engine.THREE.PlaneGeometry(60, 20);
  9.     var planeMaterial = new Engine.THREE.MeshLambertMaterial({color: 0xcccccc});
  10.     var plane = new Engine.THREE.Mesh(planeGeometry, planeMaterial);
  11.     plane.rotation.x = -0.5*Math.PI;
  12.     plane.position.set(15, 0, 0);
  13.     scene.add(plane);

  14.     var cubeGeometry = new Engine.THREE.CubeGeometry(4, 4, 4);
  15.     var cubeMaterial = new Engine.THREE.MeshLambertMaterial({color: 0xff0000});
  16.     cube = new Engine.THREE.Mesh(cubeGeometry, cubeMaterial);
  17.     cube.position.set(-4, 3, 0);
  18.     scene.add(cube);

  19.     var sphereGeometry = new Engine.THREE.SphereGeometry(4, 20, 20);
  20.     var sphereMaterial = new Engine.THREE.MeshLambertMaterial({color: 0x7777ff});
  21.     var sphere = new Engine.THREE.Mesh(sphereGeometry, sphereMaterial);
  22.     sphere.position.set(20, 4, 2);
  23.     scene.add(sphere);

  24.     var spotLight = new Engine.THREE.SpotLight(0xffffff);
  25.     spotLight.position.set(-40, 60, 10);
  26.     scene.add(spotLight);

  27.     camera = new Engine.THREE.PerspectiveCamera(45, canvas.width/canvas.height, 0.1, 1000);
  28. //    camera = new Engine.THREE.OrthographicCamera(-canvas.width/2, canvas.width/2,
  29. //                                                 canvas.height/2, -canvas.height/2, 0.1, 1000);
  30.     camera.position.set(-30, 40, 30);
  31.     camera.lookAt(scene.position);

  32.     renderer = new Engine.THREE.Canvas3DRenderer({
  33.                 canvas: canvas,
  34.                 antialias: true,
  35.                 devicePixelRatio: canvas.devicePixelRatio });
  36.     renderer.setSize(canvas.width, canvas.height);
  37.     renderer.setClearColor(0xeeeeee, 1.0);

  38.     renderer.shadowMapEnabled = true;
  39.     plane.receiveShadow = true;
  40.     cube.castShadow = true;
  41.     sphere.castShadow = true;
  42.     spotLight.castShadow = true;
  43. }
复制代码
    还有一个问题就是,qt使用的Three.js貌似在官方版的基础上进行一定的修改,因为我尝试用最新的Three.js版本,无法运行。即便用Three.js的Version74(qt官方的最近Three.js版本是V74),也无法运行。
     最后, QT的Canvas3D组件没有requestAnimation方法,但是有 renderOnDemand属性可以直接使用。QT的Canvas3D组件无法貌似无法加载Stats模块,但自带FPS属性可以使用。
     然而,阴影效果始终弄不出来,求帮助!!

    最终跑出来是这么个东西:

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-8-21 17:00:57 显示全部楼层
代码怎么弄不上去?
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-8-23 22:02:40 显示全部楼层
额,重新在书册里面查了一下,canvas3D渲染器不支持阴影和部分材质的渲染。很尴尬。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了