OpenGL学习(一)

int InitGL(GLvoid)

在自定义的CreateGLWindow函数中调用了InitGL函数,它用来初始化OpenGL,实现如下所示:

int InitGL(GLvoid)           // All Setup For OpenGL Goes Here
{
glShadeModel(GL_SMOOTH);        // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);     // Black Background
glClearDepth(1.0f);          // Depth Buffer Setup
glEnable(GL_DEPTH_TEST);        // Enables Depth Testing
glDepthFunc(GL_LEQUAL);         // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
return TRUE;           // Initialization Went OK
}

上面:

glShadeModel函数用来设置阴影的效果,主要有GL_SMOOTH和GL_FLAT两种效果,其中GL_SMOOTH为默认值,表示平滑阴影效果;

glClearColor函数设置背景颜色,参数基于RGBA颜色模型,需要4个分量的颜色值;

glClearDepth函数设置深度缓冲区的,它的含义就在OpenGL窗口绘制的图形深入到屏幕中的程度,深度的意义就是在三维空间中的z坐标的数值,z取0时表示在平面上,你就看不到窗口中的图形了,所以负值越小,越远离窗口平面向里,说明窗口中的图形离我们观察者的距离变远了;

glEnable(GL_DEPTH_TEST); 用来开启更新深度缓冲区的功能,也就是,如果通过比较后深度值发生变化了,会进行更新深度缓冲区的操作;

glDepthFunc(GL_LEQUAL);在调用glEnable(GL_DEPTH_TEST); 开启这个功能以后,当深度变化小于等于当前深度值时,更新深度值。

glHint函数用来规范OpenGL的行为的,使得图形能够更好地被控制以显示在窗口中。

int DrawGLScene(GLvoid)

然后,为了在OpenGL窗口中进行绘图操作,需要设定一个场景,在DrawGLScene函数中实现:

int DrawGLScene(GLvoid)          // Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
glLoadIdentity();          // Reset The Current Modelview Matrix
return TRUE;           // Everything Went OK
}

上面:

glClear函数用来清除屏幕为一种指定的颜色,也就是通过glClearColor函数指定的颜色,来设定当前屏幕的颜色;

glLoadIdentity函数是用一个4*4单位矩阵来替换当前的矩阵。

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)

在创建一个OpenGL窗口完成之后,需要对这个窗口进行初始化,是在ReSizeGLScene函数中实现的:

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)   // Resize And Initialize The GL Window
{
if (height==0)           // Prevent A Divide By Zero By
{
   height=1;           // Making Height Equal One
}

glViewport(0,0,width,height);       // Reset The Current Viewport

glMatrixMode(GL_PROJECTION);       // Select The Projection Matrix
glLoadIdentity();          // Reset The Projection Matrix

// Calculate The Aspect Ratio Of The Window
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

glMatrixMode(GL_MODELVIEW);        // Select The Modelview Matrix
glLoadIdentity();          // Reset The Modelview Matrix
}

上面:

glViewport函数用来设置在窗口中的视区的,即我们要在该函数指定的视区内所能观察的范围;

glMatrixMode函数用来设置当前矩阵模式的,在设定的矩阵模式基础之上,可以进行矩阵运算来进行各种变化,它有三个取值:

GL_MODELVIEW    模型视图矩阵
GL_PROJECTION   投影矩阵
GL_TEXTURE         纹理矩阵

gluPerspective函数设置视景,即观察者能够看到的窗口中的图形的状态,它主要是在前面进行的矩阵设置基础之上,根据参数进行矩阵运算。

总结

在学习中:

InitGL函数中初始化一般不需要变化了;

如果要进行场景的设置,可以通过在ReSizeGLScene函数中进行设置;

如果要实现一些画图的操作,当然是在DrawGLScene函数中进行编程。


你可能感兴趣的:(编程,buffer,图形,Matrix,initialization,testing)