复习
第三章中提供了一个简单的opengl程序
#include<GL/glut.h>
#include<cstdio>
void init(void) {
glClearColor(1.0, 1.0, 1.0, 0.0); //设置窗口背景
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0, 200.0, 0.0, 150.0); //投影范围,x上0-200,y上0-150
}
void lineSegment(void) { //设置一条直线
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.4, 0.2);
glBegin(GL_LINES);
glVertex2i(180, 15); //设置两个点成线
glVertex2i(10, 145);
glEnd();
glFlush();
}
GLenum errorCheck() { //debug
GLenum code;
const GLubyte *string;
code = glGetError();
if (code != GL_NO_ERROR) {
string = gluErrorString(code);
fprintf(stderr, "OpenGL error:%s\n", string);
}
return code;
}
int main(int argc, char* argv[]) {
glutInit(&argc, argv); //使用opengl必备
glutCreateWindow("I an Windows"); //设置窗口标题
init();
errorCheck();
glutDisplayFunc(lineSegment);
glutMainLoop();
}
上面函数我简单的注释了下,此外还有glutInitWindowsPosition()可以设置窗口位置。
重点一提的式OpenGL的出错处理
OpenGL发现错误时,会在内部记录一个出错代码,但在查明这次出错之前不会记录其他的出错代码,也就是说一次只能查一个错。
OpenGL基本库同时也记录的一些出错代码,不过我感觉基本google就行
习题
ps:虽然没有在网上找到标准答案,不过会在vs上实际跑一次,应该还是ojbk的
3.1
glClearColor()
3.2
glutInitWindowsPostion(75,50);
glutInitWindowSize(200,150);
3.3
glutInitWindowSize(150,250);
gluOrtho2D(0.0, 150.0, 0.0, 250.0);
glBegin(GL_LINES);
glVertex2i(150,200);
glVertex2i(0,0);
glEnd();
3.4
OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库。
详细的可以看gl,glu,glut区别
3.5
这个函数告诉GLUT当窗口内容必须被绘制时,那个函数将被调用.当窗口改变大小或者从被覆盖的状态中恢复,或者由于调用glutPostRedisplay()函数要求GLUT更新时,执行func参数指定的函数.
3.6
3.7
为了使观察处理独立于输出设备,我们可以将对象描述转换到一个中间坐标系,这个坐标系既独立于设备,又可以容易地转变成设备坐标系。通常将这个中间坐标系称为规范化设备坐标系,其坐标范围为 [0,1],这样可以使二维观察结果独立于可能使用的各种输出与显示设备,提高应用程序的可移植性与设备无关性。