我正在使用一个像这样加载的对象(我将它保存为一个全局变量,以便以后可以更改它):
model1 = null;
var mtlLoader = new THREE.MTLLoader();
mtlLoader.load("http://blabla.mtl", function(materials) {
materials.preload();
var objLoader = new THREE.OBJLoader();
objLoader.setMaterials(materials);
objLoader.load("http://blabla.obj", function(object) {
object.scale.x = 0.0004;
object.scale.y = 0.0004;
object.scale.z = 0.0004;
object.rotateX(Math.PI / 2);
object.rotateZ(Math.PI / 2);
object.add(new THREE.AxisHelper(2))
model1 = object; //save in global variables
scene.add(model1);
});
});当我渲染的时候,我想根据长方体的位置变化来改变模型的位置:
function render(ms: number) {
if (lastTime) {
update((ms-lastTime)/1000)
}
lastTime = ms
requestAnimationFrame(render)
renderer.render( scene, camera )
}
var pos_current;
var pos_new;
var trans;
function update(dt: number) {
if (pause.on) return
//save position of box before it is transformed
pos_current = box.position.clone();
box.updatePosition()
//save new position of box
pos_new = box.position.clone();
//transform the 3D-model according to the box's transformation
trans = pos_current.sub(pos_new);
model1.position.add(trans);
console.log(model1.position)我可以在控制台中看到model1的位置发生了变化,但对象根本没有移动,我真的不知道为什么。
非常感谢您的帮助:)
发布于 2017-11-14 03:16:30
让它正常工作-问题是我试图更新model1的位置,在它实际加载到obj-loader中之前:D
发布于 2018-10-19 00:49:22
我有个问题。我也创建了一个全局变量,并在加载时将其等同于object。但它在控制台日志中显示该变量为null。我是不是漏掉了什么。
更新:-我理解了在加载之前让humanModel与object相等的部分,但之后该如何处理呢?
let humanModel = null;
OBJLoader.load(
// resource URL
"/Models/Model_1(Malequins)/1/Cadnav.com_B0426014.obj",
// called when resource is loaded
function(object) {
scene.add(object);
humanModel = object; //adding the humanModel to the global variable
camera.lookAt(object.position);
console.log(object.position);
console.log(camera.position);
},
// called when loading is in progresses
function(xhr) {
console.log((xhr.loaded / xhr.total) * 100 + "% loaded");
},
// called when loading has errors
function(error) {
console.log("An error happened " + error);
}
);
console.log(humanModel.position);谢谢
发布于 2019-08-26 16:37:46
您可以将对象(obj文件)保持在x、y或z方向,为此,您需要将其位置设置为:
var loader = new THREE.OBJLoader();
loader.load(
'/models/female.obj',
function(object){
object.position.y=-20;
scene.add(object);
}
)https://stackoverflow.com/questions/47266656
复制相似问题