使用opengles绘制灰度地形图

本文介绍如何使用OpenGL ES绘制灰度地形图。通过MxN网格表示地形,利用灰度图中像素的灰度确定海拔高度,黑色代表最低海拔,白色代表最高。公式:实际海拔=最低海拔+最大高差x像素值/255.0。并提供了相关代码链接。
摘要由CSDN通过智能技术生成

效果图:





基本原理:

灰度地形图生成技术的基本原理是利用MxN的网格表示地形,同时提供一副对应尺寸的灰度图,根据灰度图中每个像素的灰度来确定网格中顶点的海拔,黑色像素(RGB各个色彩通道的值为0)代表海拔最低的位置,白色像素(RGB中各个色彩通道的值为255)代表海拔最高的位置,实际开发中用如下公式来计算某像素顶点的海拔高度:

        实际海拔=最低海拔+最大高差x像素值/255.0

代码如下:

package test.com.opengles11_2;



import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
/**
 * Created by hbin on 2016/9/27.
 */
public class Constant {
    public static float[][] yArray;
    public static final float LAND_HIGH_ADJUST=-2f;//陆地的高度调整值
    public static final float LAND_HIGHEST=20f;//陆地最大高差
    //从灰度图片中加载陆地上每个顶点的高度
    public static float[][] loadLandforms(Resources resources,int index)
    {
        Bitmap bt=BitmapFactory.decodeResource(resources, index);//导入灰度图
        int colsPlusOne=bt.getWidth();
        int rowsPlusOne=bt.getHeight();
        float[][] result=new float[rowsPlusOne][colsPlusOne];
        //遍历灰度图像
        for(int i=0;i<rowsPlusOne;i++)
        {
            for(int j=0;j<colsPlusOne;j++)
            {
                int color=bt.getPixel(j,i);//获得指定行列处像素的颜色值
                int r=Color.red(color);
                int g=Color.green(color);
                int b=Color.blue(color);
                int h=(r+g+b)/3;
                //像素顶点的海拔高度=最大高差X像素值/255.0+最低海拔
                result[i][j]=h*LAND_HIGHEST/255+LAND_HIGH_ADJUST;
            }
        }
        return result;
    }
}
地形图构造类

package test.com.opengles11_2;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import android.opengl.GLES20;

/**
 * Created by hbin on 2016/9/27.
 * 绘制山
 */
public class Mountion {
    //单位长度
    float UNIT_SIZE=1.0f;

    //自定义渲染管线的id
    int mProgram;
    //总变化矩阵引用的id
   
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值