OpenGL编程学习(2)-画点画线函数

  • OpenGL画点函数

  OpenGL图元默认大小为一个像素单位,默认颜色为白色。画点函数为:
  

glVertex* ();

  星号(*)说明该函数要有后缀码。一般来说,会有2到3个后缀码。第一个后缀码代表维数,二维、三维、四维坐标分别用2、3、4等数字表示。第二个后缀码代表坐标的数值类型,如i(整数)、s(短整数)、f(浮点)、d(双精度浮点)等。glVertex中可以使用显式的坐标值或引入矩阵形式坐标位置的单个变量,此时需要第三个后缀:v(向量)。

  下面例子在斜率为2的直线上绘出了三个等距离的点。

  glBegin(GL_POINTS);
      glVertex2i (50, 100);
      glVertex2i (75, 150);
      glVertex2i (100, 200);
  glEnd();

  换一种方法,以矩阵形式表示上述坐标值:

  int point1 [] = {50, 100};
  int point2 [] = {75, 150};
  int point3 [] = {100, 200};
  glBegin(GL_POINTS);
      glVertex2iv (point1);
      glVertex2iv (point2);
      glVertex2iv (point3);
  glEnd();
  • OpenGL画线函数

  与OpenGL画点函数十分类似,不同在于glBegin()中的符号常量。
  使用图元常量GL_LINES可连接每一对相邻定点而得到一组直线段。

  glBegin(GL_LINES);
      glVertex2iv (p1);
      glVertex2iv (p2);
      glVertex2iv (p3);
      glVertex2iv (p4);
      glVertex2iv (p5);
  glEnd();

  上述代码可以画出线段p1-p2和p3-p4。

  使用GL_LINE_STRIP则可以获得折线,如果需要封闭的折线则需要重复某些点坐标。

  glBegin(GL_LINE_STRIP);
      glVertex2iv (p1);
      glVertex2iv (p2);
      glVertex2iv (p3);
      glVertex2iv (p4);
      glVertex2iv (p5);
  glEnd();

  上述代码画出折线p1-p2-p3-p4-p5。

  生成封闭折线的常量是GL_LINE_LOOP。

  glBegin(GL_LINE_LOOP);
      glVertex2iv (p1);
      glVertex2iv (p2);
      glVertex2iv (p3);
      glVertex2iv (p4);
      glVertex2iv (p5);
  glEnd();

  上述代码画出封闭折线p1-p2-p3-p4-p5-p1。

  • 示例代码
#include <GL/glut.h>

void init(){
  glClearColor (0.0, 0.0, 0.0, 0.0);
  glMatrixMode (GL_PROJECTION);
  gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}

void display(){
  int p1 [] = {110, 50};
  int p2 [] = {20, 0};
  int p3 [] = {55, 80};
  int p4 [] = {90, 0};
  int p5 [] = {0, 50};

  glClear (GL_COLOR_BUFFER_BIT);

  
  glBegin(GL_LINE_LOOP);
  glVertex2iv(p1);
  glVertex2iv(p2);
  glVertex2iv(p3);
  glVertex2iv(p4);
  glVertex2iv(p5);
  glEnd();

  glFlush();
}

void main(int argc, char *argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize(400, 300);
  glutCreateWindow("Five-Pointed Star");
  init();
  glutDisplayFunc(display);
  glutMainLoop();
}

  运行结果如下:
Five-Pointed Star_025

发表评论

电子邮件地址不会被公开。 必填项已用*标注