Android OpenGL教程-第六课

原创 2011年01月13日 11:43:00

 

Android OpenGL 教程

第六课

纹理映射:

 

在这一课里,我将教会你如何把纹理映射到立方体的六个面。

 

激动的时刻来了,加载图片了。

复习一下android加载图片的知识。放一个pngdrawable里面。添加一个工具类,方便我们使用。

 

 

这样我们是不是可以直接用

Bitmap mBitmap = DataManage.getBitmap();

来获得这个bitmap了,当然需要在activity里面初始化这个DataManage

DataManage.init(this.getResources());

 

好了,开始把bitmap放到opengl里的纹理里面。

IntBuffer intBuffer = IntBuffer.allocate(1);

gl.glGenTextures(1, intBuffer);

首先让opengl准备些纹理,这里我们准备1个。glGenTextures第二个参数要求是IntBuffer,实际上就是一个int数组的变形,allocate几个就有几个纹理。

 

texture = intBuffer.get();

取得opengl准备的纹理,为了后面把图片绑定到这个纹理里面

 

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture);

开始绑定这个2D纹理

Bitmap mBitmap = DataManage.getBitmap();

GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, mBitmap, 0);

这一句才重要,此纹理是一个2D纹理 ( GL_TEXTURE_2D )。参数二代表图像的详细程度,通常就由它为零去了。参数三是数据的成分数。参数四是边框的值,一般就是“0”。据说openggl_es不支持纹理边界,所以必须设置为0

 

gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);

gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

 

下面的两行告诉OpenGL在显示图像时,当它比放大得原始的纹理大 ( GL_TEXTURE_MAG_FILTER )或缩小得比原始得纹理小( GL_TEXTURE_MIN_FILTER )OpenGL采用的滤波方式。通常这两种情况下我都采用 GL_LINEAR 。这使得纹理从很远处到离屏幕很近时都平滑显示。使用 GL_LINEAR 需要CPU和显卡做更多的运算。如果您的机器很慢,您也许应该采用 GL_NEAREST 。过滤的纹理在放大的时候,看起来马赛克的很。您也可以结合这两种滤波方式。在近处时使用 GL_LINEAR ,远处时 GL_NEAREST

 

 

有了纹理咋样弄的立方体上去呢,这里要用到纹理坐标:

先看纹理坐标数组

    private float[] mTextCoordArray={

           1.0f,0.0f,0.0f,0.0f,

0.0f,1.0f,1.0f,1.0f,

           0.0f,0.0f,0.0f,1.0f,

1.0f,1.0f,1.0f,0.0f,

           1.0f,1.0f,1.0f,0f,

0f,0f,0f,1.0f,

           0,1.0f,1.0f,1.0f,

1.0f,0f,0f,0f,

0f,0f,0f,1.0f,
1.0f,1.0f,1.0f,0f,

           1.0f,0f,0f,0f,

0f,1.0f,1.0f,1.0f

    };

   

    private FloatBuffer mTextCoordBuffer;

纹理的坐标就是用了把纹理贴到面上的坐标的对应关系

纹理的坐标是

左下角 00

左上角 0,1

右下角 1,0

右上角 1,1

 

这里面弄了12个面,表示六变形的12个面都画纹理。

 

OnDrawFrame里面添加的代码如下

 

 

Android OpenGL ES2.0编程教程系列之绘制图形(三)

原文链接 定义好想要用OpenGL绘制的图形后,你大概想要画它们了。绘制形状可能需要比你想象的更多的代码,因为API提供了在图形渲染管线上的大量的控制。 本节内容讲解如何使用OpenGL ES 2.0...
  • u011520181
  • u011520181
  • 2016年05月28日 23:51
  • 1068

Android OpenGL教程-第六课【转】

第六课 纹理映射:(在转之前 一开始没有弄明白,查阅资料,看了各路大神的逻辑后整明白了,最后附上自己的心得体会 以及代码!)在这一课里,我将教会你如何把纹理映射到立方体的六个面。激动的时刻来了,加...
  • qq_27686729
  • qq_27686729
  • 2017年11月06日 15:43
  • 71

OpenGL教程

  • 2017年08月23日 18:14
  • 143KB
  • 下载

OpenGL系列教程之一:OpenGL

这个页面包含了一些基础的OpenGL教程和说明。所有的例子程序都是在Code::Blocks和Orwell Dev-C++下使用C++编写的,当然也包括一些在linux和mac下运行所需要的mak...
  • wozhengtao
  • wozhengtao
  • 2016年09月26日 17:05
  • 3061

opengl入门教程(精)的学习笔记

1.小球旋转 知识点:1.光照、视角、材质、矩阵变换的基本用法 2.计算FPS #include "stdafx.h" #include #include #include #inclu...
  • u012356374
  • u012356374
  • 2014年03月21日 01:15
  • 2361

Android OpenGL教程-第一课

Android OpenGL 教程第一课快速的开始一个Android OpenGL项目首先,读懂我们的教程,需要有android的初步基础,我们这里只是通过android提供的SDK,来进行Open...
  • onicewalk
  • onicewalk
  • 2011年01月13日 11:32
  • 14013

NeHe OpenGL教程(完美版)

  • 2008年11月29日 19:55
  • 3.75MB
  • 下载

OpenGL系列教程之一:OpenGL

这个页面包含了一些基础的OpenGL教程和说明。所有的例子程序都是在Code::Blocks和Orwell Dev-C++下使用C++编写的,当然也包括一些在linux和mac下运行所需要的make...
  • u012501459
  • u012501459
  • 2013年10月22日 11:17
  • 2915

一步一步学android OpenGL ES2.0编程(1)

  • nkmnkm
  • nkmnkm
  • 2013年01月23日 11:01
  • 29019
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android OpenGL教程-第六课
举报原因:
原因补充:

(最多只允许输入30个字)