- 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(); }