如何将多个对象分组以便将它们作为一个单元旋转?

2023-12-30

我需要一些关于 OpenGL 中旋转任务的最佳方法的指导。我知道如何使用四元数在 3D 空间中旋转对象,我可以平移它们,一切都很好。

但我想知道将不同对象的集合视为单个实体以进行旋转的最佳方法。例如,假设您有一张桌子,上面放着物品。每个都有自己的平移和旋转,但现在我想旋转整个桌子及其上的所有东西,同时保持房间中的其他物体就位。这意味着桌子外边缘的物体将旋转并绕桌子中心平移,而中心的物体可能只是旋转但保持在原位,或者根本不平移那么多,具体取决于它们与桌面的距离。旋转轴。

似乎一种相当不优雅的方法是单独旋转和平移桌子上的每个物体以及桌子本身,知道旋转轴在哪里。也许这是唯一的好方法,但是是否有一种技术可以为此目的对不同的对象进行“分组”?


您正在寻找的是转换层次结构。桌子上的对象是相对于桌子定位的,换句话说,是在桌子的坐标系中定位的。所以让我们指定M_Desk作为定义桌子位置及其局部坐标系的变换。接下来让M_Pencilbox立在桌子上的铅笔盒相对于桌子的变换。铅笔盒中的铅笔将相对于铅笔盒放置。

所以铅笔经历了一系列的转变。请记住,在 OpenGL 使用的列主要符号中,事物通过变换链“流动”,从最后一个变换到第一个变换(或者写下来时从右到左)。

每一次转变,就像M_Desk例如, 是一个 4×4 矩阵,可以用通常的方式构造:旋转、平移、缩放等。

因此,要变换铅笔的顶点,您需要应用以下变换

… · M_Desk · M_Pencilbox · v_Pencil

当然,桌子本身可能与不同的东西有关,比如房间。该转换链的最开始就是视图转换。我们在这里有效地构建了一个模型视图矩阵。

就现代 OpenGL 而言,每当您遇到转换层次结构中的分支(想想文件系统中的目录)时,您都会创建迄今为止构建的转换链的副本,这样您就不必从头开始对于每个分支。

如果您需要进一步说明,请告诉我。

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

