问题标签 [level-of-detail]

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 投票
8 回答
4377 浏览

3d - 远距离 3D 对象渲染 [游戏]

技术背后的基本前提是什么,例如在 Oblivion 中发现的(以及其他游戏,我敢肯定;还没有玩到足够知道),当您从远处观看时,远处的物体会模糊地显示出来?例如,一座大塔在一英里外,你会看到它的模糊矩形从地平线上伸出来……显然,一个巨大的 3D 场景无法全部渲染,我知道在高度图的情况下,只有近似算法用于降低远离相机的高度图质量,但对于特定对象,显示它们的最佳方式是什么?

我在想可能是一种预渲染技术,您可以选择景观周围的特定位置,然后制作一个程序,在该位置周围绘制所有高度图和 3D 模型并拍照。它将拍摄几张照片,然后当玩家靠近该地点时,这些照片将用作天空盒。

另一种更明显的技术是存储非常粗糙的 3D 模型,但是 3D 渲染系统如何专门选择渲染建筑物的粗糙模型而不是其他不太重要的粗糙模型(并且可能无法从中查看-距离)物体?你将如何将这样的东西与你的高度图一起存储?也许按照设计,只有几个如此重要的地标,然后将它们的列表存储在一个小文件中,并在每一帧上渲染小于 x 的那些真正远距离的地标?

我知道 Halo 系列选择将游戏分成关卡,然后每个关卡都有不同的手工制作的天空盒。这就是我在第一个建议中想要的,但我不确定。我想我真的只是想在我的想法中收集其他想法或改进或问题,以便我可以用我有限的时间和知识选择哪些原型。

另一个相关主题是如何在远处显示山脉,因为它们将是高度图的一部分,而不是顶部的 3D 模型,因此它们实际上无法提供粗略的版本,并且高度图近似算法可能会出错从那样很远的距离上山(假设您甚至会尝试近似和渲染如此遥远的几何图形,而您可能不会这样做)。如果您在答案中也涵盖了这一点,则可以加分。:)

谢谢!

PS我正在使用OpenGL。我只是在寻找基本概念,但如果您选择发布示例代码,请使用 OpenGL 函数和术语!:)

编辑:感谢您的回答!出于文档目的,我发现了另一个资源:Game Programming Gems 2 中的第 4.9 章涵盖了将远处风景渲染到天空盒的概念:http: //books.google.com/books ?id=1-NfBElV97IC&lpg=PA416&ots=SOpnfijZly&dq= render%20distant%20to%20skybox&pg=PA416 (不幸的是,预览只是本章的第一页......我必须在八月份回来后尽快从我大学的图书馆里拿那本书)

同样在阅读了这些内容之后,我仍然认为 LOD 适用于距离仍然相当近的物体。如果对象甚至没有一个像素大,但您仍在将它们提供给显卡,那么无论是否使用 LOD,您都只是在浪费能量。除了绝对最大的遥远物体之外,其他一切都是如此。在大多数情况下,一些高楼和一些山脉,但从这么远的距离看不到小细节模型(灌木,甚至树木,岩石,任何其他风景......)。所以我很喜欢渲染到天空盒的技术,当我到达这座桥时,我就是这样过桥的;我会确保对所有模型都使用 LOD,我只是不会渲染这样的距离。

顺便说一句,我更多地是按照 Oblivion 游戏的思路思考,所以答案可能取决于游戏类型。

0 投票
8 回答
14198 浏览

algorithm - 减少直线上的点数

我正在寻找算法来减少节点的折线、线(循环或不循环)的 LOD。简而言之,我想获取高分辨率的海岸线数据,并能够将其 LOD 降低数百或数千倍以进行小规模渲染。

我发现了多边形缩减算法(但它们需要三角形)和拉普拉斯平滑,但这似乎并不是我所需要的。

0 投票
2 回答
3128 浏览

algorithm - 2D 细节层次 (LOD) 算法

我一直在网上寻找一种算法,该算法使您能够创建 2D 多边形的细节层次 (LOD) 表示,但找不到任何合适的参考。也许我使用了错误的搜索词,但所有搜索结果都是针对 3D LOD 算法的,我猜这不能(?)真正应用于 2D。

我敢肯定,在 3D 图形的冲击之前,很多人会研究 2D LOD 算法。任何线索或指示我可以在哪里获得更多信息?谢谢!

0 投票
1 回答
871 浏览

sql - 对绘图的 SQL 存储数据进行二次抽样

假设您有一个程序每 30 秒将 (timestamp, stock_price) 记录到 SQL 数据库,并且您想要生成不同时间尺度的股票价格图。如果您绘制 1 小时范围内的测量值,则可以使用在此期间采集的所有 120 个样本。但是,如果您想绘制 1 年范围内的价格,您显然不想从数据库中提取超过 100 万个样本。最好从数据库中提取一些有代表性的样本子集。

