我已经搜索了一段时间,我听说过不同的方法,所以我想我会来这里看看我该做什么,
从我收集到的内容中我应该使用.. glBitmap以及数组中的0和0xFF值来制作地形。有什么输入吗? 我尝试将它切换到四边形,但我不确定它是否有效以及它的意图。
我希望地形能够拥有隧道,例如蠕虫。 2维。
这是我到目前为止所尝试的内容,
我试图制作一个glBitmap,所以......
pixels = pow(2 * radius, 2);
ras = new GLubyte[pixels];
然后将它们全部设置为0xFF,并使用glBitmap(x,y,0,0,ras)绘制它; 然后可以检查爆炸以及什么不可以和任何像素可以设置为零。这是一种看似合理的方法吗?我对opengl不太好,我可以在glBitmap上放一个纹理吗?从我所看到的情况来看,我认为你不能。
答案 0 :(得分:3)
好的,这是一个高级概述,我假设您已熟悉OpenGL基础知识,如缓冲对象。如果某些事情没有意义,或者你想了解更多细节,请告诉我。
在计算机图形中表示地形的最常用方法是高度场:在X和Y轴上有规律地间隔开的点网格,但其Z(高度)可以变化。高度场每个(X,Y)网格点只能有一个Z值,所以你不能在地形上有“悬垂”,但无论如何它通常都是足够的。
绘制高度场地形的一种简单方法是使用三角形条(或四边形,但它们已被弃用)。为简单起见,从一个角落开始,沿着列向下以Z字形顺序发出顶点,然后返回顶部并执行下一列,依此类推。可以通过优化来获得更好的性能,以及构建几何体以获得更好外观的更复杂方法,但这将帮助您入门。
(我假设这里有一个矩形地形,因为它通常是这样做的;如果你真的想要一个圆圈,你可以替换X和Y,所以你有一个极坐标网格。)
每个顶点的坐标都需要像往常一样存储在缓冲区对象中。当您致电glBufferData()
将顶点数据加载到GPU时,如果地形通常会从一帧更改为下一帧,请指定GL_STREAM_DRAW
的用法参数,或{ {1}}如果它经常变化但不是(接近)每一帧。要更改地形,请再次调用GL_DYNAMIC_DRAW
以将不同的顶点数据集复制到GPU。
对于顶点数据本身,您可以为每个顶点指定所有三个坐标(X,Y和Z);这是最简单的事情。或者,如果您正在使用最近的GL版本,并且想要更复杂,那么您应该能够使用glBufferData()
和网格的尺寸(传递给顶点着色器)来计算顶点着色器中的X和Y坐标。着色器作为统一值)。这样,您只需将Z值存储在缓冲区中,这意味着消耗更少的GPU内存和带宽。
答案 1 :(得分:3)
我建议你使用模板缓冲区。您在模板缓冲区中标记已破坏的地形部分,然后使用简单的四边形模板测试绘制地形,而无需手动测试每个像素。