在 OpenGL 中绕 3 个轴旋转对象

2024-01-02

我试图通过增加轴的旋转角度值来实现围绕 3 个轴的对象旋转,并显示这些轴以使观看者可以预测下一个旋转方向。但旋转几次后,仅按照显示轴绕Z轴旋转。有没有可能可以简单地完成它,而无需仔细研究四元数?

glPushMatrix ();
glRotatef (angleX, 1.0, 0.0, 0.0);
glRotatef (angleY, 0.0, 1.0, 0.0);
glRotatef (angleZ, 0.0, 0.0, 1.0);
glBegin(GL_LINES);
glVertex3f(80.0, 0.0, 0.0);   //x axis
glVertex3f(-80.0, 0.0, 0.0);
glVertex3f(0.0, 80.0,  0.0);  //y axis
glVertex3f(0.0, -80.0,  0.0);
glVertex3f( 0.0, 0.0, 80.0);  //z axis
glVertex3f( 0.0, 0.0, -80.0);
//here is some code for drawing arrows at axes ends
glEnd();
glPopMatrix();

Edit:我有这样的轴:http://img841.imageshack.us/i/arrowsx.jpg/ http://img841.imageshack.us/i/arrowsx.jpg/angleX、angleY、angleZ 是按键时递增的全局变量 - 例如按“A”后,angleX 增加 10,我预计 X 轴此后不会移动,Y 轴和 Z 轴将绕 X 轴旋转。但只有当我仅更改一个角度变量时,情况才是如此。绕多个轴旋转后,当我改变时,例如angleX - 图片中的所有轴都会改变它们的位置。


您发布的代码本质上将围绕每个轴的所有旋转集中为围绕该轴的单个旋转。正如您所注意到的,只要您所做的只是围绕单个轴进行增量旋转,它就可以很好地工作。从您的更新来看,您似乎还希望击键将旋转应用于显示的图像,而不是像您编码的那样聚合。实现您正在寻找的行为的一种方法是将您应用的每个旋转存储在队列或可调整大小的向量(std::vector 或 std::queue 或其他容器,如果您使用的是 C++)中。每次用户按下某个键时,都会将围绕所需轴的固定角度大小的另一个旋转添加到列表中。在播放过程中,按照输入的顺序应用旋转(也许是相反的顺序,我必须多加考虑)。然后,这会将旋转应用于显示的几何图形,而不是规范的(即未旋转的)几何图形。

