问题标签 [orthographic]

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 回答
3874 浏览

opengl - 正交到透视调整计算

我想知道如何调整透视投影以使其看起来像正交投影。例如,假设我有一个 10x10 的点网格,每个点都有不同的 z 值,在正交投影下,它们都很好地排列。在透视投影下,它当然会调整相对于相机的位置和 z 深度。我需要对每个点进行哪些调整,看起来好像它仍然排列在一个正交投影中?(当然,直到相机移动)。

我正在考虑计算从眼睛位置穿过 z 平面的光线(如果这就是你所说的),在我希望它出现的点处,并跟随光线直到所需的深度。虽然我不确定如何实现这一点。

0 投票
1 回答
948 浏览

visual-c++ - 为什么 alpha 混合在正交中不起作用?

这是我在绘制 3D 对象后打开正射投影的方式:

这就是我在绘制 3D 对象后打开混合并以正交方式绘制纹理的方式:

Quad1 比 Quad2 大一点,涵盖了 Quad2 的某些部分。两种纹理都具有 RGBA 形式的 Alpha 通道。

问题是,Quad1 和 Quad2 正确地用 alpha 覆盖 3D 对象,但是 Quad1 的 alpha 在 Quad2 上时不起作用。它仅像 RGB 一样在 Quad2 之上绘制。

我该如何解决这个问题?

0 投票
1 回答
14496 浏览

android - glOrthof 和 glViewPort 的区别

在 OpenGL-ES 上,我对设置之间的区别感到困惑

及其各自的参数。因为我相信这一切都是将您可以看到的部分设置为指定的坐标(宽度,高度)。我应该使用哪个?

0 投票
2 回答
469 浏览

android - 更改正交投影矩阵的问题

我正在尝试使用 opengles,并制作了一些在屏幕上移动的简单方块:

很简单,将对象绘制到屏幕上(仍在工作)。现在我想通过基于触摸输入转换投影矩阵来在屏幕上拖动。我在之前的代码上方添加了这段代码(在绘制对象之前)

updateGame 只是从 MyPanel.getDiffX() 获取那些,其中 DiffX 就是您的手指移动了多少:

现在,如果我使用代码来转换投影矩阵,我再也看不到屏幕上的任何对象(只是 glClear 颜色)。有谁知道发生了什么?我使用的矩阵错了吗?

0 投票
1 回答
5814 浏览

ios - OpenGL ES 2.0:为什么这个透视投影矩阵没有给出正确的结果?

大约 2 天前,我决定编写代码来显式计算模型-视图-投影(“MVP”)矩阵,以了解它是如何工作的。从那时起,我就遇到了麻烦,似乎是因为我使用的投影矩阵。

使用 iPhone 显示器,我创建了一个由以下 4 个角顶点描述的屏幕中心正方形:

因为我使用的是 OGLES 2.0,所以我将 MVP 作为统一传递给我的顶点着色器,然后简单地将转换应用于当前顶点位置:

现在我已经将我的 MVP 简化为 P 矩阵。下面显示的代码中列出了两个投影矩阵。第一个是标准透视投影矩阵,第二个是我在网上找到的显式值投影矩阵。

当使用显式值矩阵时,正方形在屏幕中心以正确的尺寸精确呈现。使用透视投影矩阵时,屏幕上不会显示任何内容。我已经打印(screenWidth/2, screenHeight/2, 0)了透视投影矩阵为屏幕中心生成的位置值,它们非常大。显式值矩阵正确地产生零。

我认为显式值矩阵是正交投影矩阵 - 对吗?我的沮丧是我无法弄清楚为什么我的透视投影矩阵无法工作。

如果有人能帮助我解决这个问题,我将不胜感激。非常感谢。

更新克里斯蒂安·劳:

更新 2

新的 MVP 代码:

屏幕中心仍然看不到任何东西,并且屏幕中心的转换后的 x,y 坐标不为零。

更新 3

在上面的代码中使用转置ts代替!但是正方形不再是正方形了;它现在似乎具有纵横比screenHeight/screenWidth,即它具有平行于(短)屏幕宽度的较长尺寸,以及平行于(长)屏幕高度的较短尺寸。

我非常想知道(a)为什么需要转置以及它是否是有效的修复,(b)如何正确纠正非正方形维度,以及(c)transpose(ts)我们使用的这个附加矩阵如何适合Viewport * Projection * View * Model * Point的变换链。

