看了带纹理的三角形这个demo。
该demo最大的和上一个最大的不一样就是:用GLES10的静态方法,而不是GL10
不同之处:
ThestaticAPIsexposemoreoftheOpenGLESfeaturesthanthe
javax.microedition.khronos.openglesAPIs,andalso
provideaprogrammingmodelthatisclosertotheCOpenGLESAPIs,which
maymakeiteasiertoreusecodeanddocumentationwrittenfortheOpenGLESAPIs.
1、设置纹理前,设置了EGL。
下面这句设置了:不需要深度缓存,可提升性能
mGLView.setEGLConfigChooser(false);
2、纹理的初始化
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
会影响到纹理的表现,参数挺多的,不同的参数表现出来有些不一样。(换了几个参数没有区别,估计在特定形式下有大作用)
int[] textures = new int[1];
glGenTextures(1, textures, 0);
mTextureID = textures[0];
glBindTexture(GL_TEXTURE_2D, mTextureID);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
mTextureLoader.load(gl);
private class RobotTextureLoader implements TextureLoader {
public void load(GL10 gl) {
InputStream is = mContext.getResources().openRawResource(
R.raw.robot);
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(is);
} finally {
try {
is.close();
} catch (IOException e) {
// Ignore.
}
}
GLUtils.texImage2D(GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
}
}
3、在onDrawFrame中绘制
voidglActiveTexture(GLenumtexUnit);
功能:选择一个纹理单元,接下来的纹理函数将修改该纹理单元.
中间还有一些对该纹理的设置,没有写出,activie可翻译出激活的意思,即对这个纹理已经设置号的参数再修改下
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTextureID);
mTriangle.draw(gl);
4、三角形类
没啥好说的,定义好顶点坐标、纹理坐标,再写个draw方法就行了。
值得注意的是:
api中这个三角形的纹理坐标较大,超过的范围根据其设定的参数进行了重复