说明:内容为计算机图形学(第四版)这本书的读书笔记,会记录这本书的一些编码知识和其他内容,目标:将厚书读薄yeah~
1.OpenGL基本语法:
2.附加库:
3.OpenGL的安装和环境配置:
示例1:使用OpenGL画一条线:
运行结果:
/*
By:MyNameIsAngela
2016-9-9 [百日读书计划]Day1-读书笔记-计算机图形学(第四版)-P33
编程工具:Visual Studio 2012 Pro + glut 3.7.6
注:所有的注释均在该函数的右侧或上方
*/
#include
//gult.h已经包含了gl.h 和glu.h 所以不需要重复写头文件
void init (void)
{
//对显示窗口设置背景颜色,前三个变量为红、绿、蓝,最后一个为alpha值α,表示透明度
//前三个变量值的范围为[0.0-1.0],若全为1.0则为白色,若全为0.0则为黑色
//最后一个变量值的范围为[0.0-1.0]若设1.0则不透明,若设0.0则完全透明
//此处用RGB颜色值将显示窗口的背景颜色设定为白色
glClearColor(1.0, 1.0, 1.0, 0.0);
//因为OpenGL采用三维观察操作来处理图形,所以显示二维图形时,需要将图形投影到显示窗口中
//此处表示使用正投影将世界坐标系二维矩形区域的内容映射到屏幕上
glMatrixMode(GL_PROJECTION);
//区域的x坐标值从0.0-200.0,y坐标值从0.0-150.0,只要是该矩形内定义的对象,都会出现在显示窗口中
gluOrtho2D(0.0, 200.0, 0.0, 150.0);
}
void lineSegment(void)
{
//让赋背景值的显示窗口在屏幕上出现???如果不赋背景值是否不需要该函数
//此处glClearColor即为颜色缓存(glClearColor中指定)的值
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.4, 0.2);
glBegin(GL_LINES);
glVertex2i(180, 15);
glVertex2i(10, 145);
glEnd();
glFlush();//强制清空所有缓存来处理OpenGL函数
}
void main (int argc, char** argv)
{
glutInit(&argc, argv);//初始化GLUT
//设定(显示窗口的缓存+颜色模型)
//此处显示窗口使用单个缓存,并用RGB颜色模型来选择颜色值
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
//给出显示窗口左上角相对屏幕的初始位置,若不设定的话,就使用默认位置和大小
//此处屏幕左上角位置为0,0,该显示窗口在屏幕左边界向右50个像素,屏幕上边界向下100个像素的位置上
glutInitWindowPosition(50,100);
glutInitWindowSize(400,300);//设定显示窗口的初始宽度和高度的像素数,此处窗口大小为宽度400像素,高度300像素
glutCreateWindow("An Example OpenGL Program 2016-9-9");//创建显示窗口(提供默认位置和大小)+给定窗口标题
init();
glutDisplayFunc(lineSegment);//指定显示窗口中显示的内容,即将()内的图赋给显示窗口
//将所有(已创建的显示窗口+其中的图形)显示在屏幕上。
//它显示初始图形,并使程序进入检查鼠标或键盘等设备输入的无穷循环之中
//ATTENTION!!!该函数必须是程序中的最后一个!!!
glutMainLoop();
}
示例1(无注释版):使用OpenGL画一条线:
/*
By:MyNameIsAngela
2016-9-9 [百日读书计划]Day1-读书笔记-计算机图形学(第四版)-P30
编程工具:Visual Studio 2012 Pro + glut 3.7.6
*/
#include
void init (void)
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0, 200.0, 0.0, 150.0);
}
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();
}
void main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50,100);
glutInitWindowSize(400,300);
glutCreateWindow("An Example OpenGL Program 2016-9-9");
init();
glutDisplayFunc(lineSegment);
glutMainLoop();
}
OpenGL和GLU记录错误的方法->使用出错编码
OpenGL出错编码(待补充)
示例2:OpenGL的出错处理
使用结果:会返回出错的符号常数,根据该符号常数的含义,可知该处发生何种错误
/*
By:MyNameIsAngela
2016-9-9 [百日读书计划]Day1-读书笔记-计算机图形学(第四版)-P34
编程工具:Visual Studio 2012 Pro + glut 3.7.6
注:所有的注释均在该函数的右侧或上方
示例2:OpenGL的出错处理
*/
#include
GLenum errorCheck()
{
//该调用返回当前的出错编码,并清除内部出错标志
//若返回值为GL_NO_ERROR则无错
GLenum code;
code = glGetError();
const GLubyte *string;
if(code != GL_NO_ERROR)
{
string = gluErrorString(code);
fprintf( stderr, "OpenGL error: %s\n", string);
}
return code;
}