glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, 800.0, 0.0, 600.0);
在创建图形的几何描述时,全部OpenGL图元的位置必须用gluOrtho2D函数定义的坐标系统中的绝对坐标给出。ios
2、OpenGL画点函数算法
使用下面的函数能够指定一个点的位置和坐标:windows
glVertex* ();这里*号表示该函数须要有后缀码,这些后缀码用来指明空间的尺寸、坐标值的数据类型和可能的向量形式坐标描述。
在上一节咱们看到绘制图形时使用以下代码:缓存
glBegin(GL_POINTS); glVertex2i(700, 15); glVertex2i(100, 555); glEnd();glBegin();函数用来指定要显示的图元类型,在绘制点的时候,图元类型常量是:GL_POINTS,begin和end之间必须有glVertex*();函数。用于指定数值的数据类型的后缀是:i(整数)、s(短整数)、f(浮点数)、d(双精度浮点数)。下面例子中咱们绘制了三个点:
glBegin(GL_POINTS); glVertex2i(25, 25); glVertex2i(50, 50); glVertex2i(100, 100); glEnd();换一种方法,咱们能够用矩阵来描述点:
int p1[]{25, 25}; int p2[]{50, 50}; int p3[]{100, 100}; glBegin(GL_POINTS); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glEnd();最后,绘制点的完整代码为:
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <math.h> #include <iostream> #include <string> #include <windows.h> #include <GL\glut.h> using namespace std; void piontSegment(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); //经过点绘制 glBegin(GL_POINTS); glVertex2i(25, 25); glVertex2i(50, 50); glVertex2i(100, 100); glEnd(); //经过矩阵绘制 /*int p1[]{25, 25}; int p2[]{50, 50}; int p3[]{100, 100}; glBegin(GL_POINTS); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glEnd();*/ glFlush(); } int _tmain(int argc, char **argv) { glutInit(&argc, argv); //设置窗口的缓存和颜色模型 //下面指定的是:窗口使用单个缓存而且使用RGB颜色模型来设定颜色值。 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //设置窗口左上角的位置 glutInitWindowPosition(400, 200); //设置窗口的宽高 glutInitWindowSize(800, 600); glutCreateWindow("Test OpenGL Program"); //设置显示窗口的背景为白色。参数顺序为:红、绿、蓝、透明度。 glClearColor(1.0, 1.0, 1.0, 0.0); //设置投影类型:正投影 glMatrixMode(GL_PROJECTION); glLoadIdentity(); //观察参数:x坐标值从0到200,y是从0到150 gluOrtho2D(0.0, 800.0, 0.0, 600.0); glutDisplayFunc(piontSegment); glutMainLoop(); system("pause"); return 0; }3、画线函数
上节咱们就写了个简单的画线函数GL_LINES,使用GL_LINES能够链接一对相邻端点完成一条直线段,若是描述端点的坐标只有一个则社么都不会显示,若是端点数为奇数那么最后一个点将被舍弃。以下代码:函数
glBegin(GL_LINES); glVertex2i(700, 15); glVertex2i(100, 555); glVertex2i(50, 150); glVertex2i(400, 500); glVertex2i(10, 400); glEnd();最后一个点(80,400)将会被舍弃,输出的图形将会以下:
使用OpenGL的图元常量GL_LINE_STRIP时,咱们能够得到折线,即会按照端点顺序进行链接,直到最后一个端点,代码以下:oop
glBegin(GL_LINE_STRIP); glVertex2i(700, 15); glVertex2i(100, 555); glVertex2i(50, 150); glVertex2i(400, 500); glVertex2i(10, 400); glEnd();绘制的图形以下:
接着是最后一个常量参数:GL_LINE_LOOP和上一个不一样点就是它会把最后一个点和第一个点相连,组成一个循环,代码:spa
glBegin(GL_LINE_LOOP); glVertex2i(700, 15); glVertex2i(100, 555); glVertex2i(50, 150); glVertex2i(400, 500); glVertex2i(10, 400); glEnd();生成的图形以下:
这样点和线咱们都能绘制了,下节咱们将会介绍一下画线算法。.net
参考内容:《计算机图形学(第三版)》 电子工业出版社
code
转载请标明出处:http://blog.csdn.net/letthinking/article/details/39161019对象