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我也传了,可以用的不能用找我

时间: 2024-08-29 12:18:36

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

第十四章 红黑树——C++代码实现

红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树.红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值.除了具备该特性之外,红黑树还包括许多额外的信息. 红黑树的每个节点上都有存储位表示节点的颜色,颜色是红(Red)或黑(Black).红黑树的特性:(1) 每个节点或者是黑色,或者是红色.(2) 根节点是黑色.(3) 每个叶子节点是黑色. [注意:这里叶子节点,是指为空的叶子

GitHub从小白到精通(第四章 提交第一行代码)

之前的这篇文章「从0开始学习 GitHub 系列之「Git速成」」相信大家都已经对 Git 的基本操作熟悉了,但是这篇文章只介绍了对本地 Git 仓库的基本操作,今天我就来介绍下如何跟远程仓库一起协作,教你们向 GitHub 上提交你们的第一行代码! 1. SSH 你拥有了一个 GitHub 账号之后,就可以自由的 clone 或者下载其他项目,也可以创建自己的项目,但是你没法提交代码.仔细想想也知道,肯定不可能随意就能提交代码的,如果随意可以提交代码,那么 GitHub 上的项目岂不乱了套了,

第四章 Python外壳:代码结构

Python的独特语法: 不使用分号结束语句,而是回车: 通过代码缩进来区分代码块: if.while.for等,都不用括号,但不能没有冒号(:). 如何将一行命令分为多行? >>> myNameIs = "LiZhiXin." >>> myNameIs 'LiZhiXin.' 4.1 条件语句和循环语句 如何使用if.elif和else进行比较? >>> a = 1 >>> if a < 2: print

视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版)

1 #include <iostream> 2 #include <fstream> 3 using namespace std; 4 #include <opencv2/core/core.hpp> 5 #include <opencv2/highgui/highgui.hpp> 6 #include <Eigen/Geometry> 7 #include <boost/format.hpp> // for formating st

[Learn Android Studio 汉化教程]第四章 : Refactoring Code

[Learn Android Studio 汉化教程]第四章 : Refactoring Code 第四章 Refactoring Code    重构代码 在Android Studio中开发,解决方案不会总是一蹴而成的.作为一个有效率的编程者,在你的开发,调试和测试中需要一些弹性以及代码重构.随着在这章中的行进,你将明白Android Studio如何产生代码:在这章里你将看到Android Studio如何重构你的代码.重构代码最大的风险是可能引入不期望的错误.通过分析某些风险重构操作的结

OpenGL ES着色器语言之变量和数据类型(一)(官方文档第四章)和varying,uniform,attribute修饰范围

OpenGL ES着色器语言之变量和数据类型(一)(官方文档第四章)   所有变量和函数在使用前必须声明.变量和函数名是标识符. 没有默认类型,所有变量和函数声明必须包含一个声明类型以及可选的修饰符.变量在声明的时候首先要标明类型,后边可以跟多个变量,之间用逗号隔开.很多情况下,变量在声明的时候可以使用等号“=”进行初始化. 用户定义类型可以使用struct,在结构体中所有变量类型都必须是OpenGL ES着色器语言定义的关键字.OpenGL ES着色语言是类型安全的,因此不支持隐式类型转换.

OpenGL ES着色器语言之变量和数据类型(二)(官方文档第四章)

OpenGL ES着色器语言之变量和数据类型(二)(官方文档第四章) 4.5精度和精度修饰符 4.5.1范围和精度 用于存储和展示浮点数.整数变量的范围和精度依赖于数值的源(varying,uniform,纹理查找,等等),是不是顶点或者片元着色器,还有其他一些底层实现的细节.最低存储需要通过精度修饰符来声明.典型地,精度操作必须要保留变量包含的精度存储.仅有的例外是需要大量复杂计算的内建函数,如atan(),返回值的精度低于声明的精度. 强烈建议顶点语言提供一种匹配IEEE单精度浮点数或更高精

第四章关键的构建决策(代码大全2)

一旦你能确定 “构建”的基础已经打好,那么准备工作就转变为针对特定“构建”的决策了.第3章“三思而后行:前期准备”讨论了设计蓝图和建筑许可证在软件业务里的等价物.你可能对那些准备工作没有多少发言权,所以在第3章关注的焦点是确定“当构建开始后你需要做什么”.本章关注的焦点是程序员和技术带头人个人必须(直接或间接)负责的准备工作.在向工地进发之前,如何选择适用的工作别在你的腰带上,你的手里车里应该装哪些东西?本章讨论的就是这事务在软件中的等价物. 4.1 选择编程语言(Choice of Progr

第四章:重构代码[学习Android Studio汉化教程]

第四章 Refactoring Code The solutions you develop in Android Studio will not always follow a straight path from design to finish. To be an effective Android programmer, you need to be flexible and refactor your code as you develop, debug, and test. In t