首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >围绕其坐标旋转对象

围绕其坐标旋转对象
EN

Stack Overflow用户
提问于 2018-10-16 19:55:24
回答 1查看 92关注 0票数 1

如果我想把物体绕着它的局部坐标旋转成世界(全局)坐标。从理论上讲,我需要将它转换为(0,0)全局坐标,然后旋转并将其转换回全局坐标。

但是如果对象已经在(0,0)全局坐标上?那我就不用翻译了。但出了点问题。

这是多维数据集的顶点和索引:

代码语言:javascript
复制
export const cubeIndices = [
  0, 1, 2,
  0, 2, 3,
  4, 5, 6,
  4, 6, 7,
  5, 0, 3,
  5, 3, 6,
  1, 4, 7,
  1, 7, 2,
  5, 4, 1,
  5, 1, 0,
  3, 2, 7,
  3, 7, 6,
]

export const cubeData = [
-0.5 ,-0.5, 1.0,
0.5, -0.5, 1.0,
0.5 ,0.5 ,1.0,
-0.5, 0.5 ,1.0,
0.5, -0.5 ,0.0,
-0.5, -0.5, 0.0,
-0.5, 0.5 ,0.0,
0.5, 0.5,0.0,
]

没有任何转换对象呈现,没有问题。

我想把它转成Y型斧头。我在绘图功能中的下一步是:

代码语言:javascript
复制
mat4.rotateY(shape.transformMatrix,shape.transformMatrix,0.01)

但得到了:

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-16 20:27:24

立方体的中心不是(0,0,0),而是(0,0,0.5)。当你围绕y轴旋转立方体时,它绕着世界的中心旋转,即(0,0,0)。如果你想把立方体围绕着一个对称轴旋转,它与世界的y轴平行,那么你必须选择。

将z坐标分别从0和-0.5改为- 0.5,使立方体的对称轴位于世界的中心:

代码语言:javascript
复制
export const cubeData = [
    -0.5, -0.5,  0.5,
     0.5, -0.5,  0.5,
     0.5,  0.5,  0.5,
    -0.5,  0.5,  0.5,
     0.5, -0.5, -0.5,
    -0.5, -0.5, -0.5,
    -0.5,  0.5, -0.5,
     0.5,  0.5, -0.5,
]

当然,这也可以通过翻译矩阵来完成。创建一个分离的旋转矩阵和平移矩阵。转换必须首先应用于顶点,并且必须执行同样的操作,就像手动更改每个顶点by-0.5的z分量一样。

旋转矩阵必须由单位矩阵初始化:

代码语言:javascript
复制
mat4.identity(rotationMat);

翻译矩阵必须包含沿z轴(-0.5)的平移:

代码语言:javascript
复制
var translation = vec3.create();
vec3.set(translation, 0, 0, -0.5);
mat4.identity(translateMat);
mat4.translate(translateMat, translateMat, translation);

平移矩阵和旋转矩阵必须串联(乘)。注意,您必须尊重转换的顺序。首先转换模型,然后旋转模型。

由于旋转矩阵是分开的,它可以不断变化:

代码语言:javascript
复制
mat4.rotateY(rotationMat,rotationMat,0.01)
mat4.multiply(shape.transformMatrix, rotationMat, translateMat)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52843134

复制
相关文章

相似问题

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