- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为一个 obj 文件使用了 OBJMTLLoader 类,并且通过使用 object.rotation.y -= 0.5
围绕对象上的一个固定点旋转效果很好。使用相同的代码(减去更改相机位置),我将 .obj 文件替换为另一个文件,并且旋转现在以圆周运动进行,就像围绕相机而不是停留在原地。知道为什么我使用相同的代码吗?
谢谢
编辑:
var OBJLoaded;
function init()
{
container = document.getElementById('player');
camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 2000);
camera.position.x = 110;
camera.position.z = -160;
camera.position.y = 15;
// camera.position.z = 40;
// camera.position.y = 2;
//scene
scene = new THREE.Scene();
var ambient = new THREE.AmbientLight( 0x444444 );
scene.add( ambient );
var directionalLight = new THREE.DirectionalLight( 0xffffff );
directionalLight.position.set( 100, 90, 200 );
scene.add( directionalLight );
//model
var loader = new THREE.OBJMTLLoader();
//loader.load('./assets/Stereo_LowPoly.obj', './assets/Stereo_LowPoly.mtl', function(object)
loader.load('./assets/studio_beats.obj', './assets/studio_beats.mtl', function(object)
{
OBJLoaded = object;
console.log(object);
scene.add( object );
});
renderer = new THREE.WebGLRenderer({alpha: true});
renderer.setClearColor(0x000000, 0);
renderer.setSize($('#player').width(), $('#player').height());
container.appendChild(renderer.domElement);
scene.add(camera);
}
function animateBoombox()
{
requestAnimationFrame(animateBoombox);
render();
}
function render()
{
var rotSpeed = 0.004;
if (OBJLoaded)
{
OBJLoaded.rotation.y -= rotSpeed;
}
renderer.render(scene, camera);
}
评论的部分(相机和对象加载)是针对上一个加载的对象。这工作正常,但未注释的部分工作不一样。
最佳答案
您加载的对象有一个来自模型创建软件的轴心点...您需要在使用 three.js 加载它之前更改对象的轴心点。
如果你不能,你应该像我在加载器回调中那样做:
var loader = new THREE.OBJMTLLoader();
loader.load('your_file.obj', 'your_file.mtl', function (object) {
object.traverse(function (child) {
child.centroid = new THREE.Vector3();
for (var i = 0, l = child.geometry.vertices.length; i < l; i++) {
child.centroid.add(child.geometry.vertices[i].clone());
}
child.centroid.divideScalar(child.geometry.vertices.length);
var offset = child.centroid.clone();
child.geometry.applyMatrix(new THREE.Matrix4().makeTranslation(-offset.x, -offset.y, -offset.z));
child.position.copy(child.centroid);
child.geometry.computeBoundingBox();
});
});
然后旋转你的对象...
关于javascript - 旋转 .obj 文件 OBJMTLLoader three.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22277081/
我有一个来自 Blender 的带有纹理的 3d 模型,格式为 OBJ/MTL/JPG。但是我无法使用 Three,js 正确渲染它。 查看器代码是identical to the example o
我有一个包含 3 个立方体和一个 DAT.GUI 菜单的场景,我只想在菜单上(单独)选中任何立方体时将其设置为线框。 我所做的对我的 3 个立方体中的 2 个有效,但我不知道为什么,第一个立方体没有修
.load() 函数允许用户提供一个回调函数,以便在加载对象时执行。但是,似乎此回调是在加载 .obj 和 .mtl 文件之后,但在解析 .mtl 和出现纹理图像之前执行的。这导致对象在没有任何纹理的
我已经从 turbosquid 下载了一个免费模型.它包含一个 obj 和 mtl,以及纹理(高光、凹凸贴图等)。现在我只对 mtl 和 obj 文件感兴趣。所以我下载了一个免费模型from here
我正在构建一个允许用户以 obj/mtl 格式上传 3D 模型的应用程序。管理员在我们的查看器中显示加载对象的预览。我想为用户提供控件来设置加载对象的初始 y 位置和相机的初始 z 位置。我已经解决了
我在场景中加载一些对象: var objectInfo = [ {"objURL":"3D/Barrel/barrel.obj", "mtlURL":"3D/Barrel/barrel.mtl","x
我使用 THREE.OBJMTLLoader 加载了一个模型. var loader = new THREE.OBJMTLLoader(); loader.addEventListener('load
我正在尝试使用 .obj 和 .mtl 文件(使用three.js)用汽车网格替换立方体网格 但每次我收到这个错误时: Uncaught TypeError: e.OBJMTLLoader is no
如何动态更改 .obj 模型上的 Material ?我的每个模型都包含带有纹理的 .obj、.mtl 和 .jpg 文件。我应该以某种方式更改 .mtl 文件吗? 在下面的代码中,我将 .obj 的
我为一个 obj 文件使用了 OBJMTLLoader 类,并且通过使用 object.rotation.y -= 0.5 围绕对象上的一个固定点旋转效果很好。使用相同的代码(减去更改相机位置),我将
我使用 Three.js 的旧版本已经有一段时间了,所以我决定升级到最新版本 (r68)。我知道我会遇到一些问题,但我没想到会删除 geometry.computeCentroids() 和 .cen
我有一个模型的“.obj”和“.mtl”文件,我正在通过 OBJMTLLoader 加载它。 “.mtl”指定要应用于模型的纹理,three.js 加载模型并使用应用的纹理渲染它。 但事情是这样的。
我是一名优秀的程序员,十分优秀!