three.js的组合与合并,raycaster射线无法获取group
1.组合
创建一个组非常简单,在组中添加子元素的效果是,你可以对组进行移动、缩放和变形,而所有的子对象都会受到影响。使用组的时候,你依然可以引用、修改每一个单独的几何体。但是,使用raycaster射线是无法获取组group,只能获取组中的元素。
var geometry = new THREE.BoxBufferGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( {color: 0x00ff00} ); var cubeA = new THREE.Mesh( geometry, material );
cubeA.position.set( 100, 100, 0 ); var cubeB = new THREE.Mesh( geometry, material );
cubeB.position.set( -100, -100, 0 ); //create a group and add the two cubes
//These cubes can now be rotated / scaled etc as a group
var group = new THREE.Group();
group.add( cubeA );
group.add( cubeB ); scene.add( group );
2.合并
组里的对象还是独立的,需要对它们分别进行处理和渲染。通过合并可以将多个几何体合并起来,创建一个几何体,可以提升性能。最大的缺陷是失去了对单个对象的控制。想要移动、旋转、或者缩放某个方块是不可能的。
合并后的组可以通过raycaster射线获取合并后的结合体。
//创建建筑
createBuilding:function(obj){
var width = obj.width || 4;//建筑长
var height = obj.height || 1;//建筑高
var depth = obj.depth || 2;//建筑宽
var floor = obj.depth || 5;//楼层数量 var groupGeometry = new THREE.Geometry(); for(var i=0;i<floor;i++){
var geometry = new THREE.BoxGeometry(width, height, depth);
var material = new THREE.MeshLambertMaterial({ color: 0x696969 });
var box = new THREE.Mesh(geometry, material);
box.position.set(0, height*i+height/2+0.02*i, 0); box.updateMatrix();
groupGeometry.merge(box.geometry, box.matrix);
} var group = new THREE.Mesh(groupGeometry, new THREE.MeshLambertMaterial({ color: 0x696969 }))
group.name="movealbe-element-" + new Date().getTime();
return group;
}
three.js的组合与合并,raycaster射线无法获取group的更多相关文章
- three.js的raycaster射线无法获取visible为false的网格对象
在做网格对象拖放时,需要创建一个不可见的参考平面,如果将平面对象设置为visible,则射线对象无法获取该平面,就无法进行位置计算. onDocumentMouseMove: function (e) ...
- three.js raycaster射线碰撞的坑 (当canvas大小 不是屏幕大小是解决拾取物体的办法)
这里只是记录一下坑,方便查阅,内容主要援引自:three.js Raycaster 射线拾取 canvas不占满整屏时射线拾取存在偏差 1. 世界坐标系: 世界坐标系位于屏幕的中心(0,0,0),往右 ...
- 使用js 设置组合快捷键
使用js 设置组合快捷键 使用js设置快捷键的本质就是获得你要设置的这个键的keyCode 的值,如果要加ctrl,alt,shift,那么就添加一个ctrlkey,altKey,shiftKey来判 ...
- ASP.NET MVC 4 Optimization的JS/CSS文件动态合并及压缩
JS/CSS文件的打包合并(Bundling)及压缩(Minification)是指将多个JS或CSS文件打包合并成一个文件,并在网站发布之后进行压缩,从而减少HTTP请求次数,提高网络加载速度和页面 ...
- js或css文件合并的三种方式推荐
源文档 <http://www.jb51.net/article/32834.htm> 在Web项目的开发中,js,css文件会随着项目的开发变得越来越多,越来越大,这就给给性能方面带来一 ...
- js 排列 组合 的一个简单例子
最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比 ...
- php js css加载合并函数 宋正河整理
<?php //php js css加载合并函数 宋正河整理 //转载请注明出处 define('COMBINE_JS',true); define('COMBINE_CSS',true); ...
- 编写gulpfile.js文件:压缩合并css、js
使用gulp一共有四个步骤: 1. 全局安装 gulp: $ npm install --global gulp 2. 作为项目的开发依赖(devDependencies)安装: $ npm inst ...
- js 可选链 & 空值合并 In Action
js 可选链 & 空值合并 In Action const obj = { props: { name: 'eric', }, // prop, 不存在的属性 ️ }; console.log ...
随机推荐
- Python_02
Python 判断语句 if,while if ture: print(1) else: print(0) for循环和内嵌函数range() range(a,b,c) a:起始位置 b:终止 ...
- Centos中MySQL数据的备份和恢复
1.MySQL数据备份 MySQL在Centos备份中用到了mysqldump这个文件,首先得把它找出来: [root@instance-3snz20bz ~]# whereis mysqldump ...
- Linux系统安装与初用
1.结合实验尝试,并查阅资料,总结在实验准备中提出的7个问题. (1).Linux的发行版本.内核版本:二者区别与联系. 核心版本主要是Linux的内核,发行版本是各个公司推出的版本,他们与核心版本是 ...
- 学习java一个月的进展
作为一个阶段性总结,有很多的东西需要说明,有细节的,有架构的,且听我细细说来. java和php最大的区别不止是类型的强制定义,而是在设计思路上有着非常重大的偏差(虽然SY3框架已经开始借鉴JAVA的 ...
- 08_java基础知识——方法重载
一.自变量顺序不同 package com.huawei.test.java04; /** * This is Description * * @author 王明飞 * @date 2018/08/ ...
- C#中的抽象类、抽象方法和虚方法
[抽象类]abstract 修饰符可与类和方法一起使用定义抽象类的目的是提供可由其子类共享的一般形式.子类可以根据自身需要扩展抽象类.抽象类不能实例化.抽象方法没有函数体.抽象方法必须在子类中给出具体 ...
- 再谈Retina下1px的解决方案
https://www.w3cplus.com/css/fix-1px-for-retina.html
- 不应该使用String.valueOf的场景
今天在接口中接收参数转换String时遇到一个巨大的坑,也是自己疏忽大意所致---- 事情是这样的,项目中接口的公共入参对象为Map<String,Object>,而sql中需要的参数为S ...
- pycharm的快捷键
一.编辑(Editing) Ctrl+Space 基本的代码完成(类.方法.属性) Ctrl+Alt+Space 快速导入任意类 Ctrl+Shift+Enter 语句完成 Ctrl+P 参数信息(在 ...
- PHP连接mysql数据库报错:Call to undefined function mysql_connect()
http://php.net/manual/zh/intro.mysqli.php 系统环境PHP7.0+Mysql5.7+Apache2. 运行一个数据库连接测试示例时报错: [client 127 ...