对于 (c):我理解矩阵的作用,即 Christian Rau 关于我们如何转换到范围 [-1, 1] 的解释。但是将这个额外的工作作为一个单独的转换矩阵包含在内是否正确,或者我们的 MVP 链的某些部分是否应该代替做这项工作?

衷心感谢 Christian Rau 迄今为止所做的宝贵贡献。

更新 4

我关于“​​ts 如何适应”的问题很愚蠢,不是吗 - 重点是矩阵只需要,因为我选择使用屏幕坐标作为我的顶点;如果我从一开始就使用世界空间中的坐标,那么这项工作就不需要了!

感谢 Christian 的所有帮助,这是非常宝贵的 :) 问题已解决。

0 投票
1 回答
1103 浏览

ios - 在 iOS 上使用 OpenGL-ES 2.0 设置横向正交投影的正确方法是什么?

这一切都在 OpenGL ES 2.0 中......

我正在尝试将 3D 透视投影与 2D 正交投影混合,这样我就可以在游戏中的 3D 场景顶部放置一个 HUD。

游戏以横向运行,我真的很困惑如何处理设备方向。

我正在使用合适的投影矩阵渲染 3D 内容,并将 modelView 矩阵和我的照明旋转 90 度,因此 3D 场景是正确的。这一点都工作正常。

我的问题是我无法弄清楚如何正确设置 2D 投影矩阵,因此当设备处于横向且主页按钮位于左侧时,原点位于左上角。

如何正确构造正交矩阵以使这种情况发生?我目前正在使用这个

但是,如果设备是纵向的,并且主页按钮位于底部,这只会将原点放在左上角,并且在我手中旋转设备意味着一切都在它的一侧。

我应该尝试更改 2D 投影矩阵还是需要做其他事情?

0 投票
3 回答
6141 浏览

opengl - 现代 OpenGL 中的正交投影

我想只使用现代 OpenGL 技术(即没有即时模式的东西)设置一个正交投影。我在网上看到有关如何解决此问题的相互矛盾的信息。

有人说还是可以打电话glMatrixMode(GL_PROJECTION)then glOrtho。这在过去一直对我有用,但我想知道这在现代 OpenGL 中是否已被弃用。

如果是这样,顶点着色器是当今进行正交投影的标准方法吗?GLSL 是否提供了一个方便的内置函数来设置正交投影,还是我需要自己在顶点着色器中编写该数学?

0 投票
2 回答
9762 浏览

opengl - 如何将 OpenGL 正交投影与深度缓冲区一起使用?

我使用glFrustum()透视模式渲染了一个 3D 场景。然后,我将一个 2D 对象放置在 3D 场景上,作为特定 3D 对象的标签。我已经计算了 3D 对象的 2D 位置,使用gluProject()在哪个位置放置我的 2D 标签对象。使用glOrtho()正交模式渲染 2D 标签对象。这完美地工作并且 2D 标签对象悬停在 3D 对象上。

现在,我要做的是给 2D 对象 az 值,以便它可以使用深度缓冲区隐藏在场景中的其他 3D 对象后面。我已经给出了我知道应该被深度缓冲区隐藏的 2D 对象 az 值,但是当我渲染对象时它总是可见的。

那么问题来了,为什么 2D 对象仍然可见而不是隐藏?

我确实在某处读到正交投影和透视投影存储不兼容的深度缓冲区值。这是真的吗,如果是这样,我该如何在它们之间进行转换?

0 投票
1 回答
855 浏览

orthographic - 如何设置一个正交相机来像描述的那样投影?

我希望投影是这样的:

三轴投影

那是,(x,y,z) -> (x-y/sqrt(2),y/sqrt(2)-z)

如何找到投影矩阵?

0 投票
1 回答
659 浏览

opengl - 使用 glOrtho 自动化 2D 线图视口的通用公式

基于动态数据,我需要使用openGL动态绘制二维线图。由于数据会发生变化,因此还需要调整图形的最终绘制,以便查看 X 轴和 Y 轴的最大值和最小值。我尝试了几种使用 glortho 的方法,任何人都可以建议我这个公式,

我的 x 轴最大值为 10,000.0f,Y 轴最大值为 64,468.0f(假设 x 轴 n y 轴最小值约为 1.0f)

如果我使用上述参数,我将无法查看图表的最大值和最小值

当最大值很大时,上述一个工作正常,

如果上述示例的最大值小于 1,那么由于左值是 1 并且类似地,底部值是 1,因此查看区域被剪裁了怎么办?