为什么Android的frustumM生成的矩阵与Redbook的不同?

2024-01-07

Something seems funny about the way that Android's frustumM works. If I check the OpenGL red book, the matrix generated looks like this:

(source: glprogramming.com http://www.glprogramming.com/red/images/Image23.gif)

Songho.ca seems to agree with this:

(source: songho.ca http://www.songho.ca/opengl/files/gl_projectionmatrix_eq16.png)

However, one component is multiplied by 2 with Android's frustumM, and not in the other example matrices. Here's what it seems to be doing:

一切似乎在功能上都匹配,except第一行,第三列。为什么要乘以二?以下是 android.opengl.Matrix 的 frustumM 方法中的代码行,用于生成第三列的前三个元素:

final float A = 2.0f * ((right + left) * r_width);
final float B = (top + bottom) * r_height;
final float C = (far + near) * r_depth;

将 r_width、r_height、r_depth 定义为:

final float r_width  = 1.0f / (right - left);
final float r_height = 1.0f / (top - bottom);
final float r_depth  = 1.0f / (near - far);

以“final float A”开头的行似乎错误地乘以 2。

这是 Android 代码中的错误,还是我只是遗漏了一些东西?我知道如果平截头体是对称的,则该术语会抵消。当使用不对称平截头体运行代码时,生成的矩阵实际上是不同的,并且当相同的向量与这些不同的矩阵相乘时得到的向量也是不同的。


这是 Android 的一个错误。请参见http://code.google.com/p/android/issues/detail?id=35646 http://code.google.com/p/android/issues/detail?id=35646

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

为什么Android的frustumM生成的矩阵与Redbook的不同? 的相关文章

随机推荐

  • JavaScript 中的节点是什么?

    我想知道 JavaScript 中的节点到底是什么 如函数中所示 element nodeType row parentNode removeChild row 在这种情况下 节点 只是一个 HTML 元素 DOM 是代表网站 HTML 的
  • Fiware Ultralight 2.0 IoTAgent:如何从设备发送测量?

    我正在研究一个 POC 使用 Fiware 平台创建智能城市物联网项目 我正在尝试运行端到端流程 我正在运行以下 Docker 容器 容器 ID 端口名称 24f036202f78 0 0 0 0 4041 gt 4041 tcp 0 0
  • 如何为自定义 Java 标记添加 Eclipse 快速修复?

    我想向 Eclipse 的问题视图报告 Java 文件的自定义问题并为它们提供快速修复 标准方法是使用扩展点org eclipse core resources markers声明自定义标记并通过调用添加标记org eclipse core
  • 在 VS 设计器中加载包时禁用 SSIS 包验证

    我有一些部署到 SQL 2005 Server 的 SSIS 包 随后在 Visual Studio 2003 中设计和维护 当我打开任何 BIDS 项目以及其中一个包时 设计器总是验证每个数据流和任务目的 通常 这不是问题 但是 在某些情
  • Jasmine单元测试observable订阅不触发

    我将 Angular 5 与 Jasmine 和 Karma 一起使用 我正在尝试测试某个功能是否有效 但我的订阅在单元测试期间没有触发 这导致我的单元测试失败 因为我正在使用 jasmine 的 did 函数 我想让这个单元测试成功 我已
  • Tomcat 中的 NIO 连接器

    我试图通过配置 server xml 文件在 Tomcat 6 0 中启用 NIO 连接器 但我得到Firefox 无法与位于 localhost 8081 的服务器建立连接 每当我输入时在浏览器中本地主机 8081 这就是我在 Tomca
  • DataGridTextColumn - 如何绑定IsReadonly?

    在 Silverlight 4 中 DataGridTextColumn 的 IsReadOnly 属性似乎不是依赖属性 因此我无法将它绑定到视图模型上的属性 似乎唯一的选择是使用 DataTemplate 但即使在这里我也面临两个主要问题
  • 用循环填充矩阵

    我正在尝试创建一个矩阵n by k with kmvn 使用循环进行协变量 非常简单 但到目前为止还没有工作 这是我的代码 n 1000 k 5 p 100 mu 0 sigma 1 x matrix data NA nrow n ncol
  • 如何在 laravel eloquent 中添加两列值并执行 where 条件

    这是我的桌子 id remaining amount additional amount 1 200 0 2 100 100 3 300 100 4 200 50 我正在尝试获取总和为剩余数量 额外金额 gt 0 result this g
  • 响应 SwiftUI 中的按键事件

    我想响应按键 例如esc键在 macOS OSX 上 以及在 iPad 上使用外部键盘时 我怎样才能做到这一点 我想过用 available available与 SwiftUI 的onExitCommand https developer
  • 一行中没有所有 True 值的布尔数组

    I have numpy array np random seed 100 mask np random choice True False size 10 3 print mask True True False False False
  • 如何在 git url 的用户名或密码中转义“@”

    在命令行上推送到 git 的格式之一是 Url format https username password github com owner repo 我的挑战是用户名和密码 这是我无法控制的共享帐户 包含 在他们里面 实际上都是 在这种
  • Spring-Boot Jersey:允许 Jersey 提供静态内容

    该应用程序使用 JDK 8 Spring Boot 和 Spring Boot Jersey 启动器 并打包为 WAR 尽管它是通过 Spring Boot Maven 插件在本地运行 我想做的是将我动态 在构建时 生成的文档作为欢迎页面
  • 部分排列

    我有以下递归函数用于输出部分组合 void comb string sofar string rest int n string substring if n 0 cout lt lt sofar lt lt endl else for s
  • 使用 AutoSize 时的 FlowLayoutPanel 高度错误

    我有一个包含 1 列和 3 行的 TableLayout 的表单 其中包含 2 个 FlowLayoutPanel 和一个文本框 所有行均为 AutoSize 列设置为 Percentage 100 每个 FlowLayoutPanel 都
  • .NET Core 2.1 - 构建时的 dotnet/exe,缺少软件包

    我一直在一台机器上进行开发 最近尝试在另一台电脑上安装我的应用程序 我想我已经推断出自从在 NET Core 中以来就没有找到 nuget 包 nuget 将包放在本地 Users 文件夹路径中 我最初添加了
  • 从自定义表单将数据插入 WordPress 数据库表

    我正在尝试通过创建表将数据插入 Wordpress 数据库 我已经创建了表 但是当我尝试从表单插入数据时 它不会插入数据 我已经检查数据库连接是否有效 但插入没有发生 有人可以帮我解决这个问题吗 这是我的代码
  • C++ 继承和函数重写

    在C 中 基类的成员函数是否会被其同名的派生类函数覆盖 即使它的原型 参数的数量 类型和常量 不同 我想这是一个愚蠢的问题 因为许多网站都说函数原型应该相同才能发生这种情况 但为什么下面的代码不能编译 我相信这是一个非常简单的继承案例 in
  • 如何在不遍历链表的情况下统计链表中的节点数?

    面试时有人问我如何在不遍历链表的情况下统计链表中的节点数 有什么办法可以实现这一点吗 我能想到的唯一方法是添加一个节点数计数器 每次节点数都会增加add or insert方法被调用 并在以下情况时递减delete被调用 您无法对占用的内存
  • 为什么Android的frustumM生成的矩阵与Redbook的不同?

    Something seems funny about the way that Android s frustumM works If I check the OpenGL red book the matrix generated lo