使用四元数可能有一种更简单、占用内存更少的方法来做到这一点;这是我真正需要更好熟悉的一个领域。不过,据我现在所知,这就是我实现我认为您所追求的行为的方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 OpenGL 中绕 3 个轴旋转对象 的相关文章

  • 谷歌地图颤动检查点是否在多边形内

    我正在使用 google maps flutter 插件开发 flutter 项目 我想检查用户位置是否位于我在地图上创建的多边形内 有一个简单的方法使用 JavaScript api con tainsLocation 方法 但对于 fl
  • C++ 中求幂的函数是什么?

    如何计算一个数的幂 2 1 2 2 2 3 etc cmath 库中的 pow 更多信息here http en cppreference com w cpp numeric math pow 别忘了放 include
  • 这个方法比 Math.random() 更快吗?

    我是一名初学者 目前已经开始开发一款使用粒子群优化算法的 Android 游戏 我现在正在尝试稍微优化我的代码 并且 for 循环中有相当多的 Math random 几乎一直在运行 所以我正在考虑一种方法来绕过并跳过所有 Math ran
  • 更改 3D 图形颜色 (matplotlib)

    我使用以下代码在 matplotlib 中绘制了 3D 图形 Previously defines lists of data to plot fig plt figure ax fig add subplot 111 projection
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 从 1 到 20 亿,像 (23,29) 这样相差 6 的连续素数对的数量

    如何在考虑时间复杂度的情况下从 1 到 20 亿 使用任何编程语言且不使用任何外部库 找到像 23 29 这样相差 6 的连续素数对的数量 尝试过埃拉托色尼筛 但获得连续素数是一个挑战 使用了生成器 但时间复杂度非常高 代码是 def ge
  • 如何确保整数除法始终向上舍入?

    我想确保如有必要 整数除法总是向上舍入 还有比这更好的方法吗 目前正在进行大量选角工作 int Math Ceiling double myInt1 myInt2 更新 这个问题是我2013年1月博客的主题 http ericlippert
  • 使用 GLSL 直接在着色器中从位置计算平移矩阵

    我正在开发 C OpengL 程序以及 GLSL 顶点和片段着色器 我正在创建同一对象的多个实例 我只需要改变实例之间的对象位置 这是我所做的 我正在使用一个统一变量 它是一个变换矩阵数组 每个矩阵代表一个对象实例 MVP 也是一个变换矩阵
  • 将名称字符串编码为唯一的数字

    我有一大堆名字 数以百万计 他们每个人都有一个名字 一个可选的中间名和一个姓氏 我需要将这些名称编码为唯一代表这些名称的数字 编码应该是一对一的 即一个名称只能与一个数字相关联 一个数字只能与一个名称相关联 对此进行编码的明智方法是什么 我
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • C# 中的工作百分比

    我有两个值 其中一个是十进制值 和另一个值 该值将计算该小数值的百分比 例如 10 的 60 6 decimal value1 10 decimal percentage 60 textbox1 text mathsum here toSt
  • PHP 负面因素不断增加

    我这里有这个代码 remaining 0 foreach clientArrayInvoice as key gt row remaining remaining row total 它的作用是 它获取总计值并将它们相加 但是当我有负值时
  • 从 x,y 屏幕空间坐标查找 2D 等距网格上的列、行(将方程转换为函数)

    我试图在屏幕空间点 x y 的二维等距网格中找到行 列 现在我几乎知道我需要做什么 即找到上图中红色向量的长度 然后将其与表示网格边界的向量的长度 由黑色向量表示 进行比较 现在我在数学堆栈交换中寻求帮助 以获得用于计算点 x y 与黑色边
  • 如何将Excel中的每个条目转换为一行“矩阵”表

    我有类似的东西 1 2 3 a x o x b x x o c o o o 并想将其转换成像这样的线 1 a x 1 b x 1 c x 2 a o 2 b x 2 c o 3 a x 3 b o 3 c o 通过使用Excel文档中的公式
  • Three20中的TTSpeechBubbleShape仅绘制“语音”三角形顶部和底部

    因此 我将 Three20 库用于 iPhone 应用程序 并希望将 TTSpeechBubbleShape 样式用于视图 但三角形似乎不想画在左边或右边 我在源代码中看到它有很多几何图形 并且想知道是否有人解决了这个问题或知道如何解决它
  • 如何从矩形点计算旋转角度?

    我有4分1 2 3 4闭合一个矩形 这些点按以下方式排列在数组中 x1 y1 x2 y2 x3 y3 x4 y4 我遇到的问题是矩形可以旋转一定角度 如何计算原始点 灰色轮廓 和角度 我试图在 javascript css3 transfo
  • 用于新 Windows 游戏项目的 OpenGL 或 Direct3D?或者是其他东西?

    我正在 Windows 上启动一个爱好游戏项目 该项目将大量使用 3D 图形效果 它很可能是用 C 编写的 我应该使用 OpenGL 还是 Direct3D 作为我的图形后端 为什么 或者我应该使用现成的图形引擎 例如OGRE 3D htt
  • 简单模式7公式/例子?

    我最近发现了利用 SNES 模式 7 的伪 3D 效果 并想尝试在 Godot 引擎中复制它 我尝试在网上查找 但所有内容要么以我无法理解的方式解释 要么以我不知道的编程语言解释 我还需要学习如何旋转该区域 并将精灵作为角色或敌人放入 但我
  • 如何在 Visual Studio 2012 中安装 GLUT 和 OpenGL?

    我今天刚安装了Visual Studio 2012 我想知道如何在该平台上安装GLUT和OpenGL OpenGL 应该已经存在 可能会缺少 Freeglut GLUT GLUT 现在已经非常过时并且没有得到积极的支持 所以你当然应该使用
  • 在windows + opengl中选择图形设备

    我知道如何使用 openGL 打开窗口 使用 Win32 或其他工具包 但是当系统有2块显卡时 如何选择要渲染的图形设备 我的编程语言是 C 我专注于 Windows 但任何示例都将受到欢迎 编辑 也许更好地解释我的问题是个好主意 以便添加