这让我想起了计算机图形学中的细节层次技术——当你远离 3d 模型时,可以使用模型的低保真版本。

是否有表示数据库中详细信息级别信息的常用技术,或用于快速查询均匀分布的数据子集(例如,给我 2009 年 1 月的 100 个均匀分布的样本)?


到目前为止,我提出的解决方案是在数据库表中包含一个 level_of_detail 列。如果 level_of_detail=0,则该行包含一个瞬时样本。如果 level_of_detail=n,则该行包含最后 (sample_interval*(2^n)) 秒数据的平均值,并且此级别的行数为 1/(2^n)。该表在 (level_of_detail, timestamp) 上有一个索引,当您想要生成绘图时,您可以根据您想要的样本数量计算适当的 level_of_detail 值并使用该约束进行查询。缺点是:

  • 对于 N 个样本,该表需要存储 2*N 行
  • 客户端必须知道指定适当的 level_of_detail 约束
  • 当样本被添加到表中时,一些进程需要负责构建平均行
0 投票
0 回答
139 浏览

c++ - 如何给一个网格,像自发光一样的顶点?

我们如何给任何复杂的网格,像自发光这样的顶点。我尝试增加光环境,材料环境,但一旦它走远它就开始消失。我希望它在任何距离都能看到。我尝试从圆柱体中获取顶点,然后将颜色放入其中,对颜色效果很好,但在远处失败。

看看这里也看看这个

0 投票
3 回答
2857 浏览

algorithm - 来自两个输入的伪随机数生成器

我需要一个伪随机数生成器,它从浮点类型的两个输入中为我提供范围 [-1, 1](范围是可选的)中的数字。

我还将尝试解释为什么我需要它:

我正在使用Diamond-Square 算法为我的地形引擎创建高度图。地形被分割成块(Chunked LOD)。

Diamond-Square 的问题在于它使用随机函数,所以假设两个相邻块共享相同的点 (x, z),那么我希望它们的高度相同,这样我就不会出现裂缝影响。

有人可能会说我可以从邻居补丁中获取高度信息,但是在首先创建补丁之后结果可能会有所不同。

所以这就是为什么我需要一个伪数生成器,它在给定两个输入(x,z)的情况下返回一个唯一的数字。

(我不是要求某人编写这样的函数,我只需要一般反馈和/或执行类似操作的已知算法)。

0 投票
1 回答
2917 浏览

opengl - 实现 OpenGL 的细节层次算法

我正在尝试实现以下算法(打破画成小三角形),但我在网上找不到任何能正确解释它的教程,我发现的大多数东西都在理论上解释了它,样本也太理解起来很复杂,因为它们包含许多其他东西。

如果您能指出它是如何完成的或类似的事情,我将不胜感激。

0 投票
0 回答
3571 浏览

3d - 如何实现多边形缩减算法?

几天来,我一直在尝试阅读有关以下算法的一些内容,但我发现它很难理解。我设法找到了一些代码示例,其中最著名的是兔子示例。http://www.melax.com/polychop

我的问题更像是指导。我知道这都是关于将我的模型分成小三角形,但我不太确定如何准确地做到这一点。从庞大而爆炸性的代码片段中找出它也无济于事。

如果你能告诉我如何做的步骤,我将不胜感激。

0 投票
1 回答
70 浏览

c - 以不规则速率存储 2d 数据

这是一个地形生成和渲染程序。

我有一个看起来像这样的循环:

它应该在不同的分辨率下找到一个半随机的高度值:近处分辨率更高,远处分辨率更低。

之后,

这应该是渲染代码(当然是伪代码)。我必须指定每个点的坐标。我真的很想在这里使用三角形带,所以我需要让一个带中的所有点彼此跟随。

我的问题来了:我如何存储这些积分?在 python 中,我会创建一个列表,然后只渲染列表中的所有内容。问题是这是在 C 中,数组不是动态的。所以我需要一个尺码。我怎么知道那个尺寸?如何以智能的方式循环遍历它(因为它具有可变宽度)?以及如何防止像一行的末尾与另一行的开头连接之类的东西?

还是我做错了整个事情?

0 投票
1 回答
807 浏览

graphics - Ogre material lod:我该如何设置?

我有一个 Ogre 材质,因为我对 GPU 过滤不满意,所以我想做一个手动 mipmapping,即我创建所有纹理,然后我设置一个基于 lod 的策略来加载正确的纹理。

问题是:我使用哪种策略都没有关系,lod_value 也不重要,我的材质不会改变纹理。我应该怎么办?我正在阅读手册,但它确实没有帮助。

这是我的代码: