问题标签 [glrotate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - 如何在 OpenGL 中更改旋转中心
我有一个 3D 模型(OpenGL ES 1.1 iPhone SDK v3.0),它有点复杂(即数千个顶点和面),我想在模型中心或附近围绕 Y 轴旋转这个模型。问题是 glRotate 将我的模型围绕其底部边缘之一的中心/附近的一个点旋转,而不是靠近Model 的中心。想象一辆汽车绕着灯柱绕着很近的圈子行驶,这基本上就是我所拥有的。我希望汽车被刺穿在灯柱上并围绕它旋转。(下面的一些来源)
问题:
有没有一种简单的方法可以改变 OpenGL 中的旋转中心?
c++ - 在调用rotatec ++后获取对象的值
在我旋转它(使用 glRotate3f)之后,我需要访问顶点对象的 X、Y 值。这怎么可能?我需要 em 来解决对象碰撞问题,其中碰撞将根据对象旋转度在与角度相关的方向上发送对象。
编辑::
好的,我已经接近找到方法了。让我们假设 X 和 Y 度数为 0、90、180、270。我将一个点设置为对象的中心,假设 X=30,Y=70,X_size 为 60,Y_size 为 140。
如果我使 new_X = X cos(angle) - Y sen(angle) 和 new_Y = X sen(angle) + Y cos(angle) 如果然后我将对象中心 X 和 Y 添加或减去 new_X 和 new_Y 我实际上得到新点,除非角度为 180,我需要使用 -new_X + X。
这是解决它的方法吗?
opengl - 没有 glutLookAt* 函数的点 - 平面碰撞
据我了解,建议使用 glTranslate / glRotate 来支持 glutLootAt。除了明显的硬件与软件计算模式之外,我不会寻找原因,而只是顺其自然。但是,这让我有些头疼,因为我不知道如何有效地阻止相机突破墙壁。我只对点平面交叉点感兴趣,而不是 AABB 或其他任何东西。
因此,使用 glTranslates 和 glRotates 意味着当世界围绕它旋转时,视点保持静止(为简单起见在 (0,0,0) 处)。这对我来说意味着为了检查任何交点,我现在需要为每个摄像机移动重新计算世界顶点坐标(glutLookAt 方法不需要)。由于无法从 GPU 领域获得所需的新坐标,因此需要在 CPU 领域手动计算它们。对于每一个摄像机移动...... :(
似乎需要将当前旋转保留在 3 个轴中的每一个旁边,并且对于平移也是如此。我的程序中没有使用缩放。我的问题:
1-上述推理有缺陷吗?如何 ?2 - 如果没有,必须有一种方法来避免这种重新计算。我看到它的方式(并通过查看http://www.glprogramming.com/red/appendixf.html) 它需要一个矩阵乘法进行平移,另一个矩阵乘法用于旋转(仅需要 y 轴除外)。然而,必须计算如此多的加法/乘法,尤其是正弦/余弦肯定会扼杀 FPS。将有数千甚至数万个顶点需要计算。每一帧......所有的数学......在计算了世界的新坐标之后,事情似乎很容易——只要看看是否有任何平面改变了它的“d”符号(来自平面方程 ax + by + cz + d = 0)。如果是这样,请使用轻量级叉积方法来测试该点是否在该平面的每个“移动”三角形内的空间内。
谢谢
编辑:我发现了 glGet 并且我认为这是要走的路,但我不知道如何正确使用它:
m_vt16CurrentMatrixVerts 是一个 float[16] 填充 0.f 或 8.67453e-13 或类似的东西。我在哪里搞砸了?
android - 使用 drawtexture (OpenGl ES Android) 旋转精灵的问题
我正在尝试使用 drawtexture 旋转精灵,但没有任何反应。我正在使用以下代码:
gl.glRotatef(90, 0, 0, 1.0f); gl.glBindTexture(GL10.GL_TEXTURE_2D, TextureID); (GL11Ext) gl).glDrawTexfOES(x, y, z, width, height);
纹理被绘制到屏幕上,但没有旋转……有人吗?:)
iphone - 如何使用 glRotatef() 和 glTranslatef() 在 3D 世界中逐步移动
我有一些 3D 模型,我在 3D 空间中在 OpenGL 中渲染,并且在这个世界中通过旋转和平移移动“角色”(即相机)时遇到了一些令人头疼的问题。
我从一些外部事件(图像用户输入或来自 GPS + 罗盘设备的一些数据)接收输入(即移动的坐标/要转动的坐标),事件类型是旋转或平移。
我写了这个方法来管理这些事件:
然后在redrawView
我实际上正在绘制场景和我的模型。它是这样的:
问题是,当平移时,旋转事件一个接一个地被调用:例如,当我增量旋转一些迭代(仍然围绕原点)时,我平移并最终再次旋转,但似乎最后一次旋转没有发生围绕当前(翻译)位置,但围绕旧位置(旧原点)。我很清楚,当转换顺序颠倒时会发生这种情况,但我相信在绘制之后,世界的新中心是由翻译系统给出的。
我错过了什么?我怎样才能解决这个问题?(任何对 OpenGL 的引用也将不胜感激)
c++ - OpenGL glTranslate 和 glRotate
我需要一个将翻译应用于glTranslate()
某个点的函数。有人知道像glTranslate()
和glRotate()
修改和检索矩阵相乘的函数吗?
iphone - 二维 glRotatef()
(iPhone) 我正在尝试让用户可以通过在屏幕上拖动手指来旋转对象。向左或向右拖动应围绕 Y 轴旋转,向上或向下拖动应围绕 X 轴旋转。这是我的原始代码:
旋转很疯狂,似乎是在随机方向。我很确定它与第二个语句依赖于第一个语句有关,但我试图用一些花哨的数学来否定它,但仍然无法正确处理。
好吧,我部分想通了,但是现在我遇到了一个新问题(如何对两个旋转求和?)。
我的解决方案:
假设您想将立方体向左旋转 90 度,然后向下旋转 90 度。您试试这个:
它不起作用。第二个函数的行为很奇怪,因为第一个函数交换了 X 轴和 Z 轴。所以你试试这个:
现在您有了想要的结果,但是如果您将第一个函数中的 Y 旋转量更改为 180 或 45 或其他任何值,它会再次失败。所需的旋转矢量取决于第一个函数的 Y 旋转量。期望的结果是这样实现的:
现在如果你想先上下旋转然后从左到右怎么办?最后一个解决方案失败了,首先,函数的顺序错误,其次,Y 轴也依赖于 X 旋转。您必须考虑到这一点,并且您必须将这两个功能结合起来,从而导致:
其中 xFactor 和 yFactor 加起来就是所需的旋转向量(1,0 表示上下,0,1 表示左右,sqrt(.5),sqrt(.5) 表示对角线旋转)。
我的问题:
当用户完成一个旋转并开始一个新的旋转时,问题就出现了。您必须记住并“重新启动”先前的旋转,否则您会得到不希望的“跳转”回 0 旋转。一个新的旋转很好,我可以实现 touchesEnded 来记住 glRotatef 的参数,然后将它们插入到一个新的旋转中,如下所示:
但是在第二个新的轮换中,我现在有两个轮换可以“重新启动”。我不知道要为 amt_old、x_old、y_old 和 z_old 分配什么值。它归结为......你如何总结两个 glRotatef 旋转?
opengl - OpenGL 2D旋转问题
在下面的程序中,我试图画一个简单的房子。坐标在房屋数组中定义。我需要旋转房子并显示旋转的房子和原来的房子。但是为什么旋转的房子没有显示出来呢?
opengl - Push/Pop 矩阵和单个对象在 OpenGL 中围绕其自己的轴旋转
这已经被问过很多次了,我已经在互联网上阅读了大量关于它的帖子和论坛,但我就是无法让一个物体围绕它自己的轴旋转。我有几个这样绘制的对象:
这是正确绘制的,应用了所有纹理和法线。
我知道 OpenGL 反向执行命令,所以这就是 glRotatef 是第一个的原因。我也知道所有的旋转都围绕原点,所以我需要将对象转换到该原点(不是我认为我必须这样做,因为“笔”已经在原点,因为我在绘制每个对象之前保存了矩阵和之后弹出它)。是glDrawElements的东西吗?似乎有些不对劲。
任何帮助将不胜感激。:)
编辑:我可以看到对象如何围绕主 x 轴旋转,但我希望它们围绕其本地 x 轴旋转。
opengl - 使用 glut 的 OpenGL 三角形旋转 - 需要一个简单的修正
这是我的代码:
我画了一个矩形和一个三角形。
它们现在都在旋转,但我希望矩形保持静止并仅旋转三角形。我在这里做错了什么?我是否需要更改推送流行线或其他内容。我尝试了很多组合,但我做不到。