OpenGL 描点

摘自:http://blog.sina.com.cn/s/blog_4c7fa77b010007fr.html

#include <windows.h> // 根据系统需要

#include <gl/gl.h>

#include <gl/glut.h>

void myInit(void)

{

  glClearColor(1.0,1.0,1.0,0.0); // 设置白色背景

  glColor3f(0.0f,0.0f,0.0f);  // 设置绘图颜色

  glPointSize(8.0); // 一个点是4×4像素

  glMatrixMode(GL_PROJECTION);

  glLoadIdentity();

  gluOrtho2D(0.0,640.0,0.0,480.0);

}

void myDisplay(void)

{

  glClear(GL_COLOR_BUFFER_BIT); // 清空显示

  glBegin(GL_POINTS);

  glVertex2i(100,50);  // 绘制3个点

  glVertex2i(100,130);

  glVertex2i(150,130);

  glEnd();

  glFlush(); // 将所有的输出显示出来

}

void main(int argc, char** argv)

{

  glutInit(&argc,argv); // 初始化工具套件

  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设置显示模式

  glutInitWindowSize(640,480); // 设置窗口尺寸

  glutInitWindowPosition(100,150); // 设置窗口在屏幕上的位置

  glutCreateWindow("my first attempt"); // 打开屏幕窗口

  glutDisplayFunc(myDisplay); // 注册重新绘制函数

  myInit();

  glutMainLoop(); // 进入不断的循环

}

先看一下主函数,在主函数中要进行几个操作:

初始化的工作,包括工具套件的初始化还有自定义的初始化(myInit);窗口设置(窗口大小,位置,显示模式等);注册回调函数等。如果使用事件驱动的话,必须添加glutMainLoop();使程序进入到等待事件发生的状态

使用glut可以很方便地进行事件驱动函数的注册,如注册鼠标动作只需:

glutMouseFunc(myMouse);

这样就注册了鼠标动作响应函数myMouse,可以直接在myMous函数里添加鼠标动作所执行的操作,前面程序中glutDisplayFunc(myDisplay); 注册了重绘函数myDisplay,当窗口重绘时就会执行myDisplay函数的内容,即绘制三个点。

再看看这一段

glBegin(GL_POINTS);

 glVertex2i(100,50);  // 绘制3个点

 glVertex2i(100,130);

 glVertex2i(150,130);

 glEnd();

这一段是绘制三个点的函数。在OpenGL中,绘制点、线、拆线、多边形等对象时必须传送一序列的点,这些点必须处于glBegin()glEnd()之间,glBegin()里的参数确定要画哪个对象,这里用的GL_POINTS是用于绘制点的,这个常量内置于OpenGL中,类似的常量还有GL_LINES,GL_POLYGON等。

再看看glVertex2i这个函数,在OpenGL中很多函数都跟这个函数一样具有几个可变的部分,gl前缀,Vertex基础命令,2参数数目,i参数类型,i表示参数为整型,如果不考虑参数类型时可用*

:gl里使用的整型数为32位,如果在系统里使用的是16位可能会造成错误。在定义参数时可以使用gl的类型,如GLint,GLfloat等。


你可能感兴趣的:(OpenGL, ,glVertex2i)