OpenGl第四章 纹理详细亮度调整代码注释

简介:

OpenGl使用纹理在上一个正方体中知识简单的添加了一个纹理,这一章主要是通过设置三个面的纹理来进行详细的学习;


上次纹理的调用是在onSurfaceCreated  的时候才调用,现在,在Render中当执行 onSurfaceChanged的时候,就对纹理进行初始化操作


/**
* 这是来进行纹理初始化的方法
* @param gl
*/
private void LoadTextures(GL10 gl) {
// create textures
gl.glEnable(GL10.GL_TEXTURE_2D);//首先启用纹理
texturesBuffer = IntBuffer.allocate(3);
gl.glGenTextures(3, texturesBuffer);  //生成纹理的数量

// 这个地方加载一张图片来做为我们的背景
Bitmap texture = BufferUtil.getTextureFromBitmapResource(context, R.drawable.crate);

// 设置第一个纹理
gl.glBindTexture(GL10.GL_TEXTURE_2D, texturesBuffer.get(0));//绑定纹理
/**
* 设置纹理的参数,设置纹理过滤器
*/

gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, texture, 0);  //生成纹理

//  设置第二个纹理
gl.glBindTexture(GL10.GL_TEXTURE_2D, texturesBuffer.get(1));
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, texture, 0);

// 设置第三个纹理
gl.glBindTexture(GL10.GL_TEXTURE_2D, texturesBuffer.get(2));
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR_MIPMAP_NEAREST);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
BufferUtil.generateMipmapsForBoundTexture(texture);


//释放bitmap
texture.recycle();
}


通过这个方法来初始化了纹理,然后在onSurfaceChanged的时候执行,


其他的方法基本上没有变动,因为是学习亮度调整所以还要在onSurfaceCreated中设置gl的亮度  

代码如下 // 亮度,三个面的亮度
gl.glEnable(GL10.GL_LIGHT0);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbBfr);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDifBfr);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPosBfr);




然后在就是要在onDrawFrame进行亮度的调整,因为


//跟新亮度
if (lighting) {
gl.glEnable(GL10.GL_LIGHTING);
} else {
gl.glDisable(GL10.GL_LIGHTING);
}

这就是对亮度的调整的代码,很简单,Demo我也传了,可以用的不能用找我

相关文章
|
12月前
|
数据安全/隐私保护 索引
Opengl ES之纹理数组
Opengl ES连载系列
172 0
|
缓存 API Android开发
Android OpenGL添加纹理
Android OpenGL添加纹理
Android OpenGL添加纹理
|
Android开发 异构计算
Android OpenGL ES(八)----纹理编程框架(二)
Android OpenGL ES(八)----纹理编程框架(二)
160 0
Android OpenGL ES(八)----纹理编程框架(二)
|
存储 Java API
Android OpenGL ES(八)----纹理编程框架(一)
Android OpenGL ES(八)----纹理编程框架(一)
274 0
Android OpenGL ES(八)----纹理编程框架(一)
|
缓存 算法 机器人
Android OpenGL ES(七)----理解纹理与纹理过滤
Android OpenGL ES(七)----理解纹理与纹理过滤
187 0
Android OpenGL ES(七)----理解纹理与纹理过滤
|
图形学
学习OpenGL ES之基本纹理
学习OpenGL ES之基本纹理
学习OpenGL ES之基本纹理
|
缓存 索引
OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
|
存储 缓存 C++
OpenGL学习笔记(十二):纹理的使用
OpenGL学习笔记(十二):纹理的使用
OpenGL学习笔记(十二):纹理的使用
|
索引
OpenGL ES 案例08:GLKit使用索引绘图 + 纹理颜色混合
OpenGL ES 案例08:GLKit使用索引绘图 + 纹理颜色混合
82 0
OpenGL ES 案例08:GLKit使用索引绘图 + 纹理颜色混合