OpenGL学习笔记
目录
OpenGL学习笔记
目录OpenGL 20实践
第一章
1安装工具3初始化OpenGL4创建Renderer类 第二章 定义顶点和着色器
34 点直线及三角形42 把内存从Java堆复制到本地堆 第三章 编译着色器及在屏幕上绘图
21 创建一个新的着色器对象 第七章 用纹理增加细节
22 理解纹理过滤 OpenGL ES 30编程指南
第11章片段操作
1缓冲区2片段测试6在帧缓冲区读取像素 第12章帧缓冲区对象fbo
OpenGL 2.0实践
第一章
1.1安装工具
每一帧绘制前清空屏幕是一种很好的做法,对于目前的GPU,不但不增加负担,还会避免很多问题
1.3初始化OpenGL
需要在Activity中的onResume()和onPause()中同步GLSurfaceView的onResume()和onPause()
1.4创建Renderer类
Renderer的onSurfaceCreated()应该是在Activity的onResume()中调用GLSurfaceView的onResume()的时候调用,所以可能会调用多次Renderer的回调方法均在一个单独的渲染线程中调用,只能在这个线程中调用OpenGL,在UI线程进行UI操作;两者的通信方式可以通过在UI线程中调用GLSurfaceView.queueEvent()给渲染线程传一个Runnable,或者在渲染线程中调用Activity.runOnUIThread()传Runnable给主线程
第二章 定义顶点和着色器
2.3.4 点、直线及三角形
在OpenGL里,只能绘制点、直线以及三角形
2.4.2 把内存从Java堆复制到本地堆
OpenGL是本地系统库用C写的,要想与其进行数据通信,数据要放在本地内存堆而非Java内存堆,两种实现方式:JNI和xxxBuffer(xxx为数据类型,例如Float)本地内存会随着进程结束被释放,但是如果开了很多的本地内存的话,则需要自己进行管理
第三章 编译着色器及在屏幕上绘图
3.2.1 创建一个新的着色器对象
OpenGL不会抛出异常,而是返回异常值,如0。可以用glGetError()查看是不是某个OpenGL的调用导致了错误
第七章 用纹理增加细节
7.2.2 理解纹理过滤
对于最近邻过滤、双(三)线性插值、MIP贴图都没怎么看懂,后面有时间再查吧
OpenGL ES 3.0编程指南
第11章片段操作
11.1缓冲区
有三种缓冲区:颜色(color)缓冲区,深度(depth)缓冲区,模板(stencil)缓冲区颜色缓冲区 有16位的(RGB565)也有32位的(RGBA8888),也有可能是双重缓冲,一个前台一个后台,前台显示后台渲染,更加流畅用glClear清除指定的缓冲区,例如glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)。用来清除缓冲区的默认颜色、深度、模板值可以用glClearColor();glClearDepthf();glClearStencil()来设置
11.2片段测试
剪裁测试:限定一个区域,进一步限定帧缓冲区中可以写入的像素模板缓冲区测试:模板缓冲区保存每个像素位置的模板值。模板测试通过指定像素位置的掩码条件,决定不同位置的新的片段是否可以通过测试,并决定是否更新模板值。深度测试:用于隐藏表面的消除,深度缓冲区保存渲染表面上每个像素与视点最近物体的距离值,比较新输入片段与颜色缓冲区原像素的距离值并决定是否通过测试
11.6在帧缓冲区读取像素
用glReadPixels(x,y,width,height,format,type,*pixels)从帧缓冲区读取像素,pixels的数组大小应该是width*height*bytesPerPixel
第12章帧缓冲区对象(fbo)
fbo的作用在于把texture绘制在屏幕上之前,对texture进行预处理(我是这么理解的,不一定对)实现方式是创建一个fbo,把texture绑上去,然后激活fbo,之后一切的绘制就都是屏幕外以该texture为目标的了最后完成处理,把fbo关掉,然后就可以把处理好的texture画到屏幕上去