首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >threejs几何坐标系到屏幕坐标系

threejs几何坐标系到屏幕坐标系
EN

Stack Overflow用户
提问于 2016-07-30 01:39:29
回答 1查看 1.2K关注 0票数 0

平面的宽度为800px:

代码语言:javascript
复制
geometry = new THREE.PlaneGeometry( 800, 20, 0, 0 );

material = new THREE.MeshBasicMaterial({ 
    color:0xFFFFFF,
    side:THREE.DoubleSide 
});

mesh = new THREE.Mesh(geometry, material);
mesh.updateMatrixWorld();
scene.add(mesh);

当我试图操纵它时,会使坐标系成为其他垃圾

代码语言:javascript
复制
mesh.geometry.vertices[0].setY(0);
mesh.geometry.vertices[0].setX(0);
mesh.geometry.vertices[0].setZ(0);

mesh.geometry.vertices[1].setY(0);
mesh.geometry.vertices[1].setX(800);
mesh.geometry.vertices[1].setZ(0);

mesh.geometry.vertices[2].setY(20);
mesh.geometry.vertices[2].setX(0);
mesh.geometry.vertices[2].setZ(0);

mesh.geometry.vertices[3].setY(20);
mesh.geometry.vertices[3].setX(800);
mesh.geometry.vertices[3].setZ(0);

mesh.geometry.verticesNeedUpdate = true;

我可以将几何对象的坐标系调整到相机框架的坐标系?

0px =0

EN

回答 1

Stack Overflow用户

发布于 2016-07-30 06:51:10

如果这不是你要找的我很抱歉。如果您的意思是需要将3d世界中的vector3位置转换为其在屏幕上的2d像素位置,下面是一个典型的转换:

代码语言:javascript
复制
    getScreenTranslation = function (obj, renderer, camera) {
        var vector = new THREE.Vector3();
        var widthHalf = 0.5 * renderer.context.canvas.width;
        var heightHalf = 0.5 * renderer.context.canvas.height;

        vector.setFromMatrixPosition(obj.matrixWorld);
        vector.project(camera);
        vector.x = vector.x * widthHalf + widthHalf;
        vector.y = -(vector.y * heightHalf) + heightHalf;
        return {
                x: vector.x,
                y: vector.y
        };
   };

记住,你可能需要补偿你的画布元素在你的网页中的位置。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38664579

复制
相关文章

相似问题

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