问题标签 [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.
math - 如何正确获取缩放地形中点 (x,z) 的地形高度
为了正确地将高度图图像的每个像素映射到地形,我们最终会得到一个宽度和长度都比高度图的实际宽度和长度少 1 个单位的地形。例如,如果我们有一个只有 2 个像素宽的图像,每个像素将映射到四边形的每个顶点。我们有 2 个像素,但只有 1 个地形单位。
我试图通过缩放地形以填充地形末端的空四边形来“解决”这个问题。但是,当我尝试获取某个 (x,z) 点的地形高度时,这是有问题的。问题并不完全是您将看到的缩放。
首先,让我们看一下有效的代码。缩放不考虑丢失的四边形的那个。我有一个 1024x1024 高度图,它将创建一个具有 1023x1023 四边形的地形(我实际上使用的是三角形,但用四边形很容易解释)而无需任何缩放。
现在让我们通过将适当的参数传递给以下函数来将地形缩放到类似 2000x2000 的大小:
当我绘制地形时,我使用stepWidth
和stepLength
适当地缩放地形。地形将被缩放,但只会使用 1023 个四边形,总是 1023,不再有(这很好)。现在假设我正在移动我的游戏角色,我需要获取当前玩家位置的地形高度。我有一个函数,它将获取玩家位置的x
和z
坐标并返回该点的高度。但是由于地形尺寸是缩放的,我不能只使用x
andz
传递给函数,我需要计算正确的,如下所示:
之后,我只需要找到新的 4 个相邻顶点,x
并对z
所有顶点高度执行双线性插值,以计算玩家位置的正确高度。
这一切都很好。正确绘制了地形,并正确计算了所有高度。我的问题是当我试图绕过这个问题开头解释的“限制”时。
为了解决这个问题,我将 scale 函数更改为:
假设我的地形大小(我传递给上面缩放函数的值)与高度图的大小完全相同,即 1024x1204。这将为我提供一个步骤,1.000977517106549364613880742913
使 1023 四边形完全适合 0 到 1024(地形的大小)。到目前为止一切顺利,地形完全按照我的预期绘制。
真正的问题是计算高度。我已经尝试了很多事情,但我无法弄清楚计算正确的方程式x
并z
用于返回高度的函数,给定上面的新步计算。像我以前那样潜水x
和z
步长根本不会削减它。现在计算的步骤略有不同,不像以前那么简单。
c# - 直线到曲线
我正在尝试提出一种技术来生成流星陨石坑的高度图。目前我试图保持小而简单,并且有一个简单的算法,其中标记了陨石坑的中心,在其半径内,它周围的像素根据它们与中心的接近程度而着色。
这种方法的问题是它会产生 V 形陨石坑,我需要更多的“U”形结果。我不熟悉正弦波的使用,我觉得插值不会很快起作用,因为流星半径内可能有多少像素。
有什么建议么?
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 结构:
c# - 模拟高度图上的流体流动
我正在寻找一种方法来近似在高度图上移动的流体体积。我能想到的最简单的解决方案是将其近似为大量未绘制的小直径(<0.1m)的球体。然后我会在球体的“顶部”放置一个代表水面的可见平面,在它们静止的位置。据我所知,没有托管物理引擎包含内置的流体模拟器,因此是个问题。
实施将包括使用能够模拟球体运动的物理引擎,例如 JigLibX。为了确定平面的高度,我正在考虑对位于分组顶层的每个球体的最大高度进行平均。
我不希望性能很好,但它可以实时接近吗?如果没有,我可以使用这个模拟来预烘焙流线吗?
我希望这是有道理的,我真的想要关于这是否可行的意见/建议,或者是否有更好的方法来解决这个问题。
感谢您的帮助,维纳图
(如果相关,我的目标平台是 XNA 4.0,使用 C#。此时仅 Windows,因此 PhysX/Havok 是模拟的可能性,但我更喜欢托管解决方案)
3d - 帮助我使用 WebGL 和具有许多纹理喷溅/混合的高度图
我想开始一个新的爱好项目,这是一个基于 WebGL 的实时战略游戏。我过去的 RTS 游戏很简单,它是用 XNA/C# 制作的。现在我想要它在网络上,我想要一个合适的地形。我发现地形飞溅很难理解/实现,是否已经有一个很好的实现可以在我的下一个游戏中烘焙?
或者,是否有支持此功能的库/框架?
我正在寻找资源/文章/教程/库/框架,这些资源/文章/教程/库/框架可以帮助我使用多个纹理很好地混合在一起的高度图地形。
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 个不同的图像文件中读取这些值。
任何帮助都将不胜感激。谢谢
c++ - OpenGL地形碰撞检测
好的,我有一些程序生成的地形(大致基于http://www.swiftless.com/terraintuts.html)
我有一个茶壶“飞机”,你可以在里面飞来飞去(第三人称相机)
基本上,目标是飞过山谷等......而不会坠毁。
我无法解决的是如何计算您是否与地形发生碰撞?
有任何想法吗?
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(在无计算模式下)和何时不需要(计算模式)。
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
我的问题:我怎样才能在区域文件中紧凑地存储这么多信息并在以后阅读它们?
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) = 集合的左下点
谢谢!