问题标签 [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 回答
3811 浏览

math - 如何正确获取缩放地形中点 (x,z) 的地形高度

为了正确地将高度图图像的每个像素映射到地形,我们最终会得到一个宽度和长度都比高度图的实际宽度和长度少 1 个单位的地形。例如,如果我们有一个只有 2 个像素宽的图像,每个像素将映射到四边形的每个顶点。我们有 2 个像素,但只有 1 个地形单位。

我试图通过缩放地形以填充地形末端的空四边形来“解决”这个问题。但是,当我尝试获取某个 (x,z) 点的地形高度时,这是有问题的。问题并不完全是您将看到的缩放。

首先,让我们看一下有效的代码。缩放不考虑丢失的四边形的那个。我有一个 1024x1024 高度图,它将创建一个具有 1023x1023 四边形的地形(我实际上使用的是三角形,但用四边形很容易解释)而无需任何缩放。

现在让我们通过将适当的参数传递给以下函数来将地形缩放到类似 2000x2000 的大小:

当我绘制地形时,我使用stepWidthstepLength适当地缩放地形。地形将被缩放,但只会使用 1023 个四边形,总是 1023,不再有(这很好)。现在假设我正在移动我的游戏角色,我需要获取当前玩家位置的地形高度。我有一个函数,它将获取玩家位置的xz坐标并返回该点的高度。但是由于地形尺寸是缩放的,我不能只使用xandz传递给函数,我需要计算正确的,如下所示:

之后,我只需要找到新的 4 个相邻顶点,x并对z所有顶点高度执行双线性插值,以计算玩家位置的正确高度。

这一切都很好。正确绘制了地形,并正确计算了所有高度。我的问题是当我试图绕过这个问题开头解释的“限制”时。

为了解决这个问题,我将 scale 函数更改为:

假设我的地形大小(我传递给上面缩放函数的值)与高度图的大小完全相同,即 1024x1204。这将为我提供一个步骤,1.000977517106549364613880742913使 1023 四边形完全适合 0 到 1024(地形的大小)。到目前为止一切顺利,地形完全按照我的预期绘制。

真正的问题是计算高度。我已经尝试了很多事情,但我无法弄清楚计算正确的方程式xz用于返回高度的函数,给定上面的新步计算。像我以前那样潜水xz步长根本不会削减它。现在计算的步骤略有不同,不像以前那么简单。

0 投票
1 回答
537 浏览

c# - 直线到曲线

我正在尝试提出一种技术来生成流星陨石坑的高度图。目前我试图保持小而简单,并且有一个简单的算法,其中标记了陨石坑的中心,在其半径内,它周围的像素根据它们与中心的接近程度而着色。

这种方法的问题是它会产生 V 形陨石坑,我需要更多的“U”形结果。我不熟悉正弦波的使用,我觉得插值不会很快起作用,因为流星半径内可能有多少像素。

有什么建议么?

0 投票
1 回答
227 浏览

c# - 图形故障 Xna GraphicsTutorial - 调试

我的地形变得像这样奇怪的颜色:

http://tinypic.com/view.php?pic=307w421&s=7

有谁知道这里出了什么问题?我应该在代码的哪个区域(从概念上)进行调试?

更新:

它来自我学校的教程,基于:http ://www.riemers.net/eng/Tutorials/XNA/Csharp/Series1/Starting_a_project.php

我们使用了 BasicEffect 着色器并制作了引擎的各个部分,例如:相机、从高度图派生的 3d 顶点地形、基本照明、基本软法线和用于优化的缓冲区。

VertexPositionColorNormal 结构:

0 投票
2 回答
2658 浏览

c# - 模拟高度图上的流体流动

我正在寻找一种方法来近似在高度图上移动的流体体积。我能想到的最简单的解决方案是将其近似为大量未绘制的小直径(<0.1m)的球体。然后我会在球体的“顶部”放置一个代表水面的可见平面,在它们静止的位置。据我所知,没有托管物理引擎包含内置的流体模拟器,因此是个问题。

实施将包括使用能够模拟球体运动的物理引擎,例如 JigLibX。为了确定平面的高度,我正在考虑对位于分组顶层的每个球体的最大高度进行平均。

我不希望性能很好,但它可以实时接近吗?如果没有,我可以使用这个模拟来预烘焙流线吗?

我希望这是有道理的,我真的想要关于这是否可行的意见/建议,或者是否有更好的方法来解决这个问题。

感谢您的帮助,维纳图

(如果相关,我的目标平台是 XNA 4.0,使用 C#。此时仅 Windows,因此 PhysX/Havok 是模拟的可能性,但我更喜欢托管解决方案)

0 投票
1 回答
788 浏览

3d - 帮助我使用 WebGL 和具有许多纹理喷溅/混合的高度图

我想开始一个新的爱好项目,这是一个基于 WebGL 的实时战略游戏。我过去的 RTS 游戏很简单,它是用 XNA/C# 制作的。现在我想要它在网络上,我想要一个合适的地形。我发现地形飞溅很难理解/实现,是否已经有一个很好的实现可以在我的下一个游戏中烘焙?

或者,是否有支持此功能的库/框架?

我正在寻找资源/文章/教程/库/框架,这些资源/文章/教程/库/框架可以帮助我使用多个纹理很好地混合在一起的高度图地形。

0 投票
5 回答
18047 浏览

javascript - WebGL - 带高度图的纹理地形

我正在尝试使用 WebGL 创建 3D 地形。我有一个带有地形纹理的 jpg,以及另一个带有高度值(-1 到 1)的 jpg。

我查看了各种包装库(如 SpiderGL 和 Three.js),但我找不到一个合适的示例,如果我这样做(如 Three.js),则代码没有记录,我无法弄清楚怎么做。

谁能给我一个很好的教程或例子?

Three.js http://mrdoob.github.com/three.js/examples/webgl_geometry_terrain.html有一个例子,这几乎是我想要的。问题是它们随机地创建了山脉的颜色和高度值。我想从 2 个不同的图像文件中读取这些值。

任何帮助都将不胜感激。谢谢

0 投票
2 回答
4071 浏览

c++ - OpenGL地形碰撞检测

好的,我有一些程序生成的地形(大致基于http://www.swiftless.com/terraintuts.html

我有一个茶壶“飞机”,你可以在里面飞来飞去(第三人称相机)

基本上,目标是飞过山谷等......而不会坠毁。

我无法解决的是如何计算您是否与地形发生碰撞?

有任何想法吗?

0 投票
1 回答
622 浏览

opengl - 使用 CUDA VBO 绘制 OpenGL 高度图

我之前在这里问过几个关于 VBO 的问题,根据我收到的评论,我决定必须采取一种新的方法。

简而言之 - 我正在尝试绘制在大型 FLOAT 数组上定义的 Mandelbrot 集,大约 512X512 点。我的程序的目的是让用户控制缩放和世界的方向(它是一个 3d 模型)。到目前为止,我已经使用 GL_TRIANGLE_STRIP 绘制了整个东西,由于其缓慢的绘制过程,这变成了一个糟糕的选择。也因为实现我的绘画风格(调用 glVertex 的顺序)变得不可能为 VBO 编码。

所以我有几个问题。

即使在此描述之后,我也不确定 VBO 是否是最佳选择,因为由用户来控制计算。对于他由程序引起的每个计算,我必须重新计算 mandelbrot 集(~60ms),然后重新复制指向缓冲区的点:一个需要一些时间(?ms)的过程。

该程序还允许用户在世界上移动,因此这里不进行任何计算,因此 VBO 是一个很好的选择。

1.绘制高度图的最佳方法是什么(当数组中的每个单元格只包含高度时)

2.我如何将它应用到 VBO 并将其传输到 cuda (cudaRegisterBuffer 或类似的东西)

3.有没有办法区分模式并决定何时需要 VBO(在无计算模式下)和何时不需要(计算模式)。

0 投票
2 回答
244 浏览

java - 如何优化我的自定义地图格式(Java)

我正在创建一个使用高度图的大型开放世界(200×200 公里)的 3D 游戏。我将高度图划分为 200×200 = 40,000 个 1000×1000 米的区域,然后再次划分为 20×20 = 400 个 50×50 米的块。高度图是从 PNG 文件生成的。

我正在考虑存储地形的方法。我尝试了一些方法,但它会生成每个区域大约 16MB 的文件,对于整个世界(40,000 个区域)来说是 640GB。

可以在此处找到区域文件的示例:http: //updo.nl/file/e10ce974.umap

我的问题:我怎样才能在区域文件中紧凑地存储这么多信息并在以后阅读它们?

0 投票
2 回答
2007 浏览

3d - 曼德布罗集很快达到极限

我正在计算 mandelbrot 集,能够使用 OpenGL 将其缩放并打印到屏幕上。

如您所知,mandelbrot 集由一个矩形(右上角和左下角)定义,每次我“放大”和“缩小”时,我都会通过将左下点移动到右上角和右上角反之亦然。最终,这 2 个点应该会相遇并完成缩放过程。
根据许多 YOUTUBE 电影,我可以清楚地看到有些电影可以让您达到 1000 倍变焦。在我的程序中,我几乎无法达到 X6。在调试时,我可以看到我的 2 点,它们定义了 mandelbrot 集到达彼此(x1,y1) = (x2,y2)
几件事:
(x1,y1) & (x2,y2)被定义为浮点数。我应该使用 double 代替吗?我的 mandelbrot 由 (512X512) 点定义。够了吗?虽然我不确定它是否与问题有关。

我面临的另一个问题是 - 我将集合打印为高度图(3D 集合)。当每个 Y 分量代表某个点达到无穷大所需的迭代次数时。但是,每次我放大整个集合时,我的相机位置都会越来越高,最终我的相机被集合消耗掉了。有没有办法计算差异并将相机从集合中移开(相应地从缩放点移开?)

计算集合的代码:

一些事情 :

instance->FoundPointOnHost = 我要放大的点。
instance->constVal = 包含集合的原始大小(开始等于 [xru,yru] [xld,yld])
(xru,yru) = 右上角集合的点 (xld,yld) = 集合的左下点

谢谢!