问题标签 [frustum]

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 投票
1 回答
11765 浏览

opengl - GLM - 从投影矩阵计算平截头体

GLM 提供了一种声明投影矩阵的方法:

投影矩阵 = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 1000.f);

由此,我希望能够检查边界框是否在我的截锥体中。我如何获得平截头体平面或我需要从投影矩阵计算它的任何东西?这甚至是正确的方法吗?

0 投票
2 回答
3889 浏览

c++ - OpenGL/GLM - 计算截锥体问题

我正在尝试计算我的截锥体来做一些简单的边界框测试。

这是我的功能:

现在,在有人告诉我列/行的顺序错误之前,我已经尝试了它们,但都没有运气。

我从获取矩阵的固定函数模式切换,如下所示:

实际传递一个矩阵。此时我唯一渲染的是世界顶点,我怀疑问题是我的边界框位置没有考虑到我在世界中的位置的偏移量。

这是我的矩阵创建:

因为我现在唯一渲染的是具有绝对位置的全局顶点,所以我不使用任何模型矩阵。

我确信我的 box vs frustum 代码是正确的。有人看到我的计算代码有错误,或者知道我确实需要转换绑定框顶点吗?

谢谢你。

0 投票
1 回答
1949 浏览

view - 3D 视图截锥体剔除,光线投射

我需要更多关于视锥体剔除的理论,以更好地理解如何实现它。我知道光线投射是为了弄清楚前面有什么物体,从而找出不渲染的物体。

我担心 CPU 使用率。据我了解,我应该按相机的宽度*高度投射光线,并且可能会根据相机看到的距离增加光线的数量。此外,我必须将其乘以场景中的对象数量,以验证哪个最接近光线。

我对这个概念的理解准确吗?我究竟怎样才能更有效地做到这一点?

编辑:

目标是实现某种类型的体素引擎,其中世界可以使用八叉树进行细分。它可能由数十万个立方体组成。

0 投票
3 回答
2826 浏览

c++ - OpenGL - 截锥体不剔除远平面以外的多边形

我已经实现了平截头体剔除,并正在检查边界框是否与平截头体平面相交。我添加了暂停平截头体更新的功能,这让我可以查看平截头体剔除是否正常工作。当我在暂停后转身时,在我身后和左右两侧都没有渲染,它们会像你预期的那样逐渐变细。超出剪辑距离(远平面),它们仍然呈现,我不确定这是否是我的平截头体更新或边界框检查代码的问题,或者我使用了错误的矩阵或什么。当我将投影矩阵中的距离设置为 3000.0f 时,它仍然说边界框远远超过了仍然在截锥体中,但事实并非如此。

这是我创建模型视图矩阵的地方:

我在 Z 方向将其缩放 -1 的原因是因为关卡被设计为使用 DirectX 渲染,所以我反转了 Z 方向。

这是我更新我的截锥体的地方:

最后,我检查边界框:

0 投票
0 回答
371 浏览

webgl - 使用three.js我可以在近场和远场之间的场景中放置视口吗

我不确定我想要实现的目标是否可以使用 three.js

我的目标是将视口放置在截锥体内。我想创建一个对象可以出现在视口和相机之间的 3d 环境。因此,如果我移动相机,那么似乎物体在屏幕前以 3d 呈现 - 即生成的视差给人的印象是当物体移动时它被投影到屏幕外。

我只是找不到办法。我确信我在几年前用 flash 做过,我想我会尝试 three.js 和 webGL。

在此处输入图像描述

0 投票
1 回答
1962 浏览

unity3d - Unity Frustum 剔除问题

我正在创建一个利用偏心投影的游戏。我已经将我的游戏设置在一个集群中渲染的 CAVE 中,超过 8 台 PC,其中每只眼睛使用 4 台 PC(这会产生立体效果)。为了帮助在 CAVE 中对齐,我实现了一个偏离中心的投影类。

这个类只是告诉相机它的左上角、左下角和右下角是什么。从这里,它会创建一个新的投影矩阵,向玩家展示他们世界的左侧和右侧。然而,在 Unity 的编辑器中,摄像机仍然是面向前方的,因此 Unity 内部的剔除并没有渲染出现在左右屏幕上的一半图像。

有谁知道在 Unity 中关闭剔除或找到解决投影矩阵问题的方法?

0 投票
2 回答
8482 浏览

math - 提取视锥平面(Gribb & Hartmann 方法)

一段时间以来,我一直在努力使用Gribb/Hartmann 方法提取平截头体平面,但收效甚微。我想建立一个相机视锥来剔除我的场景。

我正在使用右手坐标系中的列主矩阵。(OpenGL 风格 - 我使用 C# 和 Playstation Mobile,但数学应该相同)

我想在世界空间中获得我的飞机,所以我从 View-Projection Matrix(即 projectionMatrix * viewMatrix)构建我的平截头体。视图矩阵是相机世界变换的逆矩阵。

问题是; 无论我调整什么,我似乎都无法得到正确的截锥体。我认为我可能遗漏了一些明显的东西。

如果我在向下看 z 轴的同时向左或向右“扫射”我的相机,我的平面的法线会发生变化,因此它们总是指向场景的原点——这让我认为它们不在世界空间中...

0 投票
1 回答
263 浏览

c - 设置透视图的坐标系?

我理解平截头体查看系统背后的概念;它的形状像金字塔,随着物体靠近中心,它们会变小,直到最终被剪掉。但是,当在 OpenGL 中使用查看投影时(请注意:我不使用已弃用的功能),您可以像这样设置坐标系:

orthoExample(左、右、下、上、近、远);

这一切都很好,但是说到透视,事情变得有点奇怪。

透视示例(field_of_view_y,方面,近,远);

我该如何设置具有这样功能的坐标系?!?它不允许我指定左、右、下、上等。我知道透视只是平截头体投影的一种变体......

0 投票
1 回答
810 浏览

opengl - glViewport 和 glFrustum 之间到底有什么联系?

假设我想画以下几行:

其中 ratio = zFar/zNear 和其他一切都是 glFrustum 参数。

我不应该看到任何选择 Frustum 参数的行,还是它取决于 glViewport?

因为我现在看不到他们,我不明白为什么。

谢谢你。

0 投票
0 回答
516 浏览

opengl - 如何在 Open GL 中定义 MODELVIEW 矩阵

我正在做相机校准,我有我的内在和外在参数。我的虚拟摄像机很少,需要为每个摄像机绘制平截头体。我几乎解决了这个问题,找出投影矩阵(m [int] * m [ext] = Projection Matrix),但我仍然不知道如何找出Modelview矩阵......我需要它,用于找到当前的截头角,并绘制相机的局部坐标系。