Android平台3D引擎研究4

来源:互联网 发布:淘宝卖茶叶需要什么证 编辑:程序博客网 时间:2024/05/16 23:01

OpenGL ES纹理处理

使用OpenGL ES的纹理可以将图片贴到3D模型上,从而生成逼真的3D场景。纹理是以图片文件形式存在的,图片被归一化为(0.0, 0.0)到(1.0, 1.0)的矩形区域,通常一个3D物体具有一个纹理文件即可,每处三角片所使用的纹理可以通过uv坐标来指定。通过三角片每个顶点在归一化后图片中的坐标,可以从纹理图片中取出相应的三角形区域,OpenGL ES将该区域进行放缩旋转后绘制到三角片上。具体处理代码如下所示:

obj = new MgnavObject(true, true, false); // 第一个参数表示使用纹理坐标,第三个参数表示不使用颜色

下面代码导入纹理:


// 装入纹理数据
Bitmap bmp = null;
bmp = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/building/L6HF2703.JPG");
String textureId = "cube";
if (bmp != null) {
Shared.textureManager().addTextureId(bmp, textureId, false);
bmp.recycle();
TextureVo tvo = new TextureVo(textureId);
obj.textures().add(tvo);
}
scene.lightingEnabled(false);

从上面的代码中可以看出,是读取SD卡中的一个文件作为纹理图片。

下面为立方体正面赋给纹理坐标:

// 1. front
normalX = 0f; normalY = 0f; normalZ = 1.0f;
// 1.1. 加入前面右上部三角片
textureU = 0.0f; textureV = 0.0f;
short f1p1Idx = vertices().addVertex(-width, height, deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
textureU = 1.0f; textureV = 1.0f;
short f1p3Idx = vertices().addVertex(width, -height, deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
textureU = 1.0f; textureV = 0.0f;
short f1p2Idx = vertices().addVertex(width, height, deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
faces().add(f1p1Idx, f1p3Idx, f1p2Idx);
// 1.2. 加入前面的左下部三角片
textureU = 0.0f; textureV = 1.0f;
short f1p4Idx = vertices().addVertex(-width, -height, deepth,
textureU, textureV,
normalX, normalY, normalZ,
colorR, colorG, colorB, colorA);
faces().add(f1p1Idx, f1p4Idx, f1p3Idx);

对于上面的纹理坐标比较难以理解,下面通过图形来加以说明:

图1

上面是立方体正面顶点编号,上面代码加入了1、3、2及1、4、3这两个三角片。

本来的纹理坐标如下图所示:

图2

其坐标原点在左下角,与OpenGL ES几何元素的坐标是上下颠倒的。在从其他3D软件导出时,这些软件将自动将图片进行上下颠倒。但是我们这里直接用图片贴图时,我们需要人工将纹理图片颠倒一下,在这里将纹理坐标进行上下颠倒:

图3

这时与顶点所对就的纹理坐标就是代码中所设置的值。

 

注:由于不能将图片贴上,请看本博文新浪博客上的完整版:http://blog.sina.com.cn/s/blog_5d8486b40100q2vc.html

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为荣耀v8应用锁忘记蜜码怎么办 阿里巴巴一键代销被投诉受假怎么办 登录小米云服务怎么删除密码怎么办 苹果6云空间连接不上怎么办 买家收到淘宝网交易异常通知怎么办 快递把我秒杀的货弄丢了怎么办 手机淘宝退货物流单号填错了怎么办 买家要求退货退款但是不发货怎么办 多给买家寄包裹不接电话怎么办 给买家发货物流单号错了怎么办 淘宝退货退款快递单号填错了怎么办 淘宝不小心点了延迟收货怎么办 淘宝快递地址错了货已经发了怎么办 卖家送运费险买家填错单号怎么办 买家无赖点了延迟收货卖家怎么办 淘宝卖家快递单号填错了怎么办 淘宝店有当天的快递忘记发货怎么办 在美国官网买东西少寄了东西怎么办 闲鱼退货货收了不退钱怎么办 闲鱼退货卖家收到东西不退钱怎么办 淘宝店铺物流服务给差评怎么办 在合肥东方融资网被骗了怎么办 微信今年绑定频繁明年再试怎么办 手机号码注销了微信密码忘了怎么办 摄像师把婚礼资料弄丢了怎么办 青岛拍的婚纱照修的不好怎么办 鞋店剩的鞋都是小码的怎么办 淘宝想买的衣服下架了怎么办 买家要求到付仲裁发生运费怎么办 淘宝退货退款页面刷新不出来怎么办 淘宝退货退款快递单号写错了怎么办 淘宝上已经退款的店家还发货怎么办 千牛买家下单付款了卖家怎么办 京东货到付款支付宝支付退款怎么办 美萍餐饮管理系统下单错误怎么办 淘宝店上传宝贝显示空间不足怎么办 淘宝店品牌被投诉未授权怎么办 淘宝天猫退货单号填错了怎么办 淘宝退货我把快递单号弄丢了怎么办 唯品会退货快递单号填错了怎么办 天猫换货写错运单号怎么办