问题标签 [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.
webgl - 置换贴图UV贴图?
概括
我正在尝试将置换贴图(高度贴图)应用于一个相当简单的对象(六边形平面),但我得到了一些意想不到的结果。我正在使用灰度,因此,我的印象是我的高度图应该只影响我的网格的 Z 值。但是,我创建的置换贴图在 X 和 Y 平面上拉伸了网格。此外,它似乎没有使用我创建的所有其他纹理都成功应用到的 UV 映射。
模型和 UV 贴图
这是我的六边形网格及其在 Blender 中对应的 UV 贴图的参考图像。
漫反射和置换纹理
这些是我通过 Three.JS 应用到我的网格的漫反射和置换贴图纹理。
渲染
当我在没有置换贴图的情况下渲染平面时,您可以看到六边形平面保持在线条内。但是,当我添加置换贴图时,它显然会影响顶点的 X 和 Y 位置,而不是仅影响 Z,从而将平面很好地扩展到线条上。
代码
这是相关的 Three.js 代码:
假设
我目前正在考虑为什么这可能会出错的三种可能性:
- UV 贴图不适用于我的置换贴图。
- 我错误地制作了置换贴图。
- 我错过了将位移锁定为仅 Z 的过程中的关键步骤。
当然,秘密选项#4 以上都不是,我真的不知道我在做什么。或上述的任何混合物。
现场示例
您可以在此处查看实时示例。
如果有对此主题有更多了解的人可以指导我,我将不胜感激!
编辑 1:根据建议,我已经注释掉computeFaceNormals()
和computeVertexNormals()
. 虽然它确实略有改进,但网格仍在变形。
terrain - 调整六边形网格的高度图生成
目前我正在做一个小项目,只是为了一点乐趣。它是一个使用 OpenGL 的 C++、WinAPI 应用程序。
我希望它会变成一个在六边形网格上玩的 RTS 游戏,当我完成基本游戏引擎后,我计划进一步扩展它。
目前,我的应用程序包含一个包含顶点和高度图信息的 VBO。高度图是使用中点位移算法(菱形)生成的。
为了实现六边形网格,我采用了这里解释的想法。它向下移动正常网格的奇数行,以允许相对容易地渲染六边形而没有太多进一步的复杂性(我希望)。
几天后它开始聚集在一起,我添加了鼠标选择,这是通过以独特的颜色渲染网格中的每个十六进制来实现的,然后在此 FBO 中对给定的鼠标位置进行采样以识别所选的 ID单元格(在下面屏幕截图的右上角可见)。
在我项目的下一阶段,我想看看生成更多“可玩”的地形。对我来说,这意味着每个六边形的形状应该比上图中看到的更规则。
所以终于说到我的意思了,有没有:
- 一种在我当前的方法中平滑或调整顶点的方法,它将六边形的所有点都带到一个平面上(共面)。
编辑:对于任何寻找有关如何使点共面的信息的人来说,这是一个很好的解释。
- 一种更好的程序地形生成方法,可以更好地控制这类事情。
- 一种以不同方式表示我的顶点信息的方法,允许这样做。
需要明确的是,我并不是想实现一个带有凸起边缘或平台的平面六角网格(如下所示)。
)
我希望所有几何图形都加入并引导到下一个位。
我希望实现与我现在所拥有的类似的东西(相对较好的起伏山丘和地形),但具有更可控的高原。这给了我稍后关闭区域(无法播放的瓷砖)的灵活性,如果需要,我可以在其中添加更高细节的网格。
欢迎任何反馈,我将其用作学习练习,所以请 - 欢迎所有评论!
compression - 如何压缩我可以获得高度图?
我一直在玩简单的地形生成(菱形正方形算法),我开始思考我实际上能做到多大。
如果我想生成一个大陆,那么一个1000 by 1000 km
正方形就足够大了,但如果我还想要高分辨率,它很快就会产生巨大的文件大小。1000 by 1000 km = 1
万平方公里,如果我每米存储一个点,那么每平方公里就是一百万平方米。
如果我使用无符号短裤(最大海拔 10,000 米)并且我的数学计算正确,那就是 2TB 的数据。当然,我不能一次将它们全部存储在 RAM 中,但即使 HDD 空间每天变得更便宜,2TB 的高度图也不实用。
我开始考虑压缩数据,但我以前从未做过压缩,也不知道我能把它缩小多远,如果它从 2 变为1.9 TB
,那就不值得了。哪些压缩方法在不丢失数据的情况下效果最好?
我愿意减小高度图的大小和分辨率,但我想让它尽可能大。
opengl - C++ OpenGL Cube Map Perlin Noise to Sphere
我目前正在制作一些行星生成,主要是为了好玩,并希望最终能得到一些踢屁股的行星。我正在使用已通过标准化映射到球体的 Cube。
这张照片中的地形尚未正确纹理化。这只是高度图的渲染。然而,这不是我的问题。从立方体创建球体时,您会留下 6 个弯曲成球体形状的面。因此,我没有可用于将球形高度图包裹在地形周围的纬度和经度。目前我正在使用立方体映射。但是,这会导致几个问题,如您所见:
——我的问题变得很明显。问题是由于球体仍然具有立方体的拓扑结构。我必须为每个面生成一个高度图。我目前使用 Libnoise 作为高度图,这就是大问题的开始。我可以将它导出为球形高度图(如果我有一个球体,这将很有用),或者我可以使用必须映射到所有 6 个面的平面高度图。但是,由于映射的工作方式。我可以让 3 个面在中间排列并且是无缝的,但最后一个高度图不会加入第一个高度图,因为 Lib 噪声使用边界并创建坐标网格。
球体是这样创建的——
这背后的原因可以在这里看到。
但是,球体的结构将使以后更容易以 Quad-Ttee 的形式实现 lod。无论如何我可以用 LibNoise 生成立方体贴图高度图吗?或者我可以做些什么来使球体能够使用球形高度图?
我想出了如何使用 Sphere Maps 进行渲染,但是当我开始使用四叉树时,这将不起作用。但是,它会产生一些不错的结果,例如:
所以,我几乎需要知道如何将噪声平铺到立方体贴图中。使用 Libnoise 或在顶点着色器中。
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 - 意外写入整数,更正为浮点数
java - 使用 lwjgl 的 Java 高度图
我编写了一个高度图,但它似乎落后于客户端。我只是不知道如何提高fps。高度图我得到大约 3-6fps。我为高度图使用了一个相当大的 bmp,我认为它是 1024x1024。当我使用较小的罚款时,也许我只是没有有效地使用代码。有没有更好的方法来编码这个高度图,或者我只是把它编码错了。这是我第一次制作高度图。谢谢
opengl - 来自高度贴图神器的法线贴图
我正在从高度图的片段着色器上烘焙法线贴图。高度图看起来很棒并且看起来很平滑。然而,当我生成法线贴图时,我得到了非常奇怪的结果。
这是显示问题的两张渲染图像,一张包含所有照明计算,第二张将法线贴图图像应用于网格顶部。
我烘焙法线贴图的方法是在片段着色器上对相邻像素进行采样。
网格为 32x32,法线贴图和高度贴图为 64x64。这是对相邻像素进行采样的片段着色器代码:
texturePos 在顶点着色器上计算为 vertexPosition.x / 128(128,因为顶点之间的距离是 4 像素。所以 32 * 4 = 128)。
为什么我的结果如此奇怪?
java - 生成没有图像的高度图
我想制作一个世界生成器,以便每次加载它时,它都会生成一个新的高度图。为此,我使用了一个 2D 整数数组。尺寸是 x、z 和高度 (y)。
是否有一些简单的生成算法可以随机化地形?
algorithm - 生成动态高度图有哪些好的算法?
我想研究一些动态高度图生成的算法,但我不熟悉任何算法。变得更有活力。关于多维高度图如何工作的一些理论是什么?即洞穴和悬垂。我应该使用多个高度图图像还是复杂的算法?