OpenGL的使用

Welcome file

3.1.使用GLUT进行显示窗口显示

  使用OpenGL实用库的第一步是初始化GLUT。该初始化函数也能处理任何命令行变量,但不需要在第一个实例程序中使用参数。
完成GLUT初始化的语句是

  glutInit(&argc, argv);

  接着,需要说明的是 显示窗口在创建时要给定一个标题。这是以下的语句实现的:

  glutCreateWindow("An Example OpenGL Program"");

这里的单一变量可以是用做显示窗口标题的任何字符串。

  下面我们需要指定显示窗口要显示什么内容。为此,使用OpenGL函数创建一个图并将图的
定义传递给GLUT函数glutDisplayFunc,即将图赋给显示窗口。作为一个例子,假定我们在
称为lineSegment的过程中已经有了线段的OpenGL描述程序。则调用下列函数就将线段描述送到窗口:

  glutDisplayFunc(lineSegment);

  但是显示窗口还未出现在屏幕上。我们需要使用另一个GLUT函数来完成窗口处理操作。在执行下列语句后,
所有已创建的显示窗口连同其中的图形将被激活:

   glutMainLoop();

该函数必须是程序中的最后一个。它显示初始图形并使程序进入检查鼠标或键盘等设备输入的无穷循环之中。我们的第一个例子
不是交互式的,所以程序仅仅显示其中的图形直到显示窗口关闭。

  尽管我们创建的显示窗口有默认的位置和大小,但还是可以使用另外的GLUT函数来设定这些参数。
glutInitWindowPosition可用来给出显示窗口左上角的初始位置。该位置使用以屏幕左上角
为原点的整数坐标来表示。

  类似的, glutInitWindowSize函数用来设定显示窗口的初始宽度和高度的像素数。

  可以使用 glutInitDisplayMode函数来设定显示窗口的缓存和颜色模型等选项。
该函数的变量使用符号化GLUT常量来赋值。传送给该函数的常量值利用逻辑或操作组合起来。(glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);)事实上,单缓存( GLUT_SINGLE)和RGB颜色模型(GLUT_RGB
是默认的选项。

3.2.示例

# include <iostream>  
# include <GL/glut.h>  
  
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();}  
  
int main(int argc, char** argv)  
{  
 glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(50, 100); glutInitWindowSize(400, 300); glutCreateWindow("An Example OpenGL Program");  
 init(); glutDisplayFunc(lineSegment); glutMainLoop();}  

  glClearColor函数:前三个变量为R,G,B通道,第四个参数称为指定颜色的α\alpha值,其一个用途是作为
“调和”参数。在激活OpenGL调和参数时,α\alpha值用来为两个重叠对象确定结果颜色。其值为0.0表示完全透明的对象
而为1.0则表示不透明的对象。

  glClear(GL_COLOR_BUFFER_BIT):使赋值的窗口得到显示。GL_COLOR_BUFFER_BIT是一个符号常量,用来
指定它是颜色缓存(刷新缓存)中的位值,该缓存将使用glClearColor函数中指定的值来设定。

  glColor3f:显示场景中的对象选择各种颜色。3f表示我们在指定三个RGB颜色分量时使用浮点数。

此博客中的热门博文

Numberical Analysis --- Interpolation & Polynomial Approximation

Numberical Analysis --- Numerical Differentiation and Integration

C++基础碎碎念