问题标签 [heightmap]

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 投票
2 回答
3785 浏览

webgl - 置换贴图UV贴图?

概括

我正在尝试将置换贴图(高度贴图)应用于一个相当简单的对象(六边形平面),但我得到了一些意想不到的结果。我正在使用灰度,因此,我的印象是我的高度图应该只影响我的网格的 Z 值。但是,我创建的置换贴图在 X 和 Y 平面上拉伸了网格。此外,它似乎没有使用我创建的所有其他纹理都成功应用到的 UV 映射。

模型和 UV 贴图

这是我的六边形网格及其在 Blender 中对应的 UV 贴图的参考图像。

六边形模型和 UV 贴图

漫反射和置换纹理

这些是我通过 Three.JS 应用到我的网格的漫反射和置换贴图纹理。

六边形漫反射和置换纹理

渲染

当我在没有置换贴图的情况下渲染平面时,您可以看到六边形平面保持在线条内。但是,当我添加置换贴图时,它显然会影响顶点的 X 和 Y 位置,而不是仅影响 Z,从而将平面很好地扩展到线条上。

六边形平面渲染——带和不带置换贴图

代码

这是相关的 Three.js 代码:

假设

我目前正在考虑为什么这可能会出错的三种可能性:

  1. UV 贴图不适用于我的置换贴图。
  2. 我错误地制作了置换贴图。
  3. 我错过了将位移锁定为仅 Z 的过程中的关键步骤。

当然,秘密选项#4 以上都不是,我真的不知道我在做什么。或上述的任何混合物。

现场示例

您可以在此处查看实时示例。

如果有对此主题有更多了解的人可以指导我,我将不胜感激!

编辑 1:根据建议,我已经注释掉computeFaceNormals()computeVertexNormals(). 虽然它确实略有改进,但网格仍在变形。

0 投票
1 回答
5620 浏览

terrain - 调整六边形网格的高度图生成

目前我正在做一个小项目,只是为了一点乐趣。它是一个使用 OpenGL 的 C++、WinAPI 应用程序。

我希望它会变成一个在六边形网格上玩的 RTS 游戏,当我完成基本游戏引擎后,我计划进一步扩展它。

目前,我的应用程序包含一个包含顶点和高度图信息的 VBO。高度图是使用中点位移算法(菱形)生成的。

为了实现六边形网格,我采用了这里解释的想法。它向下移动正常网格的奇数行,以允许相对容易地渲染六边形而没有太多进一步的复杂性(我希望)。

几天后它开始聚集在一起,我添加了鼠标选择,这是通过以独特的颜色渲染网格中的每个十六进制来实现的,然后在此 FBO 中对给定的鼠标位置进行采样以识别所选的 ID单元格(在下面屏幕截图的右上角可见)。

在此处输入图像描述

在我项目的下一阶段,我想看看生成更多“可玩”的地形。对我来说,这意味着每个六边形的形状应该比上图中看到的更规则。

所以终于说到我的意思了,有没有:

  • 一种在我当前的方法中平滑或调整顶点的方法,它将六边形的所有点都带到一个平面上(共面)。

编辑:对于任何寻找有关如何使点共面的信息的人来说,这是一个很好的解释

  • 一种更好的程序地形生成方法,可以更好地控制这类事情。
  • 一种以不同方式表示我的顶点信息的方法,允许这样做。

需要明确的是,我并不是想实现一个带有凸起边缘或平台的平面六角网格(如下所示)。

这里)

我希望所有几何图形都加入并引导到下一个位。

我希望实现与我现在所拥有的类似的东西(相对较好的起伏山丘和地形),但具有更可控的高原。这给了我稍后关闭区域(无法播放的瓷砖)的灵活性,如果需要,我可以在其中添加更高细节的网格。

欢迎任何反馈,我将其用作学习练习,所以请 - 欢迎所有评论!

0 投票
1 回答
558 浏览

compression - 如何压缩我可以获得高度图?

我一直在玩简单的地形生成(菱形正方形算法),我开始思考我实际上能做到多大。

如果我想生成一个大陆,那么一个1000 by 1000 km正方形就足够大了,但如果我还想要高分辨率,它很快就会产生巨大的文件大小。1000 by 1000 km = 1万平方公里,如果我每米存储一个点,那么每平方公里就是一百万平方米。

如果我使用无符号短裤(最大海拔 10,000 米)并且我的数学计算正确,那就是 2TB 的数据。当然,我不能一次将它们全部存储在 RAM 中,但即使 HDD 空间每天变得更便宜,2TB 的高度图也不实用。

我开始考虑压缩数据,但我以前从未做过压缩,也不知道我能把它缩小多远,如果它从 2 变为1.9 TB,那就不值得了。哪些压缩方法在不丢失数据的情况下效果最好?

我愿意减小高度图的大小和分辨率,但我想让它尽可能大。

0 投票
1 回答
698 浏览

c# - 在一个球体 C# 上的高度图上查找高度

我正在寻找一些数学帮助。我有一个游戏是生成 2D 高度图,然后使用长度/方向公式在球体上拉伸。现在我需要知道如何计算高度图上两点之间的高度。

我知道的:

  • 保存高度图的数组
  • 我的对象的弧度角
  • 高度图上有多少个点

我的问题看起来有点像这样:

图片

更多图片

红线和蓝线是两个高度图点,浅蓝色是我想计算高度的地方。

这是我当前的代码,但效果不佳。

