在 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 个轴旋转对象 的相关文章

  • 构建协同过滤/推荐系统

    我正在设计一个网站 该网站的概念是根据用户的口味向他们推荐各种商品 即他们评价过的项目 添加到收藏夹列表中的项目等 亚马逊 Movielens 和 Netflix 就是这样的例子 现在 我的问题是 我不知道从哪里开始了解这个系统的数学部分
  • OpenGL纹理渲染与原始不匹配

    我正在尝试使用 OpenGL 渲染纹理 我用作测试的纹理是白色背景上的一堆黑色矩形 如下所示 然而 在渲染时 纹理似乎被复制并叠加在其自身之上多次 我使用以下方法设置场景 std string vertexSource ShaderLoad
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • Java 的 3D 场景图库?

    我正在寻找一个可靠的 Java 3D 场景图 API 它具有良好的文档 活跃的社区和允许商业使用的许可证 我排除了com sun scenegraph https scenegraph dev java net 因为它是 GPL 而且看起来
  • 多个点之间的最短路线

    我需要找到多个点之间的最短路线 假设我有以下四点 var startPoint new Point 1 1 var pointsToGoPast new List
  • 现代 GPU 上的纹理更改(和其他状态更改)成本

    我正在编写一个基于场景图的图形引擎用于建模目的 我正在使用 XNA 4 在我读过的许多地方 渲染期间应该最小化纹理变化 和其他状态变化 因此我必须按材质等对图元进行排序 我在 XNA 4 中创建了一个小型测试应用程序 它使用单个纹理渲染数百
  • 加速球之间的碰撞检测

    我正在编写一个物理引擎 模拟器 其中包含 3D 太空飞行 行星 恒星引力 船舶推力和相对论效应 到目前为止 一切进展顺利 但是 我需要帮助的一件事是碰撞检测算法的数学 我使用的运动迭代模拟基本上如下 注意 3D 矢量全部大写 For eac
  • 有人知道如何在android中实现像Unfold(这是iphone中的应用程序)这样的效果吗?

    我怎样才能实现这个效果呢 任何建议都会对我有帮助 None
  • 如何在 OpenGL 中绘制镜像某些东西的镜子?

    根据我的理解 要在 OpenGL 中进行镜像 您基本上需要绘制场景 然后将所有内容翻转并再次绘制 只是使其通过镜子可见 从而在镜子中创建完美翻转的图像 但我看到的问题是 执行此操作时 唯一可以看到其他镜子的镜子是在前一个镜子之后渲染的镜子
  • SDL 程序中颜色关闭

    我目前正在开发一个非常简单的游戏 使用纯 C 方法和 SDL 及其官方额外库 如 SDL image 和 OpenGL 现在 虽然我遇到了一些障碍 但我不知道为什么要这样做 绘制时颜色全部关闭 我目前在 Mac 上运行该程序 但如果我没记错
  • C# 中的反转数

    有没有一种简单的方法可以用函数反转 C 中的数字 我正在使用 XNA 我想告诉我的程序 如果我的 变量 超过某个数字 它必须反转它的值 重点是提供反弹效果 if ballPosition X gt screenWidth Invert th
  • 在 C 中如何安全地找到 2 个有符号整数之间的绝对差?

    绝对差是两个数字之间差的绝对值 假设我有 2int变量 x and y 我想找到绝对差异 一个简单的解决方案是 unsigned diff abs x y 然而 如果发生溢出 这些会调用未定义的行为并给出不正确的结果 例如x is INT
  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • 计算二维笛卡尔坐标中不规则形状的边界

    我正在寻找一种计算不规则形状边界的解决方案 Lats take a look at Square example 如果我有Minimum x and y and Maximum x and y like MaxX 5 MinX 1 MaxY
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • sRGB 纹理。它是否正确?

    我最近阅读了一些有关 sRGB 格式以及它们如何允许硬件自动对典型显示器执行色彩校正的文章 作为我阅读的一部分 我发现您可以使用普通纹理和返回结果上的 pow 函数来模拟此步骤 无论如何 我想问两个问题 因为我以前从未使用过此功能 首先 有
  • 计算三次贝塞尔曲线的弧长、曲线长度。为什么不工作?

    我正在用这个算法计算弧长 三次贝塞尔曲线的长度 function getArcLength path var STEPS 1000 gt precision var t 1 STEPS var aX 0 var aY 0 var bX 0
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲

随机推荐

  • 响应式 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