问题标签 [culling]
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 - 3D 物体在远处没有处于正常形状
我正在开发一个由其他人早些时候开发的游戏。我面临一个问题,当玩家(带摄像头)开始在路上奔跑时,建筑物并没有以正常的形状出现,而当我们向前移动(更靠近建筑物)时,它们会恢复原来的形状,有时相机看不到道路两侧的建筑物(空旷的空间),当我们靠近建筑物时,它会突然作为可见物体出现。我认为这可能是一些 unity3d 设置问题(渲染、相机或质量)。可能是因为提高了移动设备的性能。
任何人都可以知道可能是什么问题或如何解决它。
任何帮助将不胜感激。提前致谢
3d - Google Earth / Processing.js - 使用 3D 投影实现反向剔除
我目前正在开展一个项目,该项目旨在使用 Google Earth API 将现实世界的数据映射到 Google Earth 地球上。大佬们要求比插件提供更苛刻的视觉效果(即花哨的线条、图像和形状,随着时间的推移会产生不同的不透明度填充),所以我们决定使用 Processing.js 语言来处理事物的图形方面。
目前,我在后台建立了 GE 插件。Processing.js 草图直接位于其上方的 canvas 元素中,该元素具有 CSS 规范:pointer-events: none(即,这允许鼠标与插件交互,而写入 Processing 草图的任何内容都会显示在最佳!)
我的问题涉及 3D 投影。当图形在 GE 中显示时,该插件能够处理背景中所有令人讨厌的矩阵变换(这意味着如果你在 GE 中将一个点放置在 lat:90, lon:0, 无论你如何在地球上移动,该点将保持在北极上方)。在处理覆盖中,我试图模拟这一点。
和。很多。困难。
Google Earth ge.getView().project(lat, lon, alt, altMode)函数是我目前用来将 3D 纬度/经度点投影到 2D 坐标中的函数(然后使用在返回的点在屏幕上绘制一个椭圆加工)。您可以在下面看到:
您会注意到红色和黄色椭圆实际上是地球后面的点。这是我的问题,我迫切需要一些建议/帮助。使用 GE 插件实现反向剔除的最有效方法是什么,以便 Processing.js 在环绕地球的“背面”时不会绘制椭圆。我的脑筋急转弯是我仍然想保持在 X、Y 和 Z 方向上绕地球旋转的能力(即不限制视口)!
感谢堆栈溢出!
java - Libgdx 视锥体剔除在 actor.draw() 中
我正在使用 libgdx 开发一个小游戏。这是一个 2D 自上而下的游戏,上面有一些大地图和许多对象。所以我只想在我的视锥中渲染东西。我看过camera.frustum.***inFrustum(Paramter... p)
. 但是我使用的是scene2d,并且我在中设置了相机Stage
,将SpriteBatch
s投影矩阵设置为,camera.combined
并且我Actor
的s在覆盖的draw(SpriteBatch batch)
方法中绘制了它们自己。我如何访问camera
那里的视锥体?有没有办法从 spritebatch 中得到它?还是有另一种方法来实现视锥体剔除?
unity3d - Unity3D - 不在区域内渲染三角形
我有这个问题,即完美对齐的网格的侧面在某些角度变成黑点和黑线。该问题是由网格的侧面引起的,通过网格的正面可见。
因此,如果我可以对构成网格侧面的三角形进行一些剔除,那就太酷了(我想我放置一个不可见的碰撞盒,并指示统一不要在碰撞盒内渲染任何三)
但是,我不能为我的生活找到一种方法来做到这一点(最好在运行时也是如此!)
Unity 证明这是可能的,因为相机的 FAR 和 NEAR 剪裁平面使用了这种技术(如果我将 FAR 平面设置在墙的前面后面,侧面停止渲染,黑点和黑线消失)所以我我确信我们必须能够做到这一点。
有人知道我可以尝试什么吗?
在此先感谢,笑脸
java - Libgdx ModelBuilder.createRect 仅从一侧可见
在我的第一个 libgdx 3D 游戏中,我现在从 切换createBox
到createRect
,只创建可见的面(如果一堵墙在另一堵墙的左侧,它的右侧是不可见的......)。我正在创建 4 个模型:
frontFace
backFace
rightFace
leftFace
他们几乎按照他们实际应该的方式绘制。但是有一个大问题:只有正面看才能看到侧面z-Direction
。如果我看另一边(负面z-Direction
),他们不会画画。如果我消极地看待它们,正面和背面只会画出来x-Direction
。这和正常人有关系吗?我已将它们设置为:
那是错误吗?我应该如何设置法线?他们代表什么?我对光照的法线贴图有一些基本的想法,是一样的吗?
重要提示:我禁用了背面剔除,但没有任何区别。视锥体剔除已打开。如果需要更多信息,请发表评论,我会尽快添加。谢谢
c++ - 沿窗口顶部的 SDL 屏幕渲染位置错误
我正在使用 SDL 2.0 和 C++ 制作一个自上而下的等距游戏,但遇到了一个小故障。
当使用该SDL_RenderCopy
函数将纹理渲染到屏幕上时,纹理顶部碰到屏幕顶部的那一刻,它会被向下推一个像素,从而导致下图所示的缺少边框:
以下是我特定于世界本身的渲染函数,因为世界的渲染与游戏中的其他一切都不同,因为我只是复制“源”纹理而不是为游戏中的每个图块加载纹理,这将是荒谬的低效。
我还按如下方式合并了相机平移(由于我的游戏的面向对象设计,我的相机平移逻辑跨越多个文件,因此包含一些代码片段):
(上面的代码立即在下面继续)
我对为什么会发生这种情况感到困惑,因为无论我是否包含我的简单剔除算法(如下所示),都会出现相同的结果。
(上面的代码立即在下面继续)
3d - 从相机旋转查看平截头体平面
我正在尝试通过旋转点并检查它们是否在相机前面(具有球形物体的半径)来执行视锥体剔除。远近的顶部和底部平面工作正常,但是当摄像机角度 camRot.y 不接近 0 时,左右并没有像应有的那样剔除。
当我旋转平面以匹配视锥体时,问题就出现了,旋转的平面最终围绕错误的轴旋转。(当我向下看时,左右平面的法线向量与近平面的方向相同)。
我不确定这个问题是否有一个简单的解决方案,但由于它接近工作,我希望我不必像我发现的一些教程那样重做。
需要做的是确保在向上或向下看时,额外的(FOV_X / 2)旋转与相机正确旋转,但我无法理解如何。
此外,所有 cos 和 sin 计算都是每帧完成的,只是将它们移到代码中以显示完成了什么。
如果我的帖子/代码难以理解,我很抱歉。
我现在可以正常工作了,至少看起来可以正常工作。我当前的代码(几乎)。FOV_X 和 FOV_Y 是常数,取决于 fov 和纵横比。
java - 使用 Libgdx 进行高效的 3D 块渲染
首先,我对 3D 编程和 libgdx 很陌生。我看了一些教程,我已经渲染了我想要的场景。我有一些 1x1x1 块,ModelBuilder.createRect()
为每个可见面创建,所以如果另一个块覆盖这个块的一个面,则没有为这个块创建矩形。也不需要顶部和底部矩形,因为我永远看不到它们(除了地板)。所以我想,这非常有效。我也Backface culling
启用了,我也启用了Viewfrustum culling
。但是,如果我朝一个方向看,我的视锥中有很多块,FPS 会下降到 15-20。这对我来说仍然没问题,因为我的笔记本电脑已经使用了 5 年以上,而且它的性能并不是最好的,但这个答案让我思考。
“模型构建器仅用于调试”。好的,但是我应该如何创建我的盒子?为什么我应该Model
在建模应用程序(如 Blender)中为简单的正方形创建一个?通过这样做,我什至无法剔除被其他块占据的面。所以我的问题是:我怎样才能以最有效的方式创建和渲染这些盒子?
java - 使用 LWJGL 进行 OpenGL 平截头体剔除
我目前正在使用 LWJGL 编写体素引擎,我想优化 fps。你能解释一下如何确定一个块是否在相机的视野中吗?我拥有的信息是 cubeX、cubeY、cubeZ、cameraX、cameraY、cameraZ、cameraPitch 和 cameraYaw。
javascript - 体素世界中的“剔除”
我有一个充满体素的世界,可以说我的世界是 320*320*96 体素。我的想法是将整个世界加载到我的视频卡的内存中,这样在将新“块”传输到 GPU 时不会损失任何性能。为显示体素世界而生成的面数应该很容易适应现代显卡的内存。
但是,我现在面临的问题是如何不显示该世界的某些部分,我想将这个世界的视图限制为(例如)128*128*96 并移动世界或相机以显示不同的部分。
为了演示我的问题,请看一个(简单)场景,该场景由白色的“可视”区域组成,我正在寻找正确的 WebGL/three.js 函数来将视图限制在白色部分。