OpenGL绘制地形

1.创建顶点缓冲区对象(VertexBuffer)
2.创建索引缓冲区对象(IndexBuffer)
3.加载高度图(Heightmap)
3.1把位图像素转换为高度图数据(顶点数据):高度图在每个方向上都是1个单位宽,且其以x-z平面上的位置(0,0)为中心,位图的最上角将被映射到(-0.5,-0.5),右下角会被映射到(0.5,0.5),y值则为该像素的红色分量/255,即高度。
3.2使用getPixels()获得像素数组,像素偏移值 = 当前行*高度 + 当前列
3.3生成索引数据
OpenGL绘制地形_第1张图片
4着色器
4.1顶点着色器(res/raw/heightmap_vertex_shader.glsl)
4.2片段着色器(res/raw/heightmap_fragment_shader.glsl)
5.关联着色器及其加载顶点数据
6.渲染器绘制高度图(SkyboxRenderer)
7.深度缓冲区不绘制被遮挡物体

//启动深度测试
glEnable(GL_DEPTH_TEST);
//新片段比任何已经存在那里的片段相比比较近或者二者在同等距离处
glDepthFunc(GL_LEQUAL);
...
//新片段比任何已经存在那里的片段近或者比远平面近,则绘制新片段
glDepthFunc(GL_LESS);
//禁止写入深度缓冲区,即粒子将针对地面进行深度测试
glDepthMask(false);
...
//允许写入深度缓冲区
glDepthMask(true);

8.剔除技术消除隐藏面(物体的后面)

//剔除:消除隐藏面(物体后面),遵循三角形的卷曲顺序
glEnable(GL_CULL_FACE);

9.源码:https://github.com/HQlin/OpenGLHeightmap/commits/master这里写链接内容

你可能感兴趣的:(openGL)