我问了一个以前被问过一百万次的问题,但在浏览了这些问题并求助于其他网站之后,我仍然没有找到一个好的答案:
如何在全局轴上旋转图形,而不是本地轴?
opengl中的旋转对象
如何像OpenGL中的glRotatef()一样旋转顶点?
在OpenGL中围绕3个轴旋转对象
在OpenGL中沿对象自身的轴旋转对象
有没有可能让一个物体绕着它自己的轴旋转,而不是绕着基坐标轴旋转?
OpenGL旋转-局部轴与全局轴
任务相对简单,我正在制作一个带有加速度计和陀螺的传感器模块,我需要显示旋转。
我有一个STL格式的3D对象模型,我做了一个STL解析器,我可以很好地可视化对象。
当我试图旋转它时,我会得到各种奇怪的结果。
我正在使用SharpGL(场景组件)。
我试图写一个效果(目前)是由3个独立的轨迹条控制的,但这将是传感器的数据。
我想把它作为一种效果来做,因为(理论上)我可以在场景中有更多的对象,我只需要旋转一个特定的对象(也是出于教育目的,因为我对OpenGL比较陌生)。
我尝试使用四元数旋转对象,将它们相乘并生成旋转矩阵,然后应用gl。MultMatrix(transformMatrix.asColumnMajorary)
。
我也尝试了gl。旋转(angleX,1,0,0)
(Y轴和Z轴类似)。
取决于四元数乘法或gl的顺序。旋转(…)
语句,我会让对象围绕局部轴旋转(第一个),一些奇怪的东西(第二个),以及“世界”第三个。例如,如果我用四元数来计算,并从中得到旋转矩阵,我会得到(我想)关于局部X,“任意”Y和世界Z轴的旋转。
我不能理解的部分是,当我应用
gl时。在轨迹栏的滚动事件中旋转(dx,1,0,0)
(以及其他Y和Z旋转),整个场景围绕X,Y和Z轴旋转,并且按照这个顺序,完全按照我预期的旋转发生。
我对这种方法的唯一问题是整个场景旋转。所以如果我(假设)想在物体周围画一个房间,整个房间也会旋转,这不是我想要的。
我会张贴任何要求的代码,但我觉得有太多,上述链接有类似的代码,我有。
在一天结束时,我希望我的对象(
Polygon
在SharpGL术语中)围绕它自己的轴旋转(或者围绕“世界”轴旋转,但是保持一致)。
编辑:
我已将项目放置在我的dropbox中:https://goo.gl/1LzNhn
如果有人想看它,任何帮助都将不胜感激。
在
Main Form
中,TbRotXYZScroll函数具有跟踪条形码,Rotation类是问题所在(或者我是这么认为的)。
按该顺序将X、Y和Z旋转45度。一切似乎都很好。现在将X、Y和Z再旋转30度左右,试着想象一下旋转时围绕哪个轴发生
进入tbrotxyzcroll函数并将method更改为2可以实现我想要的功能(除了整个场景的旋转)。我试过四元数,结果完全一样,所以我一定是做错了什么
将其更改为1会产生类似的结果,但这是将旋转仅应用于多边形(而不是渲染的对象,因为它也包括局部坐标轴)。
在一天结束时,我希望我的对象(SharpGL术语中的多边形)围绕它自己的轴旋转(或者围绕“世界”轴旋转,但要一致)。
我认为你在问题中给出的这个答案在某种程度上解释了这种情况。要围绕对象轴执行旋转,请执行以下操作:
1.对对象执行平移/旋转,并使对象轴与基准轴(x、y或z)之一重叠
2.执行你的旋转
3.将对象还原回其原始位置。(只需在步骤1中恢复平移/旋转)
注意:在这样做的时候,你应该考虑的是OpenGL从相反的顺序应用转换。
例子:
glRotatef(90,1,0,0);
glTranslatef(-5,-10,5);
drawMyObject();
在这种情况下,opengl将首先平移对象,然后旋转。因此,在编写转换时要考虑这一点。这是我的答案,可能会给你一个想法。
我有一个球员(绿色),我想让他左右旋转。 这可以通过在其局部Y轴上旋转来轻松实现。然而,问题是播放器可能会沿其局部X轴旋转。这是一张草图: 以下是从顶部看到的视图: 我需要沿红线旋转播放器。我需要这样做,不管他现在在X轴上有什么旋转。(玩家像超人一样飞行,见第一张图片) 通过使用父对象可以很容易地解决此问题,但这在我当前的设置中是不可能的。我当前使用的代码在局部旋转时会出现奇怪的旋转: 如何在全局
我尝试绕全局y轴旋转对象(基本上,无论当前方向如何,都围绕0,1,0偏航)。我想给你看一张照片,但是声誉。。。我想绕全局轴而不是对象的局部轴旋转偏航。例如,如果我通过俯仰稍微倾斜一个长方体,然后尝试旋转偏航,它将以倾斜的角度而不是直线旋转长方体,就好像长方体根本没有倾斜一样。 每个对象将其位置和旋转存储在矩阵中,每个更新调用都会更新该矩阵。旋转的代码看起来是这样的: 其中,位置是每次更新都会平移和
所以我有一个立方体,我想绕着它的三个轴(立方体的轴,而不是窗口)旋转。正如许多其他类似的问题所指出的,只要我只朝一个方向旋转,我的旋转就会起作用,但当我开始混合它们时,我会得到奇怪的结果。特别是,无论立方体如何旋转,围绕y轴的旋转始终围绕窗口的y轴旋转。 我的绘图代码如下: 这个问题似乎非常准确地描述了我想做什么,公认的答案似乎是我想做什么,但是他提供的链接已经死了。 从我在链接问题中收集到的信息
我的屏幕上有一个旋转和平移的对象,但是我有两个关于z轴旋转的问题。解释起来有点棘手,所以我上传了两个视频来描述每个问题。 1) 反向旋转:在绕x轴旋转对象后,z轴旋转将被反向,并且应该如此。 2)错误的Z轴旋转:同样,在围绕x轴旋转物体后,我试图围绕z轴旋转物体,旋转导致不同的轴旋转。 我相信视频很好地描述了这些问题。 编辑:更新#1 好的,我想我找到了解决方案,就是只绕Z轴旋转相机,然后对模型本
问题内容: 我对Three.js的旋转有很大的疑问,我想在自己的一款游戏中旋转3D立方体。 并且(x,y,z)可以是(1、0、0) 则多维数据集可以旋转,但是问题在于多维数据集绕其自身的轴旋转,因此,旋转后,它无法按预期旋转。 并且我尝试使用 matrixRotationWorld 作为 但它不起作用,我不以错误的方式使用它,还是有其他方法。 因此,如何让3D立方体绕世界轴旋转??? 问题答案:
全局对象提供可在任何地方使用的变量和函数。默认情况下,这些全局变量内置于语言或环境中。 在浏览器中,它的名字是 “window”,对 Node.js 而言,它的名字是 “global”,其它环境可能用的是别的名字。 最近,globalThis 被作为全局对象的标准名称加入到了 JavaScript 中,所有环境都应该支持该名称。所有主流浏览器都支持它。 假设我们的环境是浏览器,我们将在这儿使用 “