如何将多个对象分组以便将它们作为一个单元旋转? 的相关文章

  • 当我调用 fillRoundRect() 时,只有 1 个角被圆化

    当运行此代码时 import java awt Color import java awt Graphics import java awt Graphics2D import java awt RenderingHints import
  • XNA 3D 碰撞矩阵不起作用

    我之前问过一个关于为什么我的碰撞不起作用的问题 我得到了一个很好的答案 这是有道理的 将我在 DrawModel 方法中所做的相同转换应用于 isCollision 方法 然而 这并没有奏效 我无法弄清楚如何在 isCollision 方法
  • 带着色器的 HUD (opengl-es 2.0)

    如何在opengl es 2 0上使用着色器绘制HUD 我有一个在屏幕上绘制纹理四边形的着色器 它使用 MVP 矩阵 四边形有自己的顶点 独立于视图位置等 MVP 矩阵的原因 Matrix frustumM mProjMatrix 0 ra
  • OpenGL ES 2.0 PNG Alpha 通道

    我刚刚学习使用适用于 Android 的 OpenGL ES 2 0 我一直在尝试简单地在屏幕中间显示纹理 这很简单 但我似乎无法让 PNG alpha 正常工作 图像要么以黑色背景显示 要么整个图像将稍微混合到背景颜色中 具体取决于我使用
  • 最快的 Sobel 边缘检测 C#

    我想制作一个实现索贝尔边缘检测的程序 这是我的代码 private Bitmap SobelEdgeDetect Bitmap ori Bitmap b original Bitmap bb original int width b Wid
  • 我无法在 Java 程序(swing)中的面板/画布/窗口上绘制图形。有任何想法吗?

    我无法在 Java 程序 使用 swing 中在面板 画布 窗口上绘制图形 文本 我什至尝试将其分成两个类 其中一个类中包含paintComponent 扩展JPanel 而另一个类中包含其他内容 扩展JFrame 我尝试过带有画布和不带有
  • java printjob 横向空白

    我目前的打印机作业有一个问题 它非常适合肖像图像 但对于风景图像 它会剪切部分图像并填充空白 这是我的代码 EDIT PrintService printService PrintServiceLookup lookupDefaultPri
  • Android 模拟器支持 OpenGL ES 2.0 吗?

    本文http cobworks ca 2010 04 19 why android market has no games http cobworks ca 2010 04 19 why android market has no game
  • 绘图不适合 R 窗口

    我正在使用metaR 中的包对比例进行荟萃分析 我的分析中有大约一百项研究 当我打字时forest result 创建我的森林图 它可以工作 但图形在顶部和底部被切掉 无论我做什么 它都不适合绘图窗口 我对如何解决这个问题感到困惑 有任何想
  • 使用 OpenGL 或 D3D 绘制椭圆的有效方法

    有一种快速画圆的方法 void DrawCircle float cx float cy float r int num segments float theta 2 3 1415926 float num segments float c
  • 在不同的队列系列上重用相同的主机可见缓冲区

    考虑主机可见缓冲区 主要与流缓冲区相关 即由VK MEMORY PROPERTY DEVICE LOCAL BIT VK MEMORY PROPERTY HOST VISIBLE BIT内存 让我们想象一下以下使用模式 将新数据写入主机上的
  • OpenGL 中的像素间隙从何而来?

    我遇到的问题是 渲染场景中有一些像素 似乎丢失 看不见 因此与我的透明颜色相同 颜色 有趣的是 只有当 MSAA 关闭时才会发生这种情况 我的第一个想法是 这可能与以下事实有关 所有三角形都是重叠的 并且被投影矩阵以某种方式扭曲 但这些伪像
  • 了解 glPushMatrix() 和 glPopMatrix()

    我有以下代码 void drawObj1 glPushMatrix glTranslatef rBaseInitPos rBaseDim 0 2 rBaseDim 1 baseIncrement rBaseDim 1 2 rBaseDim
  • 围绕 glutMainLoop 执行程序的其余部分?

    我目前正在开发一个项目 其中有一个 android 应用程序 我在 PC 上的 OpenGL 窗口中编写了控件和对象 我已经让 OpenGL 窗口执行我想要的操作 并且我从 Android 设备获取了数据以流式传输到终端 但是我需要将数据传
  • OpenGL 和多个 GPU - 一般可能性

    我想知道 是否可以在多个 GPU 上同时运行多窗口 OpenGL 应用程序 更具体地说 假设我创建了一个应用程序 其中有两个窗口 每个窗口彼此共享 GL 上下文 现在 如果我将其中一个窗口从显示器 1 在 GPU 1 上运行 移动到显示器
  • 具有 OpenGL 3.2 核心配置文件的 OS X 上的过剩

    是否可以使用核心配置文件在 OS X Lion 或 OS X Mountain Lion 上使用 GLUT 这样我就可以使用 GLSL 1 50 我可以使用内置的 GLUT 还是需要使用第三方库 例如 FreeGLUT 是否有任何简单的 H
  • matlab:使用 GPU 保存图形中的图像

    我使用 matlab 渲染复杂的网格 使用 trimesh 材质 camlight 视图 不需要将其显示给用户 只需获取渲染图像即可 这在另一个问题中讨论过 https stackoverflow com questions 4137628
  • 安装 GLEW 并将其与 Xcode 一起使用

    所以我已经从网站下载了最新的 glew v 1 9 并将其放入终端中 我不知道如何将其成功添加到 GLUT OpenGL Xcode 项目中 我可以非常轻松地添加 OpenGL 和 GLUT 框架 但我找不到任何 glew 框架或类似的框架
  • OpenGL 混合功能可消除图元重叠但保持整体不透明度

    我有一些几何体 其中有一个三带的原始集 基本体中的一些三角形重叠 因此当我向具有 alpha 值的几何体添加材质时 我会看到重叠 如预期 我想在不改变几何形状的情况下消除这种效果 我尝试使用不同的混合模式 glBlendFunc 但我无法让
  • 文本和矢量艺术的快速光栅化

    假设有a lot矢量形状 确定形状边界的贝塞尔曲线 例如一页充满小字母 创建位图的最快方法是什么 几年前我曾经看过一个演示 现在找不到了 其中一些人使用 GPU 来光栅化矢量艺术 他们能够实时放大 缩小页面 贝塞尔曲线形状的 GPU 渲染当

