- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
只是寻找一些一般性指导,自从我摆弄任何 3D 东西以来已经很长时间了,如果你原谅这个可怕的双关语,景观已经发生了很大变化。
我有许多高度详细的 3D 模型(每个模型有 300 万多个面),这些模型是根据现实世界的地形扫描生成的,需要在浏览器中渲染。它们是“不规则的”,无法从网格/DEM 或任何东西渲染。
我已将模型划分为较小的对象,并为每个对象生成 LOD(3 个级别),这会生成一组公共(public)顶点和三个索引缓冲区,这些索引缓冲区引用我逐步流式传输到 JS 客户端的部分或全部顶点。
我打算通过根据距相机的距离指定每个对象的 LOD 来渲染一帧 500k - 1M 多边形之间的某个位置。
所以我的问题是,如何在这些级别之间有效地切换?
我尝试过一种简单的方法,当数据发送到 GPU 时,它会自然地在帧速率中产生颠簸和故障。但我一直在寻找一种方法将所有数据(顶点和三个索引缓冲区)发送到 GPU 内存,然后告诉它使用特定索引缓冲区(例如低分辨率缓冲区)进行渲染,然后切换到中或高当相机靠近时,res 缓冲区。
Three.LOD() 解决方案对我来说似乎没有任何用处,因为它只会产生与我的幼稚解决方案相同的 fps 故障。
希望得到一些指导,无论多么笼统。干杯!
最佳答案
您希望根据距相机的距离高效、平滑地改变对象的细节层次 (LOD)。
根据您的用例,一种解决方案是为每个对象创建一个包含所有三个细节级别的 BufferGeometry
。换句话说,您将使用“索引”缓冲区几何图形,指定共享顶点数组,并将三个索引数组连接成一个。
然后,设置 BufferGeometry
的 drawRange
属性以渲染所需 LOD 的面。
geometry.setDrawRange( startIndex, count );
几何图形将被推送到 GPU 一次,更改 LOD 只需更改 drawRange
即可,这是一个统一的,应该是丝般光滑的。
三.js r.75
关于three.js - Threejs 中细节级别 (LOD) 网格的 3D 渲染性能/管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36613604/
我无法引导 LOD 组,因为我想知道我在屏幕上看到的当前事件 LOD 级别。我只能通过 访问百分比 GameObject.GetComponent().GetLODs()[size].screenRe
我有一个对象。高度图。 (忽略旗帜和水 - 我们有想象力,对吧?;)) 但是,问题是我将其显示为单个显示列表。因此,我无法“检查 map 与玩家的距离”,也无法使 map 变得不那么详细,因为我只能将
我正在尝试构建一个四叉树,它根据位置和最大深度分割区域。我想用它来实现地形的细节层次。换句话说,我有一个位置(x,y),一个区域(x,y,宽度),并将其传递给某种方法 build(region,pos
GL_TEXTURE_MIN_LOD、GL_TEXTURE_MAX_LOD 和 LOD_BIAS 如何工作? 为了直观地检查它,我使用 mipmapping 创建了 6*6 纹理,并且 MIN_LOD
假设我有一些 Foo 类 class Foo { protected String x = "x"; public String getX() { return x;
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我有一个非常大的地形网格(高度图),我希望能够将其分成更小的 block ......阅读帖子和文章后,我发现了关于地形 LOD 的内容: No you don't. In your typical
函数方法glTexImage2D将“level”作为参数,表示细节级别偏差。但是,可以使用 glTexParameteri 和 GL_TEXTURE_LOD_BIAS 目标来设置纹理的 LOD 偏差。
当我的纹理 miplevel 改变时,必须有一些设置来调整角度......不是吗? 当我的相机以 10 等角度或 0 角度直视道路时,miplevel 变化真的很早,看起来真的很难看。 神奇的一行代码
我正在使用带有 VBO 和索引等的现代 OpenGL。 首先我从高度图加载地形,然后我把它分成 block (在我的例子中是 128x128)我将所有顶点加载到 VBO(对于每个地形 block )然
我一直在网上寻找一种算法,使您能够创建 2D 多边形的细节层次 (LOD) 表示,但我无法找到任何合适的引用。也许我使用了错误的搜索词,但所有搜索结果都是针对 3D LOD 算法的,我猜,它不能(?)
我希望使用 LODS 操作码将双字节从 FS 加载到 eax。 与 LODS 一起使用的默认段是 DS,我希望用 FS 覆盖它。 如何使用 MASM 操作码来做到这一点? 00000000 (02)
换句话说,在任何情况下我可能需要这个指令吗? 从英特尔说明手册中,这是指令的作用: Load (E)CX bytes from DS:[(E)SI] to AL. 以 NASM 中的以下示例为例: s
我知道在 DirectX 11 中您可以对 LOD 使用出色的曲面 segmentation 功能,但知道 DirectX 9 没有此功能,我将如何为我的 3D 应用程序/游戏中的模型创建 LOD 以
虽然我理解 LOD 的概念,但在实现它时遇到了一些麻烦。假设我有许多不同 LOD 的模型,我想将它们存储在我的 Mesh 类中。我需要更改什么(我已经有一个支持一种模型的网格)。我是否有多个 VBO(
我正在用我目前在 Metal 中使用的应用程序的 Android 版本重写一个 OpenGL 过滤器。它使用以下纹理查找函数:vec4 texture2D(sampler2D 采样器,vec2 坐标,
我已经使用四叉树在我的图形引擎中实现了一个基本地形,现在我遇到了修复 T 型路口和裂缝的问题。首先,我使用的是 OpenGL 3.2,所以我无法使用 tesslation。也许我会在不久的将来实现这个
我正在使用 STL 加载器将 STL 文件加载到 three.js 场景中。这些 STL 文件的范围从 5mb 到 50mb。 有没有一种方法可以让我在模型加载时逐步加载/流式传输/增加细节级别(不确
在 GL ES 2.0 中,texture2DLod 函数在片段着色器中不可用。我需要移植 GLSL 着色器。 在 GL ES 2.0 中我只能使用texture2D(sampler2D sample
我正在 Unity 中处理一个项目,在放置树木的过程中,控制台日志中弹出以下错误: LOD code supposed to be unreachable. 下面的文字说: UnityEditor.D
我是一名优秀的程序员,十分优秀!