Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenGL旋转-局部轴与全局轴

OpenGL旋转-局部轴与全局轴
EN

Stack Overflow用户
提问于 2012-03-14 13:24:29
回答 2查看 9.9K关注 0票数 3

所以我得到了一个物体,我试图根据偏航,俯仰和滚动方案旋转,相对于物体自己的局部轴,而不是全局空间的轴。根据this的说法,我需要按该顺序执行旋转。我将其解释为:

代码语言:javascript
运行
AI代码解释
复制
glRotatef(m_Rotation.y, 0.0, 1.0, 0.0);
glRotatef(m_Rotation.z, 0.0, 0.0, 1.0);
glRotatef(m_Rotation.x, 1.0, 0.0, 0.0);

但是,绕Y轴和Z轴旋转不起作用。绕Y轴旋转始终相对于全局空间,绕z轴旋转的效果绕X轴旋转为0,否则会造成混乱。

为了确认,我也尝试了相反的顺序,但这也不起作用。我想我也试过了所有其他的订单,所以问题一定是别的什么。可能是这样吗?

这是我获得旋转的方法:

代码语言:javascript
运行
AI代码解释
复制
    ///ROTATIONS
    sf::Vector3<float> Rotation;
    Rotation.x = 0;
    Rotation.y = 0;
    Rotation.z = 0;
    //ROLL
    if (m_pApp->GetInput().IsKeyDown(sf::Key::Up) == true)
    {
        Rotation.x -= TurnSpeed;
    }
    if (m_pApp->GetInput().IsKeyDown(sf::Key::Down) == true)
    {
        Rotation.x += TurnSpeed;
    }
    //YAW
    if (m_pApp->GetInput().IsKeyDown(sf::Key::Left) == true)
    {
        Rotation.y -= TurnSpeed;
    }
    if (m_pApp->GetInput().IsKeyDown(sf::Key::Right) == true)
    {
        Rotation.y += TurnSpeed;
    }
    //PITCH
    if (m_pApp->GetInput().IsKeyDown(sf::Key::Q) == true)
    {
        Rotation.z -= TurnSpeed;
    }
    if (m_pApp->GetInput().IsKeyDown(sf::Key::E) == true)
    {
        Rotation.z += TurnSpeed;
    }

然后将它们添加到m_Rotation中:

代码语言:javascript
运行
AI代码解释
复制
//Rotation
m_Rotation.x += Angle.x;
m_Rotation.y += Angle.y;
m_Rotation.z += Angle.z;

(它们被传递给正在移动的对象内部的一个函数,但没有对它们做任何其他事情)。

有什么想法?还有什么是我应该调用的,以确保所有被旋转的轴都是局部轴?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-18 18:56:09

加里克

当您调用glRotate (角度,x,y,z)时,它围绕传递给glRotate的向量旋转。向量从(0,0,0)到(x,y,z)。

如果要围绕对象的局部轴旋转对象,则需要将对象glTranslate到原点,执行旋转,然后将其平移回原来的位置。

下面是一个示例:

代码语言:javascript
运行
AI代码解释
复制
//Assume your object has the following properties
sf::Vector3<float> m_rotation;
sf::Vector3<float> m_center;

//Here would be the rotate method
public void DrawRotated(sf::Vector<float> degrees) {
  //Store our current matrix 
  glPushMatrix();

  //Everything will happen in the reverse order...
  //Step 3: Translate back to where this object came from
  glTranslatef(m_center.x, m_center.y, m_center.z);

  //Step 2: Rotate this object about it's local axis
  glRotatef(degrees.y, 0, 1.0, 0);
  glRotatef(degrees.z, 0, 0, 1.0);
  glRotatef(degrees.x, 1.0, 0, 0);

  //Step 1: Translate this object to the origin
  glTranslatef(-1*m_center.x, -1*m_center.y, -1*m_center.z);

  //Render this object rotated by degrees
  Render();

  //Pop this matrix so that everything we render after this
  // is not also rotated
  glPopMatrix();
}
票数 1
EN

Stack Overflow用户

发布于 2013-01-06 16:49:41

您的问题是,您正在存储您的x,y,z旋转,并累加到它们。然后,当您渲染时,您将在单位矩阵上执行总累积旋转(您将全局执行所有旋转)。从你的渲染循环中注释掉你的标识调用。并确保在初始化函数中设置了标识。然后

代码语言:javascript
运行
AI代码解释
复制
rotate as normal
m_Rotation.x = m_Rotation.y = m_Rotation.z = 0.0f; 
//clear your rotations you don't want them to accumulate between frames
glpush
translate as normal
(all other stuff)
glpop
//you should be back to just the rotations 
//glclear and start next frame as usual

我相信你在接受了原始答案之后就发现了这一点。旋转或平移的顺序不会影响旋转发生在哪个轴上,而是影响执行旋转的点。例如,将一颗行星旋转15度会使其在全球轴上旋转15度。将其从原点平移,然后旋转将导致它在平移的距离处环绕原点(如果在与旋转相同的轴上,则在x轴上平移,然后在y轴上旋转将不会有任何混淆效果)。

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

https://stackoverflow.com/questions/9702867

复制
相关文章
Mastercam四轴后处理A轴旋转方向反向问题
2、打开“设置”对话框,从左至右,依次点击“文件”→“铣床后处理文件(pst)”→预览
lrglu
2022/03/31
5.1K0
Mastercam四轴后处理A轴旋转方向反向问题
android之绕Y轴旋转
转自:http://lzyfn123.iteye.com/blog/1426844
forrestlin
2022/04/02
1.2K0
R画图y轴范围太大时,如何局部压缩坐标轴?
用 R 画图的时候,如果 y 轴存在个别非常大或非常小的值,或者当中的数值存在非常大差异的时候,画出的图很容易产生误导效果,使人忽略当中某一部分信息。
实验盒
2021/09/22
4K1
R画图y轴范围太大时,如何局部压缩坐标轴?
translate3d绕轴旋转
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/15
6840
Matplotlib 可视化进阶之旋转浮动轴
旋转的浮动轴 难点:添加一个旋转的浮动轴。 本文利用matplotlib 的仿射变换来做实际的旋转,从而创建一个旋转的浮动轴。 这里需要了解戳👇。 Matplotlib 可视化之图表坐标系统 Matplotlib 图像可视化之 imshow 函数详解 首先定义一个画布 import numpy as np import matplotlib.pyplot as plt from matplotlib.transforms import Affine2D from matplotlib.ticker i
数据STUDIO
2022/05/24
8240
Matplotlib 可视化进阶之旋转浮动轴
什么叫真五轴?什么叫假五轴?与三轴有什么区别?
随着汽车行业大量兴起,五轴数控机床越来越多。但在目前的市场上,真五轴(有RTCP功能)机床很少,假五轴(只做分度功能)机床很多。什么叫真五轴、什么叫假五轴,与三轴有什么区别?下面说明如下。
lrglu
2022/03/30
1.5K0
什么叫真五轴?什么叫假五轴?与三轴有什么区别?
如何配置一个无线旋转的外部轴
大家都知道马达是可以没有任何限位进行无限制的旋转的,那么机器人是否可以配置这样的外部轴呢?具体怎么操作呢?
用户4442670
2022/06/29
7880
如何配置一个无线旋转的外部轴
激光器的快轴慢轴
最近设计的几款芯片,都因为出光角过大被砍了,特别对于multiple Emitter的激光芯片。
用户2760455
2022/06/08
2.3K0
激光器的快轴慢轴
three.js 对象绕任意轴旋转--模拟门转动
今天郭先生说说对象如何绕任意轴旋转。说一说其中一种方法,也是比较容易理解的一种,它的原理就是将子对象放到一个盒子中,然后改变子对象相对于父对象的位置(因为子对象的原点默认还是在盒子的中心),最后转动盒子,这样子对象的旋转就不是绕盒子的中心了。如图所示。在线案例点击模拟门旋转。
郭先生的博客
2020/08/31
4.6K0
three.js 对象绕任意轴旋转--模拟门转动
x轴换行
//格式化图表横坐标文字 let textFormatter = function(e) { let arr = e.split(",");/// 将字符串转数组 let str = arr[0] + "\n" + arr[1]; return str; };
用户4344670
2020/06/19
1.9K0
x轴换行
【前端图表】echarts实现散点图x轴时间轴
话不多说,老规矩,先上图,实现echarts实现散点图,x轴数据为时间年月日。 图片.png 实现代码如下: <!DOCTYPE html> <html> <head> <m
王小婷
2018/06/19
5.2K0
实验5 OpenGL模型视图变换
2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它(物体运动,让人看它的不同部分)。(模型变换)
步行者08
2018/10/09
1.7K0
python双Y轴
import matplotlib.pyplot as plt import numpy as np x = np.arange(0., np.e, 0.01) y1 = np.exp(-x) y2 = np.log(x) fig = plt.figure() sns.set_style('white') ax1 = fig.add_subplot(111) ax1.plot(x, y1) ax1.set_ylabel('Y values for exp(-x)') ax1.set_title("Dou
用户1359560
2018/08/27
1.3K0
python双Y轴
Android立体旋转动画实现与封装(支持以X、Y、Z三个轴为轴心旋转)
本文介绍了如何在Android平台上通过Matrix实现旋转动画,包括以X、Y、Z轴为中心进行旋转,以及使用自定义动画封装旋转操作。同时,还介绍了如何基于Matrix实现3D旋转,并给出了具体的示例代码。
用户1155943
2018/01/04
3.5K0
Android立体旋转动画实现与封装(支持以X、Y、Z三个轴为轴心旋转)
Mastercam四轴钻孔
点击编程【参数】-【平面(wcs)】,工件坐标系、刀具平面、绘图面都是要选择俯视图,原点坐标都设置X0、Y0、Z0
lrglu
2022/06/30
1.3K0
Mastercam四轴钻孔
Echart图表X轴为时间轴的解释 原
绘制Echart图表,一般情况下x轴type: 'category',但有时候也用到type:  'time', 这两者的主要区别是,当为时间轴时,不需要指定xAxis 对象的data,时间轴显示的Label 是series对象里面的value[0]的日期,value[0]可以是时间戳也可以是“2018-12-5 10:20:30”这种类型,不能是无效的时间格式类型,同样可以格式化Label
tianyawhl
2019/04/04
8.2K0
【OMRON】外轴补偿
谢谢
EdenChen
2018/07/25
2950
【OMRON】外轴补偿
echart 双折线 双Y轴, 折线,柱形 双Y轴图
双折线图 双Y轴 双坐标系坐标 option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: [ {name: '数值',type: 'value', interval: 300, position:'left'}, {type: 'value', pos
拿我格子衫来
2022/01/24
2K0
echart 双折线 双Y轴, 折线,柱形 双Y轴图
【RAPID】监控轴区域
谢谢
EdenChen
2018/07/25
5050
【RAPID】监控轴区域
bizchartsX轴文字问题
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
4690
bizchartsX轴文字问题

相似问题

OpenTK/OpenGL局部轴旋转

26

OpenGL + SDL绕局部轴旋转

20

使用glm::OpenGL绕全局轴旋转

164

OpenGL围绕对象的局部轴旋转对象

10

OpenGL围绕局部轴同时平移和旋转

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档