当前位置: 首页 > 知识库问答 >
问题:

如何旋转所有对象由他们自己的中心,然后将他们翻译到真正的位置(它不工作)

蓬弘
2023-03-14

如何使所有未与原点中心(矢量3(0.0f,0.0f,0.0f))对齐的对象绕其自身的中心轴旋转?

伪代码中的问题:

vector3 vector3 objectCenter = (10,5,0); // current object center
vector3 vector3 objectPosition = (40,5,0); // Place to translate the object
vector3 objectRotation; = 45.0f;

    matrix.loadIdentity ();
    matrix.translate (objectCenter);

    //apply transformations
    matrix.rotateX (objectRotation);

    matrix.translate (-objectCenter);

    //itś work correctly until here
    //when i try to translate the object to the real position, the rotation is incorrect.

    matrix.translate (objectPosition);

我使用C、glm(矩阵管理)和OpenGL。

共有1个答案

双志强
2023-03-14

如果您想将对象本地旋转到自己的坐标系,请这样做:

M=inverse(inverse(M)*rotation_matrix);
  • M是你的对象变换矩阵
  • rotation_matrix是任何旋转(glRotate()
  • inverse是计算逆矩阵的函数,您可以使用我的逆矩阵计算或在C中(在答案的底部)围绕LCS x(lrotx)实现的旋转

[edit1]更多关于M和它所代表的坐标系的对象之间的关系

看这里:变换矩阵解剖

M原点通常是对象的中间(或旋转运动的中心点)。M的轴通常与对象对齐,例如在飞机上,X轴通常是飞行方向。我更习惯于:

  • z轴作为前进方向移动
  • xas right,-x as left
  • yas up和-y as down

pith、yaw、roll是对象围绕x、y、z的局部旋转

 类似资料:
  • 问题内容: 我不知道这是否可能,但是可以。使用回调使工作变得更加困难。 我有一个包含html文件的目录,我想使用node.js和socket.io将它们以对象块的形式发送回客户端。 我所有的文件都在/ tmpl中 因此,套接字需要读取/ tmpl中的所有文件。 对于每个文件,必须将数据存储在对象中,文件名作为键,内容作为值。 最后的回调也是错误的。目录中的所有文件完成后,必须调用它。 但是我不知道

  • 问题内容: 当我打字 是物体吗? 谁能向我解释在Java中每件事都是一个对象吗? 问题答案: 每个对象都是(注意:没有超类。;)) 但是,有很多东西不是对象。 原语和引用。 字段(字段本身不是内容) 局部变量和参数。 通用类(在Java 8中可能会更改) 方法(将在Java 8中更改) 代码块(将在Java 8中更改) 将代码块作为对象是Java 8中最令人兴奋的功能之一。下面的示例都是Closu

  • 问题内容: 我试图获得两个计数,然后将这两个计数相除,以得出我所计数的项目的比率。我在这里看到了这篇文章,并尝试了。我的结果出现错误,没有错误消息,只是错误的数字。我正在使用SQL Server 2008 这是我的代码: 计数正确产生并显示,但是对于比率,我为0,并且不确定为什么会得到此值。 谢谢你, 问题答案: 使用 SQL Server认为A.NUM / A.DENOM是int,因为A.NUM

  • 因此,用户从我的web服务器下载我的apk应用程序,而不是通过google play。他们将从通知栏打开应用程序并进行安装。 但是,如果他们错误地删除了通知,需要手动查找,我该怎么办?作为开发人员,我能做些什么来帮助指导他们?有没有什么解决方案,比如在下载时自动创建应用程序快捷方式?

  • 在我的Django应用程序中,如何将模型中的对象转换成包含模型对象外键引用的字典? 当我尝试这样做时: 生成的字典只有直接字段。我还想获取与 Model 对象相关的外键。我该怎么做?