three.js - 为什么附加到组后顶点不更新?
问题描述
我想创建一组线条。第一行:
var geometry = new THREE.Geometry();
itemLine = new THREE.Line( geometry, material );
当前几何:
geometry.vertices[0]
Object { x: -540, y: 50, z: 0 }
之后,我创建组并设置位置:
item = new THREE.Group();
item.attach(itemLine);
item.position.set( centerPoint.x, centerPoint.y, 0 );
centerPoint 不是 (0,0,0)
创建组并附加孩子后,我在控制台中看到:
geometry.vertices[0]
Object { x: -540, y: 50, z: 0 }`
顶点未更新!我想要新的坐标(本地和世界),具有组的偏移位置。
解决方案
Geometry.vertices
定义局部空间中的几何。变换 3D 对象或其祖先并不重要,顶点将始终保持相同的值。
您可以通过线世界矩阵将顶点转换为世界空间来实现您想要的结果。这是此工作流的完整示例代码。
var geometry = new THREE.Geometry();
geometry.vertices.push( new THREE.Vector3( 0, 0, 0 ) );
geometry.vertices.push( new THREE.Vector3( 1, 0, 0 ) );
var material = new THREE.LineBasicMaterial( { color: 0xff0000 } );
var lines = new THREE.Line( geometry, material );
var group = new THREE.Group();
group.add( lines );
group.position.set( 2, 0, 0 );
group.updateMatrixWorld(); // update world matrices of the hierarchy of 3D objects
scene.add( group );
const vertex = new THREE.Vector3();
vertex.copy( geometry.vertices[ 0 ] ).applyMatrix4( lines.matrixWorld );
console.log( vertex ); // prints {x: 2, y: 0, z: 0}
演示:https ://jsfiddle.net/sy6ur1x7/
three.js R112
推荐阅读
- javascript - 名为Powers的JS任务的解决问题 - 函数和数组
- python - 解析 XML 标头
- python - ImportError django
- google-sheets - Google Sheets: How do I combine a column of URLs and a column of text into one?
- sql - Case statement gives group by clause error
- java - 如何为 jdbi 的 oracle 数据库支持 CREATE TABLE IF NOT EXISTS?
- powershell - 分组事件日志条目和计数错误
- mongodb - mongodb failed to start on ubuntu 18.04lts
- java - 如何在 JSP 中迭代 JSON 响应?
- gradle - 为什么我无法使用 Gradle Kotlin DSL (5.0) 访问 build.gradle.kts 的“插件”部分中的项目属性?