在研究Chromium渲染机制以及硬件加速等地方,都涉及到OpenGL的许多方方面面的内容,鉴于以前没接触过OpenGL,所以需要从一些容易入门的教程开始,网上都推荐Nehe的OpenGL教程,准备从把所有教程边学边翻写,开发平台是 Mac + Xcode + c。
首先得搭建OpenGL平台,由于Mac OS系统自带GLUT,所以无需再从网上下载各种openGL库文件。但是需要Xcode,相信在mac上做过开发的人,这都知道这个利器。本文用到的Xcode版本是7.1。
简要步骤如下:
#1 在Xcode的启动面板中,选择 Application,Command Line Tool,如下图所示;
#2 然后填上必要的选项,另外开发语言可以选择C/C++,本文选择使用C,如下图所示;
#3 点击create之后,会进入代码编写界面,点击main.c开始coding。
#4 只需要敲上以下代码即可进行 Command +R,进行编译运行了,另外退出命令是Command +q:
#include <stdio.h>
#include <GLUT/glut.h>
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex3f(-0.5f, -0.5f, 0.0f); // 四边形的左下顶点
glVertex3f(-0.5f, 0.5f, 0.0f); // 四边形的左上顶点
glVertex3f( 0.5f, 0.5f, 0.0f); // 四边形的右上顶点
glVertex3f( 0.5f, -0.5f, 0.0f); // 四边形的右下顶点
glEnd();
glFlush();
}
int main(int argc,const char * argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("OpenGL Demo_1");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
编译运行以上代码后,效果是这样的:
其实这个示例代码真的非常简单,但是为了后面更方面地学习OpenGL,还需要对OpenGL做更多的配置,以及事件处理等。
OpenGL更多配置:
void initOpenGL() {
glShadeModel(GL_SMOOTH);
glClearColor(0.0f,0.0f, 0.0f,0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
}
屏幕改变事件处理:
void reshape(int width,intheight) {
if (height == 0)
height = 1;
glViewport(0,0, (GLsizei)width, (GLsizei)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, (GLfloat)width / (GLfloat)height,0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
按键事件处理:
void keyboard(unsignedcharkey, int x,int y) {
switch (key) {
case 27:
exit(0);
break;
}
}
具体代码参见源码。