我目前正在尝试制作一个“地牢生成器”-我有一些场景对象,每个对象内部都有一个EntryNode,ExitNode和Room网格。我在基于先前的房间ExitNode设置Room对象的位置时遇到麻烦。
模型的结构如下:
; Encrypted HTTP proxy authenticated with a client certificate
; located in the Windows certificate store
;[example-proxy]
;client = yes
;accept = 127.0.0.1:8080
;connect = example.com:8443
不能保证房间大小统一或始终相同,否则这很简单。
我目前正在像这样创建一个房间:
Scene
L Entry_Node (instanceof THREE.Mesh) position: 0,0,0
L Room (instaceof THREE.Group), positiom 0,0,23
L (Several Children that are irrelevant)
L Exit_Node position: 0,0,46
我正在尝试像这样附加多个房间:
_generateRoom(name) {
let room = common.assets.model(name); // Returns THREE.Scene with EntryNode, Room and ExitNode as children
const entryNode = room.children.find(e => e.name.startsWith('Node_Entry'));
const exitNode = room.children.find(e => e.name.startsWith('Node_Exit'));
return [room, entryNode, exitNode];
}
但是,问题是在_preGenerate(count) {
let rooms = [];
for (let i = 0; i < count; i++) {
const room = this._generateRoom('endless_straight3'); // Returns an array as [Room, EntryNode, ExitNode]
this._stage.add(room[0]);
room[0].updateMatrixWorld();
if (rooms.length > 0) {
this._exitNode.updateMatrixWorld(true);
this._exitNode.getWorldPosition(room[0].position);
} else {
room[0].position.setScalar(0);
}
this._exitNode = room[2];
console.log(room[0].position);
rooms.push(room);
}
}
处-它总是返回(貌似)退出节点的本地位置-this._exitNode.getWorldPosition(room[0].position);
我希望它根据世界位置返回退出节点的位置-因此第一个房间为46,第二个房间为92,第三个房间为138,依此类推。 不知道这里出了什么问题,我们将不胜感激!
cc。 https://discourse.threejs.org/t/trouble-getting-world-position-of-object/7540
答案 0 :(得分:1)
如Three.js discourse所述,问题在于更改其位置后不更新父房间WorldMatrix。将room[0].updateMatrixWorld();
移至更新后,可以解决所有问题。
const room = this._generateRoom('endless_straight3');
this._stage.add(room[0]);
if (rooms.length > 0) {
this._exitNode.updateMatrixWorld(true);
this._exitNode.getWorldPosition(room[0].position);
} else {
room[0].position.setScalar(0);
}
room[0].updateMatrixWorld();
this._exitNode = room[2];
很高兴我能够提供帮助。