Java/LWJGL:OpenGL 中的 Z 轴表现得像左手坐标系

2024-03-13

最近,我寻求帮助 https://stackoverflow.com/q/18836484/1530508关于 OpenGL 中的 3D 相机旋转。这个答案 https://stackoverflow.com/a/18836618/1530508接下来的评论对我帮助很大,但仍然存在一个主要问题:移动相机时,运动通常(但并非总是)与应有的方向完全相反。例如,当相机的方向矩阵为恒等时,相机会完美移动。然而,如果它沿任何方向旋转,它在垂直于旋转轴的轴上的运动将具有与预期运动相反的符号。

话虽如此,我想我知道为什么会发生这种不一致的行为:

众所周知,OpenGL使用右手坐标系:

如果我正确地理解了这张图,当相机定位在同一位置时,z 轴应该指向相机,并且 z 值应该随着远离相机而减小(显然是肯定的)here https://stackoverflow.com/a/12336360/1530508)。 (在世界空间中测量的坐标)。

然而,在我的程序中,Z 轴远离相机,并且 z 值随着远离相机而增加。这是一个例子:

相机已向前移动,沿着本应是负 z 轴的方向,但实际上是正 z 轴。

如果我正确地将这种行为解释为异常,那么它将解释我的相机运动迹象的所有问题,因为当前看起来“正确”的运动实际上是错误的,并且我有一致的迹象表明我可以简单地反转以产生正确的运动。

