资源描述:
《一步一步教你用opengles编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一步一步教你用OpenGLES编程(Step-by-stepprogramminginOpenGLSE)OpenGLES是针对手机、PDA和游戏主机等嵌入式设备制定的编程接口,是由OpenGL的不同版本演化而来,目前已有OpenGLES1.x和OpenGLES2.0,OpenGLES2.0添加了对可编程管线的支持.OpenGLES1.X又有OpenGLES1.0和OpenGLES1.1,前者支持定点实数(fixed)和浮点数(float),后者只支持定点数(fixed)库来自VicentMobile3DRenderingLibrary的og
2、les-bin-1.0.0,解压后拷贝include文件夹到Mobile的SDK下的Include文件夹下,拷贝bin文件夹下的debug和release到工程文件下的debug和release下新建智能项目工程HelloOpenGL_Quad如下配置工程的DLL和LIB这里对opengles库使用的是静态引用,因此要在工程中设好对.lib的引用路径和附加库设置:初始化设备,OpenGL是具备平台无关性的,所谓的平台无关,只是为OpenGL提供了不同平台的不同接口,使其建立起opengl的显示环境.这里用到的是EGL规范.那么先建立一个初始
3、化设备函数BOOLInitOGLDevice(HWNDhwnd),参数是当前窗口句柄.获取显示输出设备接口,EGL就是我们进行设备初始化工作的关键API,因此这里用到的函数都是eglXXXXXX,获取显示接口函数包括eglGetDisplay(NativeDisplayTypenative_display)和eglGetCurrentDisplay(),前面一个是建立一个显示接口,后者是从当前的opengl环境返回一个opengl接口g_eglDisplay=eglGetDisplay(GetDC(hwnd));初始化显示设备,这是一个内部
4、初始化的过程,可能为显示结构内部变量给初值eglInitialize(g_eglDisplay,&major,&minor)framebuffer属性定义,再使用eglChooseConfig找到最匹配这项属性列表的配置定义,并返回配置项,返回的配置被使用来建立表面和状态机,EGLintattrib_list[]={EGL_DEPTH_SIZE,16,EGL_RED_SIZE,5,EGL_GREEN_SIZE,6,EGL_BLUE_SIZE,5,EGL_NONE};eglChooseConfig(g_eglDisplay,attrib_li
5、st,configs_list,num_config,&num_config)根据配置描述一个设备表面eglCreateWindowSurface(g_eglDisplay,configs_list[0],hwnd,NULL);返回一个相关属性设置的状态机eglCreateContext(g_eglDisplay,configs_list[0],EGL_NO_CONTEXT,attrib_list);建立Opengl当前环境eglMakeCurrent(g_eglDisplay,g_eglSurface,g_eglSurface,g_egl
6、Context);至此一个完整可用的Opengl渲染平台就建立好了,事实上整个创建的概念与windowsdirecte3DMobile有些相似.现在要建立渲染配置这句类似于d3dmdevice的clear函数glClearColor(0.5f,0.5f,0.5f,1.0f);下面是对渲染的一系列配置,glDisable和glEnable被用来打开或关闭一些渲染的配置,比如光照,双面渲染,贴图支持,Z缓冲支持glDisable(GL_LIGHTING);glShadeModel(GL_SMOOTH);glEnable(GL_CULL_FACE
7、);glCullFace(GL_BACK);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LEQUAL);glClearDepthf(5.0f);glEnable(GL_TEXTURE_2D);这是对贴图渲染的配置,规定贴图的算法glTexParameterx(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameterx(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameterx(
8、GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);glTexParameterx(GL_TEXTURE_2D,GL_TEXTUR