首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebGL三:改变obj的位置,但对象不移动

WebGL三:改变obj的位置,但对象不移动
EN

Stack Overflow用户
提问于 2017-11-13 22:28:05
回答 3查看 888关注 0票数 0

我正在使用一个像这样加载的对象(我将它保存为一个全局变量,以便以后可以更改它):

代码语言:javascript
复制
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);
   });
});

当我渲染的时候,我想根据长方体的位置变化来改变模型的位置:

代码语言:javascript
复制
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的位置发生了变化,但对象根本没有移动,我真的不知道为什么。

非常感谢您的帮助:)

EN

回答 3

Stack Overflow用户

发布于 2017-11-14 03:16:30

让它正常工作-问题是我试图更新model1的位置,在它实际加载到obj-loader中之前:D

票数 0
EN

Stack Overflow用户

发布于 2018-10-19 00:49:22

我有个问题。我也创建了一个全局变量,并在加载时将其等同于object。但它在控制台日志中显示该变量为null。我是不是漏掉了什么。

更新:-我理解了在加载之前让humanModel与object相等的部分,但之后该如何处理呢?

代码语言:javascript
复制
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);

谢谢

票数 0
EN

Stack Overflow用户

发布于 2019-08-26 16:37:46

您可以将对象(obj文件)保持在x、y或z方向,为此,您需要将其位置设置为:

代码语言:javascript
复制
var loader =  new THREE.OBJLoader();
loader.load(
    '/models/female.obj',
    function(object){
        object.position.y=-20;
        scene.add(object);
    }
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47266656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档