Articles of 平截头体

同样的维度感觉不管什么FOV

有没有人知道一个公式,方式,…让一个FPS玩家感觉像一个物体在不同的FOV上具有相同的大小(当然,这与它的距离相同)? 我知道这是不可能做到完美的,因为各种视场引起的失真和物体的位置(靠近FOV的边缘=更多的失真)。 让我们忽略这些扭曲,并针对直接在玩家面前的物体(如在FOV的正中间)的尺寸感觉相同。 为了进一步澄清事情:我希望我的游戏中有1个物体在不同的FOV上具有相同的比例感,而不是我的整个游戏世界。 我试过给它一个百分比的frustrum高度,但是这似乎并没有给我一致的结果。 注意:我在我的游戏中使用了垂直视野。

在无限的世界中绘制哪些部分?

我有一个无限的世界(来自Perlin Noise)。 世界是在那些立方体很大的部门产生的(上面的图像中的颜色是随机的,我的部门是10x10x10)。 我目前正在把扇区放在一个哈希表中,用左上角的坐标标记。 我可以遍历我已经生成的所有部门,看看他们是否相交的平截头体。 但是,我怎样才能计算我没有产生但是可见的,需要按需产生的部门呢? 即使我有一个八叉树或其他空间索引,我需要计算在视锥体内部可见的部分,而不是我已经生成的部分。

我如何为我的相机的平截头体构造飞机?

我试图去处理截锥体,但是我还没有完成。 我在三维空间有一个相机 Camera position (cx, cy, cz) rotation (tx, ty, tz) fieldofview near-plane far-plane 和一个包含我的大块地形的四叉树 Quadtree Chunk bottomleft (x, y) width length heightmap 目前,我正在渲染四叉树内的每个块。 不过,我想剔除相机平截头体六个平面以外的所有块。 我不确定如何: 根据相机类中的信息生成这些平面。 使用我的四叉树高效地testing相交。 如果四叉树的一个区域出现故障,请尽其所有的孩子(这似乎是合理的,我只是想确定)? 通过四叉树进行剔除的过程是什么? 使用飞机和我的地形块进行路口testing。 如何快速判断一个地形(y值不同的方形)是否位于6个摄像机平面内?

我的挫折扑杀是从错误的角度扑杀

