问题标签 [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 投票
0 回答
2023 浏览

three.js - Three.js,中心摄像头查看场景中的所有对象

我编写了一个算法,可以通过双击然后爆炸(折叠和展开)机械组。

但是我想在那之后向后或向前移动相机以查看我所有的对象。我正在尝试使用截锥体来计算截锥体和对象之间的交集,但我不明白如何使用平面。我正在使用 OrthographicCamera。

我所做的 :

  1. 在每一帧我重新计算新的截锥体(当相机移动时):

    /li>
  2. 然后我对场景中所有对象的 6 个平面和边界框进行循环:

    /li>

但是plane.isIntersectionLine(line)总是错误的。

你有什么想法 ?

谢谢

0 投票
1 回答
276 浏览

opengl - rendering two overlapped FOV using glFrustum without GLUT_STEREO

I have a program that reads a 360 mono panorama and reads an IMU, drawing the correct part of the panorama based on the head location.

I am creating two windows, one per display, and do not want to rely on GLUT_STEREO. The draw() calls for each display are therefore independent, but right now they render the same thing, which is a gluSphere to represent the panorama. To draw the correct part of the sphere, IMU data (quaternion) becomes a rotation matrix, and that matrix is multiplied with the projection.

I wish to create a little bit of overlap with the two images, as shown with the following image: overlapped

For example, the red rectangle is my left display and the blue rectangle is my right display, but there is some overlap in the middle.

I was reading some article about stereo rendering, and I thought the solution would be to replace the call from gluPerspective() to glFrustum(), and simply modify both the left and right parameter at the same time. I thought subtracting some value to left/right parameter of glFrustum() on the display and adding some value to the left/right parameter of glFrustum() would do the trick. I modified the glutReshapeFunc() callback's projection matrix to do just that:

Unfortunately, this does not do what I expect (and I am really not sure why). I would think modifying both left and right parameter of glFrustum() would keep the same horizontal FOV but move it to the left or right. It seems to either stretch the image in or out.

I have played around with glTranslatef() on the ModelView or glLookAt(), but there place are not clear to me. Why is glFrustum() not having the right behavior please, and what am I missing?

0 投票
1 回答
239 浏览

c# - OpenTK 不正确地剔除对象

我最近使用 OpenTK 使用 C# 和 OpenGL 制作了一个应用程序。为了提高性能,我集成了一个截锥体剔除系统,但由于某些原因,对象未被正确剔除。我的意思是,它不是很好地显示所有可见对象,而是剔除随机对象,当我旋转相机时,一些对象会出现和消失。我知道这很正常,但不是在我应该看到他们的时候。实际的截锥体剔除代码是我在其他地方使用的工作 C++/DirectXMath 代码的 C# 端口。
以下是我创建六个截头平面的方法:

我检查是否应该在这里剔除一个球体:

我在其他一些帖子上看到人们手动将视图和投影矩阵相乘,但我不确定这是问题的原因。我做错了什么?谢谢

0 投票
0 回答
1569 浏览

opengl - 计算世界空间中视锥角的最准确方法

我正在尝试计算世界空间中的视锥角。我已经通过使用 FOV 并使用平面的宽度/高度和一些矢量数学来实现它

但是,许多示例只是说明您可以将像 (1,1,1) 这样的 NDC 角乘以反 viewProjection 矩阵。但是当我这样做时,我会得到一些不同的结果。这是我现在用来测试的代码:

现在,这两个结果都给出了 [near,far] = [1, 10000] 的准确 z 值,但是 x 值相差很大,而 y 值几乎相同。我只是想知道哪种方式最准确?

逆视图投影

在此处输入图像描述

定期计算

在此处输入图像描述

0 投票
1 回答
119 浏览

opengl - 平铺的阴影截头体被反转

我试图通过获取屏幕空间坐标然后使用叉积来获取视锥平面来计算每个平截头体。然而,当我检查哪些瓷砖受到光线的影响时,它们是在相反的方向上,例如,它们在相机的相反方向上移动并且在它后面。我已经尝试更改交叉产品订单,但它似乎并没有以任何方式工作。这是生成截锥体并检查光线是否与其相交的代码:

和功能:

以及我如何检查灯光

我已经注释掉了 z 部分只是为了调试。截锥体完全颠倒了,或者我做错了什么,在这张照片中,我在我身后向上看,所以与场景完全相反方向的瓷砖受到影响,当我移动相机时,瓷砖移动也在相反的方向

在此处输入图像描述

0 投票
0 回答
209 浏览

matrix - Unity3d 变换视图视锥体

如何转换 Unity3d 相机的视锥体,以便我可以通过一个平面并使相机的近剪裁平面成为该平面?平面可能不垂直于观察方向。我不熟悉 Matrix4x4。

图片

我对涉及将带有自定义着色器的材质应用于场景中的每个对象的解决方案不感兴趣。

谢谢你的帮助!

0 投票
1 回答
121 浏览

opengl - OpenGL 大写视锥体

我正在通过 lwjgl 使用 opengl 渲染一个大场景。当我将投影矩阵的 zFar 设置为 100 之类的小数字时,它会在该距离处截断我的视锥。但是如果我将它设置为 1000 或更大,这个设置将被忽略,OpenGL 只会在大约 500 个单位的距离处进行剪辑。这发生在我所有的着色器中,最有趣的事实是这种裁剪发生在轴对齐的情况下,所以它只取决于相机沿轴的距离,而不是对角线距离。

我究竟做错了什么?OpenGL中是否有一个设置来限制某个点的视图?这发生在我的英特尔和英伟达卡上。我正在使用“现代 OpenGL”并自己管理矩阵。

视图矩阵有什么办法可以限制视锥体?

编辑: 顶点着色器:

注释掉 gl_ClipDistance[0] 不会改变任何东西。

这是一张图片,这不是世界末日,这是沿轴裁剪的地形,如果你移动你会看到更多。您还可以看到水下地形是如何被剪裁的。使用不同着色器的模型、水或粒子也会被剪裁。

图片在这里

0 投票
1 回答
128 浏览

qml - 3个顶点的QSGGeometryNode深度(z)问题

我正在使用自定义 QSGGeometryNode 和 QSGTransformNode 在 Qml 场景图中绘制 3D 几何图形(Point3D 顶点)。除了 3D 模型在某个 z 坐标处被截断(z 是 Qml 中的深度轴)之外,这是可行的。首先,我预计问题是由于与 Qml 2D 平面相交。但我试图沿 z 轴移动模型,但它总是被切断(好像有一个局部模型截头截头体剪裁平面)。

这个问题的根源可能是什么?

问候,

0 投票
1 回答
819 浏览

javascript - 移动相机以使所有对象完全适合截锥体 - three.js

编辑:我改写了我的问题以帮助有同样问题的用户。

我有一个 three.js 场景,在上面添加了一些球体。

我想将相机移向特定方向,直到所有对象(随机定位在场景内)都“完全适合”用户的屏幕。

0 投票
1 回答
1322 浏览

opengl-3 - 使用着色器时的高效截锥剔除

我想知道使用可编程管道进行截锥体剔除的最有效方法是什么。我的意思是,如果我理解正确,按照这里描述的方法:几何方法(顺便说一下,那里描述的唯一方法对我有用),像 glGetFloatv(GL_MODELVIEW_MATRIX, ...) 这样的函数不再有效,因为最终顶点位置在着色器阶段计算。对于渲染前必须检查的每个边界框转换,我是否必须在客户端计算平截头体平面?

谢谢。