问题标签 [projection-matrix]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
11123 浏览

iphone-sdk-3.0 - OpenGL ES 2.0 相当于 glOrtho()?

在我的 iphone 应用程序中,我需要将 3d 场景投影到屏幕的 2D 坐标中以进行一些计算。我的对象经历了各种旋转、平移和缩放。所以我想我需要先将顶点与 ModelView 矩阵相乘,然后我需要将它与正交投影矩阵相乘。

首先我在正确的轨道上吗?

我有模型视图矩阵,但需要投影矩阵。ES 2.0 中是否有 glOrtho() 等价物?

0 投票
2 回答
5484 浏览

opengl - OpenGL - 正交投影矩阵,glViewport

我很难理解这些是如何工作的。首先,在 2d 游戏中,投影矩阵应该设置为左、右、上、下与窗口匹配的正交投影矩阵,对吗?但是当窗口调整大小时,我应该只更改 glViewport,而不是投影矩阵吗?以及如何保持纵横比?

有人可以在二维拼字游戏中解释这两件事的目的,以便我更好地理解它吗?

感觉 OpenGL 在 2d 设置中做了很多无用的事情。当图像已经存在时光栅化和计算片段,将顶点坐标转换为 NDC 仅通过 glViewport 转换回它们已经存在的位置。

此外,为什么在传统的免费 OpenGL 中我们必须制作自己的矩阵,而不是 glViewport 所做的我们自己的计算?

谢谢。

0 投票
1 回答
889 浏览

iphone - OpenGL ES 2.0(专门用于 iphone)渲染略有偏差。最好的猜测是这是一个投影矩阵问题

因此,我购买了 O'reilly 的 Iphone 3D 编程,并在其中发现了我认为是错误的代码。但是我无法弄清楚问题是什么,除非我这样做,否则我无法继续使用我自己的代码。

我会将我认为合适的代码粘贴到这篇文章中,但幸运的是,所有代码都可以在线获取: http ://examples.oreilly.com/9780596804831/HelloCone/

我遇到的问题是他们的 OpenGL ES 2.0 渲染器,它没有出现在他们的 ES 1.1 渲染器中。

所以我一直注意到的是,圆锥体并没有准确地呈现在正确的位置。为了测试这一点,我更改了 ModelViewMatrix 以精确呈现在 FrustumNear 平面上。所以圆锥应该看起来完全一分为二。当我使用 ES 1.1 渲染执行此操作时,情况就是这样,当我在 OpenGL ES 2.0 中执行相同操作时,情况并非如此。锥体大部分都在那里,但略微剃掉了。这意味着它没有准确地落在 fustrum 的近面上。

这是创建和设置投影矩阵的初始化代码:

这是渲染代码。如您所见,我已更改 ModelVieMatrix 以将锥体放置在近截锥体面的左下角。

mat4 旋转(m_animation.Current.ToMatrix()); mat4 翻译 = mat4::Translate(-1.6, -2.4, -5);

0 投票
1 回答
2004 浏览

projection - 斜透视 - 投影矩阵化处理

我想扩展处理,以便能够使用倾斜投影(内阁或骑士)渲染 3D 东西。在查看了 camera()、perspective() 和 ortho() 方法的源之后,我能够设置一个正交透视图,然后将 PGraphics3D#camera 矩阵调整为适当的值,并取得部分成功。

这导致正确的透视,但没有表面填充。当删除相机和正交方法调用或两者时,屏幕是空的,尽管我希望 camera(...) 对稍后被覆盖的相同矩阵进行操作。

此外,我对 PGraphics3D 中的矩阵有点困惑:相机、模型视图和投影。虽然 OpenGL 保留了两个矩阵堆栈 - modelView 和投影,但这里还有第三个 - 相机。任何人都可以阐明这些矩阵之间的区别和关系吗?

这将有助于了解何时使用/设置哪个。

0 投票
1 回答
2334 浏览

opengl-es - 无法在 OpenGL 中的 2D(正交)之上绘制 3D(平截头体)

我正在尝试在背景图像(正交投影)上使用 Frustum 投影渲染一些网格。无论我做什么,背景图像都会一直位于场景的顶部(隐藏网格)。

我尝试了一个小测试——当我用相同的投影矩阵渲染它们时,它们的顺序是正确的——背景图像在网格后面。

这些是投影矩阵和深度缓冲区初始化:

我正在清理缓冲区: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