我有一个问题,我的视锥细胞是错误的起源。 它遵循我的相机的旋转,但不是位置。 在我的相机类中,我生成一个视图matrix: void Camera::Update() { UpdateViewMatrix(); glMatrixMode(GL_MODELVIEW); //glLoadIdentity(); glLoadMatrixf(GetViewMatrix().m); } 然后使用投影matrix和模型视图matrix提取平面: void UpdateFrustum() { Matrix4x4 projection, model, clip; glGetFloatv(GL_PROJECTION_MATRIX, projection.m); glGetFloatv(GL_MODELVIEW_MATRIX, model.m); clip = model * projection; m_Planes[RIGHT][0] = clip.m[ 3] – clip.m[ 0]; m_Planes[RIGHT][1] = clip.m[ 7] – clip.m[ 4]; m_Planes[RIGHT][2] = clip.m[11] – clip.m[ 8]; m_Planes[RIGHT][3] = clip.m[15] – clip.m[12]; NormalizePlane(RIGHT); m_Planes[LEFT][0] […]

不对称观点

我正在构建一个插件组件,它将显示世界的合成3D视图(一种FLIR相机模拟)。 我面临的问题是,目前我正在使用对称的全景视图,并始终指向屏幕的中心。 我可以在垂直和水平方向上操作视野,但是我不能做的是从中心移动视点视图,以便我可以看到15度上下30度,而我的眼睛指向屏幕上的点位于视口顶部的1/3处。 下面是我想要实现的图像,假设眼睛在海平面上直视地平线。 我尝试了几种技巧,我试图按比例放大视口,然后增加FOVY,然后将视口夹在45度视角,然后我试着操纵相机,看下去15度,但结果都不令人满意,因为我的3D世界观的视界从来没有在15度上下30度的范围内,这是我的要求 我想正确的方法是定义正确的平截头体。 请确认是这种情况,以及如何设置它:假设:FOV = 64 FOVY = 45比例1:5近平面= 1远= 500000000.0

在世界空间glmmatrix中创建一个剔除视锥

我需要在界限框在世界空间的地方进行平截头体select,以确定哪些实体被更新/绘制。 我试图使用经典的投影/视图matrix平面提取方法,但它似乎不适用于由GLM创建的透视matrix。 这种方法适用于世界空间扑杀吗? 这似乎是(考虑眼睛的位置和投影matrix形状的平截头体)。 我只看过近/远的飞机提取到目前为止,他们是错误的坐在原点的平截头体(两个交stream分量是负面的,这意味着近和远都面临相同的方向)。 另外,由于d分量不能匹配near / far限幅值,所以这种方法对于世界空间剔除是错误的吗?

在XNA上优化最大性能“Frustum.contain()”?

我想知道是否有可能优化“BoundingFrustum”的性能,要求返回仅在玩家之前的地面上发现的可见元素。Checker,而不是不必要地遍布整个场地。 这幅图显示了一个地区250X250或62,500立方米! 我认为这将被优化,以计算该地区的一半“Fr”! 31'250立方或更less 这里我不完整的function: foreach (Octree.Node node in regions.Where( /* ? only before the player… */).Where(r => arcadia.camera.Frustum.Contains(r.boundingBox) != ContainmentType.Disjoint)) { } 这是我想要的更好的图片。 这里是我的游戏加载的世界的一个完整的例子! 每个地区有62,500立方米。 我的问题是,如果玩家看向另一个地区,我必须计算四个部分我的“Frustum”! 或4 * 62'50 = 250,000立方体。 而且每个调用我的函数'update()'

自定义3D渲染器:Frustum剪辑

我最近一直在玩弄从头开始创建一个3D渲染器的想法,并且在仔细观察之后,似乎并不像听起来那样是一个巨大的任务。 昨天晚上,因为我有很多的想法,所以我正在折腾和翻身,原本打算把整个渲染器从一个索引系统的基础上用向量列表来隐藏,我不需要那些点,但是抛出了窗口,我意识到我需要在主要呈现的优先顺序。 正如大多数基于3D的开发人员所知道的,所有的顶点都在视口周围移动 。 对于想要进行第三人/第一人称游戏的人来说,这是一场噩梦,因为如果你不了解半高级几何,那么你实际上已经搞错了。 我意识到人们最终必须知道他们的和他们的东西,但是我想通过使视口(matrix)在“世界”周围移动来释放这个负担。 这对于性能来说肯定更好,因为移动一个matrix必须更容易计算gpu / cpu。 我可能是完全错误的,但我想放弃这一点。 在我的脑海里, 各种各样的作品会产生一个“3D”世界。 在这一点上唯一阻止我跳入C ++和SFML / SDL的是我的程序的一个bug(或者技术上的“未实现的特性”)。 我想让我的渲染器工作的方式是这样的: 查找视口内的所有顶点。 (让我们称这些V []) 获取所有V []的深度信息 在特定的V []之间画线(在我的情况下,一个V将包含内存中下一个要连接的V的信息)。画线只用于debugging目的或者用于kewl 80的外观。 保存为多边形。 在poly边界内填充颜色/纹理以显示深度或devise。 我认为这应该起作用。 但有一个问题,这个问题是我发布这一切的原因。 假设我们有一个更大/不完全的视锥体,而相机没有看顶点,那么我们怎么会发现这里有一个“形状”。 我将在MS Paint中画一个蹩脚的例子来解释。 (没有人花时间为Photoshop ..) 任何帮助表示赞赏,并完全理解,如果我写的不'点击'。 谢谢!

在投影matrix中控制平截头的近平面和远平面的平面尺寸

我试图达到一个小车变焦效果。 我的第一个尝试是显而易见的,原来的“放大&放大”技术,很好地工作。 除了那些由于空间条件而不可能的情况(例如:靠近墙壁的摄像机) 如果拉回相机太多,可能会遮挡其他物体(红色区域)。 为了解决这个问题,我想我无法移动相机。 相反,我必须改变平截头,做一个更大的近平面和更小的远平面。 这样,可以在不移动相机的情况下控制效果。 我知道如何建立透视和正交投影matrix,我可以在它们之间进行插值(分别插入每个元素)。 这让我真的很接近解决这个难题。 现在唯一的问题是设置一个距离摄像机的距离,以保持我的锥体高度,有效地locking在一个对象/位置的焦点。 但我无法弄清楚这一点。 那么,有什么想法? 附加信息 这是我使用的matrix: 4×4 matrix for orthogonal projection 0 1 2 3 ———————————————– 0 | 2/(rl) | | | -(r+l)/(rl) | ———————————————– 1 | | 2/(tb) | | -(t+b)/(tb) | ———————————————– 2 | | | -2/(fn) | -(f+n)/(fn) | ———————————————– 3 | | | […]

查看Frustumselect

我正在开发一个模拟项目,这个项目要求我在3D世界中有实体。 我有所有这些工作,matrix转换等等。我现在正处于我需要的视角,所以我可以给每个实体一个可见的区域。 但是,在查看所需的计算结果时,似乎只需要能够将其投影到2D屏幕上即可。 是否还有另外一种更容易编码的解决scheme,它能更好地发挥作用,例如正交视角? 我可以用math方法定义一个形状,并testing物体的坐标是在里面还是外面? 我不是一个真正的三维编码器(我从头开始,不使用引擎或任何东西),所以我想为我的需要最简单的解决scheme。 谢谢!