opengl - 使用四边形渲染高度图

标签 opengl geometry

我正在尝试设计一个“低多边形”地形渲染器,它接受高度图并为每个点(而不是像素/顶点)绘制一个图 block /四边形。

我在寻找一种将四边形“缝合”在一起以使四边形的中心位于高度图中指定的高度的方法时遇到了一些麻烦。

到目前为止,我所做的只是简单地将一个顶点设置为“当前”四边形的高度,并将其余顶点设置为相邻四边形的高度,例如:

四边形 @ (x, y),高度图的高度为“height(x,y)”:

B   C
|---|  y
|   |  ^
|---|  |
A   D   --> x

顶点高度:

heightA = height(x, y)
heightB = height(x, y + 1)
heightC = height(x + 1, y + 1)
heightD = height(x + 1, y)

虽然这确实将四边形连接在一起,但这意味着四边形的右上角顶点 (A) 具有指定的高度而不是中心高度。

tl;dr:当前四边形的顶点有一定的高度,我希望四边形的质心具有这个高度。

最佳答案

设置

heightA = (height(x-1, y-1) + height(x-1, y) + height(x, y-1) + height(x, y))/4
heightB = (height(x-1, y) + height(x-1, y+1) + height(x, y) + height(x, y+1))/4
heightC = (height(x, y) + height(x, y+1) + height(x+1, y) + height(x+1, y+1))/4
heightD = (height(x, y-1) + height(x, y) + height(x+1, y-1) + height(x+1, y))/4

即使用双线性插值在半像素位置对高度图进行采样。这与对高度图进行框模糊具有相同的效果,这并不是一件好事。您可能会使用不同的内核,但本质上您无法做得更好。

典型的解决方案是将网格顶点放置在高度图纹理像素的中心,这样您就可以保留高度图分辨率而无需任何空间偏移。

关于opengl - 使用四边形渲染高度图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44476312/

相关文章:

algorithm - 计算旋转矩形中的最大内接矩形

opengl - GLSL 编译在 mat4x3 vec4 乘法上失败

Java 游戏、弹跳和 Action

c++ - 使用 GL_POLYGON 绘制圆,半径超出比例

OpenGL:如何从源文件编译glew32.dll

c++ - 在空间图上使用 boost 凸包

algorithm - 给定三角网格顺时针排序点

android - 适用于 Android 的 Adob​​e Flash 10 GPU 和 Adob​​e AIR

c++ - 如何在渲染之间更改片段着色器颜色?

performance - OpenGL 在多个地方多次绘制相同的多边形