随机推荐

  • 使用集成 Windows 身份验证时提示输入登录详细信息

    对于 ASP NET 应用程序 使用集成 Windows 身份验证时如何提示用户输入用户名 密码 我想在页面后面的代码中使用 C 来执行此操作 我想要一些页面 例如http 内网 admin http intranet admin 提示输入
  • iPhone 的 PhoneGap 数据库应用有什么要求?

    我想创建一个访问数据库的简单应用程序 Does PhoneGap它的框架中有这个功能吗 它使用哪种数据库技术 MySQL 有数据库吗 为 iPhone 开发 PhoneGap 数据库应用程序有哪些要求 数据库 Sqlite 数据库 直接嵌入
  • 如何计算java中相同(PALINDROME)的单词数

    我是一名 Java 开发新手 我想用Java编写代码来计算段落中回文词的数量 假设是 用户可以输入包含尽可能多的句子的段落 每个单词之间以空格分隔 每个句子之间以句点分隔 单词前后的标点符号将被忽略 而单词内部的标点符号将被计算在内 输入示
  • Python:从类B中的类A调用方法A?

    有很多与此类似的问题 但没有一个答案能切中要害 所以请耐心等待 我正在尽最大努力使用 Python 学习 OOP 但我不断遇到错误 比如这个 这让我觉得这一切都是毫无意义的 只使用方法会更容易 这是我的代码 class TheGUI wx
  • 在数字海洋上部署的 laravel 网站显示空白屏幕并尝试通过 https 加载 css 和 js 文件

    我在这里完成了关于部署 laravel 应用程序的教程之一https www techalyst com posts laravel hosting with digital ocean droplet step by step tutor
  • 如何使用 guizero 在 python 中知道 Tic Tac Toe 中谁是获胜者

    我创建了一个名为 Tic Tac Toe 的游戏 有 2 位玩家 其中一位是 X 其中一位是 O 您所要做的就是将您的符号 3 连成一排 而其他人不会阻挡您 游戏的 GUI 如下所示 Code from guizero import App
  • 在 ubuntu 中使用 headless chrome 打印 PDF

    我正在尝试使用 chrome headless 和以下命令行在 ubuntu 中打印 pdf google chrome headless disable gpu print to pdf gen2 pdf file home user D
  • Java 异常从资源 .wav 读取流

    我想我的代码没问题 我的 jar 文件里面的 wav 没问题 但是当我尝试使用 getResourceAsStream 加载它时 出现错误 这是我的错误 java io IOException mark reset not supporte
  • XML 中的未知属性警告

    AndroidManifest 和 XML 布局向我展示了Unknown attribute android 即使属性存在并且应用程序在设备上运行 也会发出警告 例子 Unknown attribute android maxSdkVers
  • 适用于 Java 的小型、简约且快速的 XML 库?

    有时我需要解析 XML 文件 并且仅解析 并且我不想通过手动执行此操作String indexOf 所以我的需要是使用可能最小且快速的 XML 解析库 不幸的是 我不知道类似的事情GSON 180kb 我已经导入了dom4j 但之后我遇到了
  • Angular2/JavaScript - 在(点击)上增加/减少 1

    我想在用户按下添加按钮时递增 递减 然后相应地更新金额值 我尝试过几次 但不幸的是我没有成功 这是代码 addToCart this amount 1 addItem this amount console log plus is this
  • 为什么我不能使用 Guid 作为泛型类型约束?

    我有如下通用方法 我想将 T 限制为仅 Guid 类型 如下所示 public static EntityFindApiResponse EntityFind
  • 在 Django 管理更改列表中,如何显示空格而不是默认的“(无)”?

    当数据库中的字段为空时 Django 在显示更改列表时插入 None 来保留空值的位置 虽然是描述性的 但当变更列表上有很多字段时 一切看起来都非常忙碌 而空白字段同样有帮助 但不会那么混乱 那么有什么方法可以更改 Django 用于表示更
  • 没有 SSH 访问权限的 Rsync

    首先 我不确定这是提出这个问题的最佳位置 所以如果它需要移动 那很酷 我有共享主机 没有 SSH 访问权限 在部署 rsyncing 方面我有哪些选择 我用 PHP 构建应用程序并使用 GIT 不确定这是否会改变事情 使用的 Rsync 旧
  • SBT 多项目中的传递依赖错误

    我正在构建一个 SBT 多项目项目 其中有common模块和logic模块 以及logic dependsOn common In common SparkSQL 2 2 1 org apache spark spark sql 2 2 1
  • WPF属性系统如何经济?

    据说WPF的设计者已经让它变得经济或者性能更高了 有人可以用一个例子来解释一下幕后发生的事情使 WPF 属性系统更加经济吗 您可能指的是依赖属性比普通 CLR 属性 便宜 这一事实 简单来说 依赖属性是使用稀疏数据结构实现的仅当在对象上设置
  • 格式化一个简单的字符串,但是`java.lang.NoSuchMethodError`

    我正在使用 Scala 2 9 2 运行 Scala 并测试一段简单的代码 这段代码是 好的 val title Hashing file s format sizeToStr file length 但我无法理解什么是什么 当我将该代码放
  • 相当于 VB6 中的 Directory.CreateDirectory()

    尝试一次创建多层文件夹 C pie appleie recipes 不使用多个不同的命令 是否有一种类似于 Directory CreateDirectory 的简单方法 这是我在我的一个项目中使用的一些代码 它需要将文件系统对象的引用添加
  • VBA If Else 在 For Next 循环中

    我需要在 For Next 循环中使用 VBA If Else 语句 我尝试了各种语句的排列 但它们都出错了 Sub TestForIfElse Dim Counter As Integer Dim i As Integer For i 1
  • 如何将多个对象分组以便将它们作为一个单元旋转?

    我需要一些关于 OpenGL 中旋转任务的最佳方法的指导 我知道如何使用四元数在 3D 空间中旋转对象 我可以平移它们 一切都很好 但我想知道将不同对象的集合视为单个实体以进行旋转的最佳方法 例如 假设您有一张桌子 上面放着物品 每个都有自