OpenGL学习日记1状态管理和绘制几何物体

  • 清除窗口 Clear the window

         目的:绘制新场景时一般需要将背景清除为某一种颜色。

         函数:glClearColor(R,G,B,alpha);//设置当前清除颜色

                     glClear(Buffer Name);//颜色缓冲区:GL_COLOR_BUFFER_BIT; 深度缓冲区:GL_DEPTH_BUFFER_BIT;

                                                              累积缓冲区:GL_ACCUM_BUFFER_BIT; 模板缓冲区:GL_STENCIL_BUFFER_BIT。

         对每一个想要清除的缓冲区都需要设置相应的清除值,颜色就是glClearColor();深度是glClearDepth();按照此命名方式以此类推。

         可以同时清除多个缓冲区,在glClear( )中将Buffer的名字用“|“连接,表示逻辑or。同时清除缓冲区往往会比线性清除缓冲区高效。

        例子:同时清除  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

                   线性清除  glClear(GL_DEPTH_BUFFER_BIT);

                                   glClear(GL_COLOR_BUFFER_BIT);

  • 指定颜色 Specifying a Color

       因为OpenGL是状态机,所以每一次绘制一个物体或场景时就需要设置一次需要的颜色。这里只学习简单的设置颜色,不考虑光照条件等。现在只考虑设置当前颜色。

       函数:glColor4f(R,G,B,alpha);//函数名的命名很有意思,glColor(表示对颜色的设置)+3|4(表示参数个数,4个参数时多了alpha)+f(表示参数类型是浮点数)

      常用的OpenGL颜色值://现在暂时不考虑alpha的值。

              黑色0.0 0.0 0.0

              红色1.0 0.0 0.0

              绿色0.0 1.0 0.0

              蓝色0.0 0.0 1.0

              黄色1.0 1.0 0.0

              青色0.0 1.0 1.0

              白色1.0 1.0 1.0

  • 强制完成绘图操作 Forcing Completion of Drawing

       目的:强制刷新,保证绘图命令将被执行而不是在缓冲区中等待。

       函数:

       glFlush(void);//有时图画不出来,用flush强制冲出来。强制以前所发出的OpenGL命令开始执行。

       glFinish(void);//强制以前所发出的OpenGL命令完成执行。

  • 坐标系统工具箱

       在刚打开窗口、移动和改变窗口大小时,计算机都需要重新绘制一次刚刚绘制的图形,这就需要重新调用一次刚刚绘制这个图形的代码。也就是说应该把重绘场景所需要的所有的代码放到回调函数里。

        上面说的过程,GLUT会自动执行,只需在glutReshapeFunc()中注册回调函数。

         Reshape回调函数

         void reshape(int w, int h) {具体见课本}

         上课的时候老师演示程序,在回调函数reshape()那里设置了断点,在一开始绘制图形时,程序运行到这一行时就会停下,在调整窗口大小或者移动窗口时也会在设置的断点处停下。问过师姐之后才回忆起来。好像对这个回调函数理解了。之后应该自己调试一下,设置一下断点,看一下是不是这么一回事。

程序练习1:

// GL_ex1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<glut.h>

void display()//在这里添加断点
{
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(1.0,1.0,0.0);
	glBegin(GL_POLYGON);
		glVertex3f(0.25,0.25,0.0);
		glVertex3f(0.75,0.25,0.0);
		glVertex3f(0.75,0.75,0.0);
		glVertex3f(0.25,0.75,0.0);
	glEnd();
	glFlush();
}
void init()
{
	glClearColor(1.0,1.0,1.0,0.0);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
}

int _tmain(int argc, char** argv)//修改了这里面的参数
{
	glutInit(&argc,argv);//这里是什么意思?
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
	glutInitWindowSize(250,250);
	glutInitWindowPosition(100,100);
	glutCreateWindow("ex1");
	init();
	glutDisplayFunc(display);
	glutMainLoop();
	return 0;
}


     

你可能感兴趣的:(OpenGL)