所以问题是:

  • 我的Z轴是向后的还是应该是这样的?
  • 如果是倒退的话,为什么呢?从对该主题的多次讨论来看(1 https://stackoverflow.com/q/17650219/1530508, 2 https://stackoverflow.com/q/15337326/1530508, 3 https://stackoverflow.com/q/3430789/1530508),错误可能出现在我定义透视截头体的位置,所以我将其放在这里:

    public static final int P_ZNEAR = 1, P_ZFAR = 500;
    
    public static void perspective()
    {
        int i = GL11.glGetInteger(GL11.GL_MATRIX_MODE);
    
        GL11.glMatrixMode(GL11.GL_PROJECTION);
    
        GL11.glLoadIdentity();
    
        double ymax, xmax;
    
        ymax = P_ZNEAR * Math.tan(FOV / 2);
    
        xmax = ymax * ASPECT_RATIO;
    
        GL11.glFrustum(xmax, -xmax, -ymax, ymax, P_ZNEAR, P_ZFAR);
    
        GL11.glMatrixMode(i);
    }
    

None

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

Java/LWJGL:OpenGL 中的 Z 轴表现得像左手坐标系 的相关文章

随机推荐

  • “我们很抱歉,但有些不对劲。”部署到 Heroku 后

    我制作了一个小型应用程序 用户可以在其中登录 退出 创建等等 我使用 mySQL 作为数据库 并且在本地环境中一切正常 但是当我将其部署到heroku并迁移数据库等之后 heroku版本不起作用 当我追踪日志时我得到了这个 2011 10
  • 仅对单个类禁用 Linq to SQL 类中的自动复数化

    我有一个带有不规则复数的表名 复数与单数相同 有没有办法禁用该单个表的自动复数 Account DB Accounts 同时保留其他表的功能 您需要禁用 LINQ to SQL 设计器的复数表名称 为此 请导航至 工具 gt 选项 gt 数
  • 使用本地 WSDL 文件生成 Metro 客户端

    我之前使用 wsimport 生成了 Metro 客户端 但在这种情况下 WSDL 是通过 https 访问的 我的命令看起来像这样 wsimport https service net services Service wsdl d C
  • Ubuntu:按 Super+L 时不要锁定屏幕 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Whenever I press Super L or Win L on my Ubuntu 14 04 Desktop the scre
  • 按值字母顺序对 Javascript 对象进行排序

    我有一个 JS 对象如下 var obj 00 11 22 33 44 55 AddressB 66 77 88 99 AA BB AddressA 55 44 33 22 11 00 AddressC AA BB CC DD EE FF
  • Apache Kafka 主题名称限制有哪些?

    我刚刚尝试创建一个 Kafka 主题 user created 并在 Kafka 日志中看到此错误 Invalid character in value part of property 我用谷歌搜索发现 在邮件列表中 人们正在谈论弃用 a
  • React Native 后台计时器永远不会停止

    我正在构建一个应用程序 它有一个计时器 可以在计时器处于活动状态时请求地理位置 对于我正在使用的计时器反应本机背景计时器 https github com ocetnik react native background timer 这是可行
  • 调用 sp_rename 时使用变量

    我尝试制作一个存储过程 它将 删除主键 重命名设置主键的列名 创建新的主键 我正在努力解决第 2 点 我正在尝试将列重命名为sp rename将参数传递给存储过程 如下所示 EXEC sp rename SCHEMA TABLE ID Id
  • 为什么我运行 python manage.py runserver 时有两个进程

    wenzhixue 80384 0 4 1 1 2464788 22584 s001 S 10 37AM 0 01 06 usr bin python manage py runserver 0 0 0 0 8000 wenzhixue 8
  • 如何处理大量浮点数据?

    我们有一个二进制文件 其中包含大量float数据 约80MB 我们需要在 Java 应用程序中处理它 数据来自医疗扫描仪 一个文件包含来自一个文件的数据Rotation One Rotation包含 960Views One View包含
  • 为构建器配置 lombok

    我想避免多个构造函数 所以我想使用建造者设计模式 https en wikipedia org wiki Builder pattern 通过使用lombok https projectlombok org setup maven图书馆 它
  • Tensorflow tf.data.Dataset.cache似乎没有达到预期的效果

    我正在尝试按照以下方法提高我的模型训练性能使用 tf data API 获得更好的性能 https www tensorflow org guide data performance指导方针 然而 我观察到使用的性能 cache 如果与没有
  • 将键、值对添加到新字典中

    我当前的字典中有一个现有的键 值对列表 称为total list 我想检查我的列表 看看每个的长度是否Key 1 in total list 我想将该键及其值对添加到新字典中 这是我想出的代码 total list 104370544 31
  • 导入 SMOTE 引发 AttributeError:模块“sklearn.metrics._dist_metrics”没有属性“DistanceMetric32”

    Running from imblearn over sampling import SMOTE会引发以下错误 AttributeError Traceback most recent call last d A OneDrive UBC
  • ggplot:向现有分组箱线图添加新数据

    我用 ggplot2 创建了一个分组箱线图 现在我想通过以下方式向现有绘图添加附加数据 我每个月都有one 最佳 值应显示为点 并且这些点应通过线连接 这是期望的状态 我如何将这些点和线添加到我的绘图中 我可以将连接线放在箱线图后面吗 这是
  • IIS SSL 错误“ssl_error_rx_record_too_long”

    我使用以下 SSL 命令创建了一个证书 makecert r pe n CN www yourserver com b 01 01 2000 e 01 01 2036 eku 1 3 6 1 5 5 7 3 1 ss my sr local
  • 我在哪里可以了解“shell:”URI?

    我刚刚意识到有一个shell URI 但每个搜索引擎似乎都认为shell and shell是同一件事 我唯一发现的是你可以输入shell startup直接在资源管理器中 XP 和 7 测试过 可以看到明显的效果 这已经很好了 因为没有
  • 强制 JTable 在仍处于编辑模式时将数据“提交”到模型

    我有一个 JTable 如下 因此 当 JTable 仍处于编辑模式时 在 Dividend 列处有键盘光标闪烁 直接单击 确定 不会将数据提交到表模型中 单击 确定 仅关闭对话框 我需要明确按 ENTER 键 以便将数据提交到表模型中 当
  • SNMP:创建自定义 OID

    我需要自定义 OID 来监控我的一些软件状态 但我就是不明白 如何在Windows XP系统中创建自定义OID 如 1 3 6 1 4 1 30891 100 103 我需要其中一些人在那里写一些信息并在需要时阅读它 但我不知道如何在系统中
  • Java/LWJGL:OpenGL 中的 Z 轴表现得像左手坐标系

    最近 我寻求帮助 https stackoverflow com q 18836484 1530508关于 OpenGL 中的 3D 相机旋转 这个答案 https stackoverflow com a 18836618 1530508接