最后一件事.. 当我禁用 GL_DEPTH_TEST 时,网格被绘制在背景图像的前面,因为首先调用背景..

我不知道是深度缓冲区还是投影矩阵导致了这个问题。screenWidth = 960 和 screenHeight = 640 的矩阵的值:

我究竟做错了什么?阿米尔。

编辑:这就是我用正交投影绘制图像的方式:

这就是我用平截头体投影绘制网格的方式:

0 投票
5 回答
3759 浏览

opengl-es - 如何从 Projection 和 ModelView 矩阵中获取 CATransform3D?

总之,

我有一个 iphone 项目,它使用 OpenGL-ES 为给定的模型视图矩阵和给定的投影矩阵绘制 3D 模型。我需要用 CALayer 替换 3D 模型,所以我将模型视图矩阵的值放入 CATransform3D 结构中并将其分配给layer.transform. 它运行良好,图层可见并按预期在屏幕上移动,但一段时间后我意识到我的图层行为不够精确,我应该考虑投影矩阵。然后出现了一个问题:当我简单地连接两个矩阵时,我的层看起来很奇怪(它非常小,大约 2 个像素,而它应该是 300 左右,因为它很远)或者根本不可见。我该如何解决?

这是一段代码:

任何帮助将不胜感激。

0 投票
2 回答
3671 浏览

xna - 了解投影矩阵

我试图了解投影向量的值范围是什么。这似乎与 MSDN 所说的不一致。

下面的代码输出一个彩色三角形。三角形完全可见。我希望在预测顶点之后,以下情况将是正确的:

X 和 Y 在 -1 到 1 的范围内。Z 在 0 到 1 的范围内。

我从这里得到了这些信息:http: //msdn.microsoft.com/en-us/library/bb195665.aspx

但是,当我使用视图和投影矩阵的乘积手动转换三角形的顶点时,它们具有以下值:

{X:1,8 Y:0 Z:3,991996} {X:0 Y:3 Z:3,991996} {X:-1,8 Y:0 Z:3,991996}

为什么这些值超出了可见范围,而三角形却完全可见?

0 投票
1 回答
1387 浏览

actionscript-3 - 如何使用透视投影矩阵计算对象比例?

我目前正在使用精灵在 Flash 中构建一个小的 3D 粒子引擎。

设置每个精灵的位置,我使用下面的 projectVector 函数。(viewTransform 矩阵是与透视投影矩阵连接的粒子世界矩阵)

这非常有效,可以将精灵准确地放置在它们应该在的位置:D 我遇到的问题是试图弄清楚如何根据与相机的距离来计算每个粒子的比例。

如果我不使用透视投影矩阵,我通常会做这样的事情..

如果有人能够向我展示如何使用透视投影矩阵计算“scaleRatio”,那将是王牌

谢谢!

0 投票
2 回答
606 浏览

c# - xna 中的斜投影

我试图在 xna 框架中实现倾斜投影( http://en.wikipedia.org/wiki/Oblique_projection ):

如您所见,我只是将正交投影与斜投影相乘。

我得到的是:

http://imageshack.us/photo/my-images/835/oblique1.png/

它基本上是正交投影的样子,但有一些奇怪的远剪辑。

我怎样才能实现正确的斜投影?提前谢谢

0 投票
0 回答
607 浏览

matlab - 透视投影结果优化

我在坐标系中有一个 3d 模型,我需要使用透视投影在 2d 平面上进行投影,我使用了这个投影方程 C*(RT * P') 其中 C 是校准矩阵

px 和 py 是原点的坐标,我将它们都归零,R 是旋转矩阵,T 是平移矩阵:大约 9448.82,不确定这个转换是否正确)在 Z 轴上,在 Y 轴上 1 米,f 是焦距,我不确定我使用的值,但我通过这个等式计算它:f=(图像宽度)*(图像焦距)/(7.81),我从我的相机品牌网站获得了 7.81 值,因为它应该是一个内部相机参数,我不确定它是否正确。 在此处输入图像描述

这是我正在尝试投影的模型的屏幕截图。

在此处输入图像描述

这是投影后的模型……在我看来,它是在 X 轴上缩放的,感觉不像是完全相同的模型,并且在通过一些填充算法填充了点之间的间隙之后: 在此处输入图像描述

这是结果,它与原始模型更不同......请提供有关问题所在的任何帮助,以便我可以解决它..谢谢:)