随机推荐

  • 响应式 D3 图表

    我有这张 D3 图表 几乎是开箱即用的 有没有办法让它响应并使用宽度和高度变量 innerRadius 和outerRadius 的百分比 我正在开发一个响应式网站 需要根据屏幕尺寸 浏览器尺寸进行更改 jsfiddle在这里 http j
  • 编辑Android XML文件时如何避免XServer上的Eclipse泄漏?

    当我在 Eclipse 中编辑 XML 文件 主要是 Android 布局等 时 它会导致 XServer 上的泄漏 并最终耗尽我的所有 RAM 4GB 因此我必须按 Ctrl Alt Backspace 才能继续 你知道有什么补救办法吗
  • SQL Server 2005 和临时表范围

    我已经阅读了临时表和范围的主题 我看到的所有答案似乎都没有谈到我的担忧之一 据我所知 本地临时表的范围仅在存储过程或子存储过程的生命周期内有效 然而并发方面的情况如何 即 如果我有一个存储过程创建一个临时表 该临时表是从两个不同的进程但从同
  • 如何在 Django 运行时回退到多种语言?

    我正在构建一个 Django 应用程序 它使用 Django 的翻译功能来提供多种语言的本地化 不过我也是用Django的翻译功能来翻译的某些术语进入不同的行业基于当前登录用户的设置 例如 对于在学习评估行业工作的英语用户 我想要以下行为
  • tableView reloadData 上未调用 cellForRowAtIndexPath

    我在一个视图上有一个 UITableView 它在应用程序启动时加载数据 然后当用户在框中输入文本并点击按钮时 我重新查询数据库 重新填充存储数据的原始 NSMutableArray表的数据 所有这些都运行良好 在一些日志语句中 我可以看出
  • 组的行级安全性或使行可供组访问

    我希望表中的行只能由组成员访问 我通过以下方法创建用户并将其添加到组中 CREATE USER abc LOGIN PASSWORD securedpassword1 CREATE USER xyz LOGIN PASSWORD secur
  • 在节点之间绘制连接而不重叠节点的算法

    我在图中有一系列节点 节点由用户放置在特定位置 保证节点不重叠 并且事实上 它们之间有一个空间缓冲区 这些节点相互连接 并且每条边在特定点处连接到节点 我需要绘制节点之间的边缘 以便边缘 必填 不要与父节点重叠 理想情况下 不会重叠任何节点
  • 关于 iPhone 应用程序下载计数

    我怎样才能知道我的 iphone 应用程序在 itunesconnect 中的下载计数 为此 您必须登录 iTunesConnect apple com 网站 然后转到 销售和趋势 模块 在这里 您可以查看已下载的应用程序数量
  • 如何在新选项卡或窗口中打开 PDF 文件而不是使用 C# 和 ASP.NET MVC 下载它?

    我有发票屏幕 在这个屏幕上有可用的订单数量 所以当我们创建发票时 我们需要填写一张表格 所以我想要的解决方案是当我提交此发票表格或单击此提交按钮时 pdf 应该在新窗口中打开标签 我想向您澄清 我们不会将此 pdf 保存在任何地方 div
  • Bootstrap Carousel 在 Safari 网络浏览器和 iPad/iPhone 上无法滑动

    在其他浏览器上是滑动的 但在Safari中它会改变图像但不会滑动 我尝试了这段代码以及transition js document ready function Carousel carousel interval 1000 data sl
  • 给定出生日期如何计算下一个生日?

    鉴于 Postgres 数据库中的此架构 CREATE TABLE person id serial PRIMARY KEY name text birth date date 我如何查询表来获取每个人的日期next今天之后过生日吗 例如
  • 使用 Webpack 2 延迟加载 Vue 组件

    我想尝试延迟加载 with webpack 我按路线分割我的应用程序 每个路线都有所需的组件 const Home resolve gt require ensure components Home Home vue gt resolve
  • 不允许从闪亮输出对象读取对象

    我正在使用以下 R 平台和版本 平台 x86 64 apple darwin10 8 0version string R 版本 3 0 3 2014 03 06 我是闪亮的新手 我正在尝试使用 rWBclimate 数据集 这是 R 中的一
  • Environment.getExternalStorageDirectory().getAbsolutePath() 不起作用并提供 /storage

    My code myDb openOrCreateDatabase sdcard FashionGirl ImagesDB db Context MODE PRIVATE null myDb openOrCreateDatabase dbP
  • android startActivityForResult 正在终止父活动中的线程

    我有一个活动 其中有一个线程和一个视图 它们与 LunarLander 非常相似 为了显示游戏内菜单 我为另一个活动调用 startActivityForResult 该活动上有许多按钮 然后将按下的按钮类型返回到父活动 这很好 除非当我在
  • 将数据从 React 发送到 MySQL

    我正在创建一个发布应用程序 需要使用 React 和 MySQL 数据库之间的通信来来回发送信息 使用 Express 作为我的 JS 服务器 服务器代码如下所示 const express require express const bo
  • 如何在滚动窗格上放置多个标签以及为什么该标签放置在中心?

    我正在尝试做一个feed box显示从服务器到客户端的所有更新 Jframe我放置了一个JScrollPane 以便客户端可以轻松看到更多数量的提要 超过JScrollPane 我试图放置一个JLabel然后它看起来像这样 标签被放置在中心
  • FileList、React、Typescript 的迭代

    我正在 重新调整 文件输入 但无法迭代选定的文件 private onInputChanged e React FormEvent
  • 如何在javascript中使用大写函数映射数组?

    我感兴趣的是 php 中是否有像 array map 或 array walk 这样的函数 不需要遍历整个数组的 for 我可以为自己做到这一点 var array dom lun mar mer gio ven sab i would l
  • 在 OpenGL 中绕 3 个轴旋转对象

    我试图通过增加轴的旋转角度值来实现围绕 3 个轴的对象旋转 并显示这些轴以使观看者可以预测下一个旋转方向 但旋转几次后 仅按照显示轴绕Z轴旋转 有没有可能可以简单地完成它 而无需仔细研究四元数 glPushMatrix glRotatef