如何按自己的中心旋转所有对象,然后将它们转换到实际位置(它不起作用)

how to rotate all objects by their own centers and then translate them to the real position (it isn#39;t working)(如何按自己的中心旋转所有对象,然后将它们转换到实际位置(它不起作用))
本文介绍了如何按自己的中心旋转所有对象,然后将它们转换到实际位置(它不起作用)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

限时送ChatGPT账号..

有什么方法可以让所有不与原点中心(vector3(0.0f,0.0f,0.0f))对齐的物体绕自己的中心轴旋转?

What is the way to make all the objects that are not aligned with the origin center (vector3(0.0f,0.0f,0.0f)) , rotate about its own central axis?

伪代码问题:

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.

I use C++, glm (to matrix manage) and OpenGL.

推荐答案

如果您想将对象局部旋转到其自己的坐标系,请执行以下操作:

if you want to rotate object locally to its own coordinate system then do this:

M=inverse(inverse(M)*rotation_matrix);

  • M 是你的对象变换矩阵
  • rotation_matrix 是任意旋转 (glRotate())
  • inverse 是计算逆矩阵的函数,您可以使用我的 逆矩阵计算 或这个 在 C++ 中围绕 LCS x (lrotx) 实现的旋转(在答案的底部)
    • M is your object transform matrix
    • rotation_matrix is any rotation (glRotate())
    • inverse is function that computes the inverse matrix you can use mine inverse matrix computation or this rotation around LCS x (lrotx) implementation in C++ (at the bottom of the answer)
    • [edit1]更多关于M和它代表的坐标系的对象之间的关系

      看这里:变换矩阵解剖

      M 原点通常是物体的中心(或旋转运动的中心点).M 的轴通常与对象对齐,例如在飞机中,X 轴通常是飞行方向.我比较习惯:

      M origin is usually the middle of object (or point which is center of rotation movements). Axises of M are usually aligned with object for example in airplanes the X axis is usually the fly direction. I am more used to:

      • +z 轴作为正向运动
      • +x 为右,-x 为左
      • +y 向上,-y 向下
      • +z axis as forward direction movement
      • +x as right, -x as left
      • +y as up and -y as down

      pith,yaw,roll 然后是围绕 x,y,z

      这篇关于如何按自己的中心旋转所有对象,然后将它们转换到实际位置(它不起作用)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

      本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

OpenGL transforming objects with multiple rotations of Different axis(OpenGL 变换不同轴多次旋转的对象)
GLFW first responder error(GLFW 第一响应者错误)
SOIL not linking correctly(SOIL 连接不正确)
Core profile vs version string? Only getting GLSL 1.3/OGL 3.0 in mesa 10.0.1(核心配置文件与版本字符串?在 mesa 10.0.1 中只获得 GLSL 1.3/OGL 3.0)
What is the range of OpenGL texture ID?(OpenGL 纹理 ID 的范围是多少?)
How taxing are OpenGL glDrawElements() calls compared to basic logic code?(与基本逻辑代码相比,OpenGL glDrawElements() 调用的繁重程度如何?)