OpenGL第一个小程序!!

下载GLUT工具包

http://www.opengl.org/resources/libraries/glut/glut37.zip
,然后如下:
1、将下载的压缩包解开,将得到5个文件
2、把解压得到的glut.h放到vc include文件夹。
3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(其安装目录下面的“VC/lib”文件夹)。
4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。

#include <GL/glut.h>
#include <math.h>
const int n = 200;
const GLfloat R = 0.5f;
const GLfloat Pi = 3.1415926536f;

void myDisplay(void)
{
 int i;
 glClear(GL_COLOR_BUFFER_BIT);
 glBegin(GL_POLYGON);
 for(i=0; i<n; ++i)
  glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));
 glEnd();
 glFlush();
}

 

int main(int argc, char *argv[])
{
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
 glutInitWindowPosition(200, 200);
 glutInitWindowSize(500, 500);
 glutCreateWindow("第一个OpenGL程序");
 glutDisplayFunc(&myDisplay);
 glutMainLoop();
 return 0;
}

 

先来看看上面的代码,本程序是在win32 console application,即控制台程序,所以会出现命令行对话框。现在的问题是,这个程序的各个部分到底是什么意思。
那么,我就逐个来讲述吧。
首先从main函数入口进入,其中main函数的两个参数就是命令行形参,然后对于#include <GL/glut.h>,这个是包括的一个glut的头文件,里面定义了很多函数,在运行该程序之前,需要将VC中的相关环境设置好。这里略说。
看看第一个函数,从glutInit可以看到就是一个初始化,不错,这个函数的作用就是初始化窗口背景,对于一个程序,在开始运行的时候的初始化工作的重要性,可想而知了,必要而且必须!
1.绘制图形的步骤。所有的图形都应该在glBegin()和glEnd()中绘制,否则

会默认为为没有绘制的。
glBegin(GL_LINES);
 glVertex2f(0.0f, 0.0f);
 glVertex2f(2.0f,8.0f);
glEnd();

其次,glBegin()函数的模式,可以选择

GL_POINTS,GL_LINES,GL_POLYGON,GL_LINE_LOOP
对于各种模式的说明:
GL_POINTS:绘制的是点,也就是单个的点,这样显示的时候不会看到。
GL_LINES:绘制的是一条直线,注意点的坐标一定要在绘制的范围内,否

则的话会看不到的,我曾经做过,没有显示,还以为错了……
GL_POLYGON:显示的是一个多边形,比如在其中绘制了三个点,那么以

这种模式显示的话就是一个填充的三角形,为何,因为相当于连接这三个点

形成一个多边形的来填充。
GL_LINE_LOOP:绘制出来的点将做到首尾相连,试想,如果不是用的这个

而是直接用line的话,那么就要手动连接,即在最后一个点的是很放一个首

节点连起来。
GL_LINE_STRIP:连起来的是一整条的。区别:与line不同,连接的是line

的话中间有间隔点就不会连起来,而用这个的话会把相邻的点连起来。

2.坐标为原点的在正中间。画出来的,看的。
3.画出来的图形是一样:
void myDisplay(void)
{
 GLfloat x;
 int i;
 glClear(GL_COLOR_BUFFER_BIT);
 glBegin(GL_LINES);
  glVertex2f(0.0f, 0.0f);
  glVertex2f(-0.123f,-0.423f);
  glVertex2f(0.53f, 0.98f);
  glVertex2f(0.0f, 0.0f);
  glVertex2f(-0.123f,-0.423f);
  glVertex2f(0.53f, 0.98f);
 glEnd();
 glFlush();
}
绘制顺序的是每两个点就做出来一条直线。
void myDisplay(void)
{
 GLfloat x;
 int i;
 glClear(GL_COLOR_BUFFER_BIT);
 glBegin(GL_LINE_LOOP);
  glVertex2f(0.0f, 0.0f);
  glVertex2f(-0.123f,-0.423f);
  glVertex2f(0.53f, 0.98f);
 glEnd();
 glFlush();
}
绘制的时候就是对于这三个点首尾相连。绘制的时候对于各个点依次联系,

然后依次连起来,并最终结尾首尾,不管有几个点。

4. glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE)
初始化显示的模式,第一个参数显示的是以RGB模式,后者是指单缓冲区。
详细的后面学习中再遇到。
glutInitWindowPosition(200, 200); //初始化窗口的位置,一个点的坐


glutInitWindowSize(500, 500);  //窗口的大小,长和宽
glutCreateWindow("第一个OpenGL程序");//窗口的名字,title。

5.调用相关的函数实现绘制,特别是对于一个绘制,用的是函数,调用下面

的是传递一个指针。
glutDisplayFunc(&myDisplay);
glutMainLoop();

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值