从我的植被代码来看,这似乎可以正常工作,但是对于单位等来说使用起来很粗糙,因为它们在移动时会向上/向下跳跃,因为它仅使用 1 个高度图点。

0 投票
1 回答
3485 浏览

opengl - C++ OpenGL Cube Map Perlin Noise to Sphere

我目前正在制作一些行星生成,主要是为了好玩,并希望最终能得到一些踢屁股的行星。我正在使用已通过标准化映射到球体的 Cube。行星地形和天空

这张照片中的地形尚未正确纹理化。这只是高度图的渲染。然而,这不是我的问题。从立方体创建球体时,您会留下 6 个弯曲成球体形状的面。因此,我没有可用于将球形高度图包裹在地形周围的纬度和经度。目前我正在使用立方体映射。但是,这会导致几个问题,如您所见: 立方体到球体映射问题 ——我的问题变得很明显。问题是由于球体仍然具有立方体的拓扑结构。我必须为每个面生成一个高度图。我目前使用 Libnoise 作为高度图,这就是大问题的开始。我可以将它导出为球形高度图(如果我有一个球体,这将很有用),或者我可以使用必须映射到所有 6 个面的平面高度图。但是,由于映射的工作方式。我可以让 3 个面在中间排列并且是无缝的,但最后一个高度图不会加入第一个高度图,因为 Lib 噪声使用边界并创建坐标网格。

球体是这样创建的——

这背后的原因可以在这里看到。

但是,球体的结构将使以后更容易以 Quad-Ttee 的形式实现 lod。无论如何我可以用 LibNoise 生成立方体贴图高度图吗?或者我可以做些什么来使球体能够使用球形高度图?

我想出了如何使用 Sphere Maps 进行渲染,但是当我开始使用四叉树时,这将不起作用。但是,它会产生一些不错的结果,例如:

在此处输入图像描述

所以,我几乎需要知道如何将噪声平铺到立方体贴图中。使用 Libnoise 或在顶点着色器中。

0 投票
3 回答
965 浏览

c# - 使用等离子样式分形生成高度图期间的伪影

今天我花了几个小时研究随机地形生成是如何完成的,在阅读了等离子分形(中点位移和菱形正方形算法)之后,我决定尝试实现一个。我的结果实际上并不可怕,但我有这些可怕的方形/线条/网格类型的人工制品,我似乎无法摆脱!

当呈现为灰度图像时,我的高度图看起来像: 高度图 http://sphotos-d.ak.fbcdn.net/hphotos-ak-ash3/535816_10151739010123327_225111175_n.jpg

显然这涉及到相当多的代码,但我会尝试发布仅相关的代码。例如,我没有发布将其转换为纹理的代码,但别担心,我已经尝试用平滑渐变填充我的高度数组,并且纹理很好:)

我首先将地图的四个角设置为 0 到 1 之间的随机值,然后启动递归位移算法:

TerrainData 只是一个 2D 浮点数组*。Vector2_I 只是我自己的整数向量类。最后四个函数是 MidPointDisplace,它是递归函数,CalculateTerrainPointData 平均 2 个数据值并添加一些噪声,CalculateTerrainPointData2 平均 4 个数据值并添加一些噪声并具有稍高的比例值(仅用于中心点),最后我的噪声函数 atm 只是一些随机噪声,而不是像 perlin 等真正的噪声。它们看起来像这样:

好的,感谢您花时间查看-希望有人知道这种网格状图案是从哪里出现的:)

*edit - 意外写入整数,更正为浮点数

0 投票
1 回答
883 浏览

java - 使用 lwjgl 的 Java 高度图

我编写了一个高度图,但它似乎落后于客户端。我只是不知道如何提高fps。高度图我得到大约 3-6fps。我为高度图使用了一个相当大的 bmp,我认为它是 1024x1024。当我使用较小的罚款时,也许我只是没有有效地使用代码。有没有更好的方法来编码这个高度图,或者我只是把它编码错了。这是我第一次制作高度图。谢谢

0 投票
1 回答
2885 浏览

opengl - 来自高度贴图神器的法线贴图

我正在从高度图的片段着色器上烘焙法线贴图。高度图看起来很棒并且看起来很平滑。然而,当我生成法线贴图时,我得到了非常奇怪的结果。

这是显示问题的两张渲染图像,一张包含所有照明计算,第二张将法线贴图图像应用于网格顶部。 标准地图

在此处输入图像描述

我烘焙法线贴图的方法是在片段着色器上对相邻像素进行采样。

网格为 32x32,法线贴图和高度贴图为 64x64。这是对相邻像素进行采样的片段着色器代码:

texturePos 在顶点着色器上计算为 vertexPosition.x / 128(128,因为顶点之间的距离是 4 像素。所以 32 * 4 = 128)。

为什么我的结果如此奇怪?

0 投票
1 回答
3913 浏览

java - 生成没有图像的高度图

我想制作一个世界生成器,以便每次加载它时,它都会生成一个新的高度图。为此,我使用了一个 2D 整数数组。尺寸是 x、z 和高度 (y)。

是否有一些简单的生成算法可以随机化地形?

0 投票
1 回答
2945 浏览

algorithm - 生成动态高度图有哪些好的算法?

我想研究一些动态高度图生成的算法,但我不熟悉任何算法。变得更有活力。关于多维高度图如何工作的一些理论是什么?即洞穴和悬垂。我应该使用多个高度图图像还是复杂的算法?