问题标签 [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.
camera - Unity 3D 中的相机平截头体平面
我知道CalculateFrustumPlanes()
inUnity3D
返回一个对象数组Plane
,每个对象代表一个不同的截锥平面,但我找不到任何文档来建议哪个元素是哪个?
例如
等等
对于四叉树系统,我需要计算空间中的一个点(如边界体积的中心点)是否在相机平截头体内。
autocad - 如何为 Autocad 创建 DXF 格式的 Frustum?
我正在尝试使用我的文本编辑器使用 DXF 文件创建一个截锥体,但找不到任何好的解决方案或创建它的方法。如果有人知道并且有义务帮助我找到解决方案 DXF 文件或示例,那将是一个很大的帮助。谢谢你
c++ - OpenGL Frustum visibility test with sphere : Far plane not working
I am doing a program to test sphere-frustum intersection and being able to determine the sphere's visibility. I am extracting the frustum's clipping planes into camera space and checking for intersection. It works perfectly for all planes except the far plane and I cannot figure out why. I keep pulling the camera back but my program still claims the sphere is visible, despite it having been clipped long ago. If I go far enough it eventually determines that it is not visible, but this is some distance after it has exited the frustum.
I am using a unit sphere at the origin for the test. I am using the OpenGL Mathematics (GLM) library for vector and matrix data structures and for its built in math functions. Here is my code for the visibility function:
The polygons appear to be clipped by the far plane properly so it seems that the projection matrix is set up properly, but the calculations make it seem like the plane is way far out. Perhaps I am not calculating something correctly or have a fundamental misunderstanding of the calculations that are required?
The calculations that deal specifically with the far clipping plane are:
and
I'm setting the plane to be equal to the 4th row (or in this case column) of the projection matrix - the 3rd row of the projection matrix. Then I'm extending the far plane one unit further (due to the sphere's radius of one; D' = D - C(-1) )
I've looked over this code many times and I can't see why it shouldn't work. Any help is appreciated.
EDIT: I can't answer my own question as I don't have the rep, so I will post it here. The problem was that I wasn't normalizing the plane equations. This didn't seem to make much of a difference for any of the clip planes besides the far one, so I hadn't even considered it (but that didn't make it any less wrong). After normalization everything works properly.
opengl - 在 OpenGL 中渲染裁剪的图像
我想渲染一个具有特定相机参数的场景,其中分辨率非常高(比如 20,000 x 20,000 像素),但我实际上只对图像平面的 640x480 小部分感兴趣。
我不一定只想放大该部分并改变相机指向的位置。我希望相机保持指向同一个方向,我只想渲染场景的一小部分。
我附上了一张图片来尝试展示我在说什么:
关于如何使用OpenGL调用正确设置相机矩阵的任何提示?
java - 剪辑空间中的截锥体剔除
我正在尝试使用Java 和 OpenGL ( LWJGL )中的剪辑空间方法来实现截锥体剔除。对于投影矩阵,我使用以下方法:
截锥体的系数是这样提取的:
应使用以下方法测试平截头体是否包含给定点。
问题是此方法返回的结果与预期不符。所以有时它是错误的,尽管点在截锥体的中间......
我希望你能帮助我。
这是一个演示问题的小型测试程序。类 FrustumTest:
类截锥体:
c++ - 我是否正确计算了我的截锥体的属性?
我有一个基本的相机类,其中有以下值得注意的功能:
其中 paramszn
和zf
inSetLens
函数分别对应近剪裁平面距离和远剪裁平面距离。
SetLens
基本上创建一个透视投影矩阵,同时计算远近剪辑平面的高度:
所以,GetFarWindowHeight()
自然而然GetNearWindowHeight()
地返回它们各自的身高类成员值。然而,它们的宽度对应物返回各自的高度值乘以视图纵横比。所以,对于GetNearWindowWidth()
:
WhereGetFarWindowWidth()
执行相同的计算,当然替换mNearWindowHeight
为mFarWindowHeight
.
现在这一切都已经解决了,有些事情告诉我,我正在不正确地计算近端和远端剪辑平面的高度和宽度。特别是,我认为导致这种混乱的原因是我在 y 轴上以度数指定视场,然后在切线函数中将其转换为弧度。我认为这是导致问题的地方在于我的截锥体剔除功能,它使用近平面和远平面的宽度/高度来获取顶部、右侧、左侧和底部平面的点。
那么,我这样做完全错了吗?如果是这样,我应该怎么做才能修复它?
免责声明
这段代码最初源于一本 D3D11 书,我决定放弃阅读并回到 OpenGL。为了让这个过程不那么痛苦,我认为将一些原始代码转换为更符合 OpenGL 会很好。到目前为止,它工作得相当好,这个小问题......
编辑
我本来应该提到几件事:
这不是我第一次使用 OpenGL。我非常了解转换过程,以及 GL 和 D3D 之间的坐标系差异。
这不是我的整个相机类,尽管我认为在这种情况下可能有问题的唯一另一件事是使用我的相机
mOrientation
矩阵来计算外观、向上和右方向矢量,通过在 +x、+y 上转换每个矢量, 和 -z 基础,分别。因此,作为示例,要计算我的外观向量,我会这样做:mOrientation * vec4(0.0f, 0.0f, -1.0f, 1.0f)
,然后将其转换为vec3
. 我在这里所指的上下文涉及如何将这些基向量与剔除截锥体结合使用。
c++ - 为什么我的截锥体剔除不剔除某些角度?
我的截锥体剔除实现无法正常工作;发生的情况是当我将相机向左旋转而不是向右旋转时它会剔除。如果我向后移动相机,它也会“剔除”,尽管对象消失且未渲染的距离对此非常短 -6.0f
使用对象的中心(球体)和相机的位置时的单位计算距离。向上或向下运动/旋转并没有真正做任何事情。
我的投影远平面很高:500.0f
,我的近平面是0.1f
。当然,降低/升高远平面似乎并没有真正影响剔除。
代码
这是平面计算代码:
简而言之,首先计算远剪辑和近剪辑平面中心,然后计算平截头体两侧的四个角,以允许在planes
数组中设置点,如下所示。该planes
数组用于指代平截头体的 6 个面。
M_ComputePlane
计算平面的法线和到原点的距离d
:
以下是执行的交叉测试,每个测试都经过测试并且基本上产生相同的结果:
geometry - Directx 11 球体
我正在寻找一种使用directx 11显示大量球体的有效方法。球体由(x,y,z,r)
空间(x,y,z)
坐标和r
半径定义。我只想显示可以看到的球体,这意味着不会绘制不在视野中的球体和太小而无法看到的球体。但是,如果一组小于一个像素的球体至少和一个像素一样大,那么我想显示最主要的颜色。球体只有一种颜色和不同级别的透明度。任何帮助将不胜感激,不完整的答案是可以接受的。
opengl - glFrustum、gluPerspective 和 FOV
我有一个程序来做增强现实,我在 OpenGL 中使用:
没关系,我得到了很好的视角,并且我的 3D 对象很好地插入了我的照片。现在我希望能够放大/缩小。通常,它是通过更改 gluPerspective 中的 fov 来完成的,但我不使用 gluPerspective,因为我无法获得良好的插入。
使用http://dmi.uib.es/~josemaria/files/OpenGLFAQ/transformations.htm,问题“9.085 如何调用与我对 gluPerspective() 的调用相匹配的 glFrustum()?”,我尝试了:
void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);
void gluPerspective(GLdouble fovy, GLdouble aspect,GLdouble near, GLdouble far);
接着 :
但是我的对象被扭曲了,它没有在所有轴上正确缩放,没有保持比例。
那么我需要做什么/修改我的 glFrustum 参数以获得放大/缩小效果?