Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 使用四边形进行高度贴图渲染_Opengl_Geometry - Fatal编程技术网

Opengl 使用四边形进行高度贴图渲染

Opengl 使用四边形进行高度贴图渲染,opengl,geometry,Opengl,Geometry,我正在尝试设计一个“低多边形”地形渲染器,它采用高度贴图并为每个点(而不是像素/顶点)绘制一个平铺/四边形 我在寻找将四边形“缝合”在一起的方法时遇到了一些困难,因此四边形的中心位于heightmap中指定的高度 到目前为止,我所做的只是将一个顶点设置为等于“当前”四边形的高度,其余顶点设置为相邻四边形的高度,例如: 四元@(x,y),高度自高度贴图为“高度(x,y)”: 对于顶点高度: heightA = height(x, y) heightB = height(x, y + 1) heig

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

我在寻找将四边形“缝合”在一起的方法时遇到了一些困难,因此四边形的中心位于heightmap中指定的高度

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

四元@(x,y),高度自高度贴图为“高度(x,y)”:

对于顶点高度:

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
即,使用双线性插值在半像素位置对高度贴图进行采样。这与框模糊高度贴图的效果相同,这不是一件好事。您可能会使用不同的内核,但本质上您做得不好


典型的解决方案是将网格顶点放置在高度贴图纹理的中心,这样可以保持高度贴图的分辨率,而不会发生任何空间偏移。

以澄清最后一点;你的意思是(例如)从四个三角形创建一个四边形,这样它们都有一个可以设置为高度的公共顶点(在四边形的中心)?不,每个四边形只有两个三角形。就像今天一样,但在XY平面上移动半个像素。
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