Articles of 截锥体

如何管理平截头剔除

我有一个基于球形剪贴图的行星地形。 整个行星是由一个单位的环形几何形状组成,顶点着色器移动以覆盖整个600万单位半径的行星。 但是,只要这个几何体的起点不在相机的视野中(这是行星的99.9999%),就会被剔除。 什么是最好的解决scheme,以确保即使原来的网格是不可见的行星是可见的? 这是基于WebGL和Three.js 。

在基于瓦片的延迟着色中平铺平截头体生成问题

我刚刚学习基于瓦片的延期着色,并find了Andrew Lauritzen的伟大文章 。 我也检查了源代码,这真的很有帮助。 但我仍然有一些关于tile平截头体构造的代码的困惑: // Work out scale/bias from [0, 1] float2 tileScale = float2(mFramebufferDimensions.xy) * rcp(float(2 * COMPUTE_SHADER_TILE_GROUP_DIM)); float2 tileBias = tileScale – float2(groupId.xy); // Now work out composite projection matrix // Relevant matrix columns for this tile frusta float4 c1 = float4(mCameraProj._11 * tileScale.x, 0.0f, tileBias.x, 0.0f); float4 c2 = float4(0.0f, -mCameraProj._22 […]

停止渲染隐藏的对象libgdx

我目前正在隐藏不在视锥体视图中的对象。 但是,仍然有一些对象呈现在视锥体视图中,但是隐藏起来。 我的目标是不呈现根本看不到的对象,而不是呈现在POV中但隐藏的对象。 让我更好地解释。 有三个方框,即方框A,方框B和方框C.它们都在x轴上alignment,但方框C的y值比其余的方框大。 那么如果我直视C框,我只会看到C框,但A框和B框仍然在渲染中。 我想知道是否有一种方法可以用来不呈现隐藏在其他对象之后的对象。 谢谢先进的Jedi。

定向轻视图平截头体稳定

基于场景对象(包围平截头体)计算定向光视锥体导致CSM和非CSM渲染代码path中相机移动的明显场景抖动。 什么是减less或消除这些抖动文物的技术?

让一个相机的平截头体相交

目前,我正在努力解决两台相机渲染输出的问题。 一台摄像机渲染正交2D对象(例如,面对X / Y平面),另一台渲染3D对象叠加在2D输出的顶部。 3D相机是一个正交相机旋转30度,以匹配3D物体和2D瓦片的外观。 汽车是3D物体,背景放在X / Y平面上。 现在,当相机向上/向下移动时,会出现麻烦。 由于三维相机的30度旋转,我不能让他们的视锥体重叠完美。 这导致3D内容移动比2D内容快一点,导致这个图像(当我移动我的相机上/下): GFYCat样品 正如你所看到的,汽车的顶部和街道之间的距离已经不一样了。 我的问题是,如何使3D相机的平截头体与2D相机相匹配,但同时包括3d度旋转。 如果有人能指出我的方向是正确的,那就太好了。 欢呼菲利普

平铺延迟呈现平截头体计算问题

我知道有很多教程如何用计算着色器来创建平铺的平截头体,但是我正试图理解这些步骤,并且希望用纯C#代码在CPU上构建它。 我翻译了一大堆的英特尔方法(可以在intels post中find:延期渲染当前和未来渲染管道,对不起,我必须赢得更多的声誉来链接)到C#代码,这是一个艰苦的工作,因为我不是熟悉计算着色器。 所以现在我得到了algorithm的一些问题。 即使灯光的AttenuationEnd(或球体半径)设置为<0,1,单个灯光也包含在很多贴图中。 这似乎没有效果。 (下面的图片显示了每个瓦片的光线信息) 白色:没有光的瓷砖| 红色:与光的瓦片 如果从角落计算平截光线,我不会得到正确的结果。 下图显示了原点为0,0,0的部分渲染(从5到5.1)光线。70度fov的每块瓷砖之间是否应该有更多的空间? 这是我正在使用的代码。 如果可能的话,我注释了一大堆东西,也带有debugging信息。 vec4[] frustumPlanes = new vec4[6]; // There is 1 light with following properties: // Position : 5, 5, 5 // AttenuationEnd : 0.1 (should fit inside some frusta) // Use a simple 70 fov (70 / 180 * PI) perspective setup. // […]

遏制剔除需要年龄c ++

我有两种方法从不同的networking来源获取平截头体。 第一个需要200ms检查10k AABBs,第二个50ms左右的箱子数。 我读了一些论坛的答案,人们说10万的0.5毫秒是可以的,但是我完全离开了这些数字。 那么我做错了什么? 在这里测量时间: auto frustum = camera.getFrustum(); //frustum auto n = frustum.pNear; auto f = frustum.pFar; auto e = frustum.pExtra; ArrayList<Pair<vec3, vec3>> planes; ArrayList<vec3> v1; n.genVertices(v1); ArrayList<vec3> v2; f.genVertices(v2); planes << Pair<vec3,vec3>(v1[0], -n.genNormal()); planes << Pair<vec3,vec3>(v2[0], n.genNormal()); for(size_t i = 0; i < 4; i++) { planes << e[i]; } //frustum planes […]

相机截锥计算出错了

我正在计算一个点光源的6个方向的视图/投影/视锥体,而且我沿着Y轴指向视图时遇到了麻烦。 我们的游戏使用了一个右手的Y-up系统。 对于其他4个方向,我使用(0,1,0)作为向上vector创建LookAtmatrix。 显然,当沿着Y轴观察时,这是不起作用的,因此对于那些我使用向上( – 1,0,0)向量为-Y和(1,0,0)为+ Y的向量。 视图matrix似乎正确地出来了(并且投影matrix总是保持不变),但是边界的平截头体是绝对错误的。 任何人都可以看到我做错了什么? 这是我正在使用的代码: camera.Projection = Matrix.PerspectiveFovRH((float)Math.PI / 2, ShadowMapSize / (float)ShadowMapSize, 1, 5); for(var i = 0; i < 6; i++) { var renderTargetView = shadowMap.GetRenderTargetView((TextureCubeFace)i); var up = DetermineLightUp((TextureCubeFace) i); var forward = DirectionToVector((TextureCubeFace) i); camera.View = Matrix.LookAtRH(this.Position, this.Position + forward, up); camera.BoundingFrustum = new BoundingFrustum(camera.View * […]

如何正确设置“近”值?

通常情况下,相机的0.1f设置为0.1f 。 然而,这(假设1.0f = 1 metre )使距离相机不到10 cm距离看不见。 另一方面,当工作与大开放地形太小near价值的结果(是的,这是一个沙质海岸和水:P): 而不是这个: (显然,当太物体之间的距离差异太小时,就会产生伪像,我猜测精度有些问题,显然精度取决于相机的near值。) 我的问题是 – 是否有可能设置像0.001f东西near价值,并没有得到上述文物?

摧毁代码结构

我在我的游戏引擎中添加了平视显示器,但是我有一些关于平截头体和相机的devise问题。 如果平截头体是相机的成员,反之亦然? 相机是否应该由平截头体构成,或者相机是否构建并保持自己的平截头体?