http://www.xker.com/page/e2011/0805/102107.html
官方手册地址:http://www.opengl.org/resources/libraries/glut/
=============================================
在win7(windows7 ultimate SP1)下成功安装VS2010(Visual Studio 2010 ultimate x86)。
下载glut:http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
(参见:http://www.opengl.org/resources/libraries/glut/glut_downloads.php)
原文讲:If you want just the GLUT header file, the .LIB, and .DLL files all pre-compiled for Intel platforms, you can simply download the glutdlls37beta.zip file (149 kilobytes).
这个zip文件中有5个文件:
分别把这5个文件放到如下文件夹中:
glut.h ---> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\gl
glut.dll,glut32.dll ---> C:\Windows\SysWOW64 (windows7 64位操作系统)---> C:\Windows\System32 (windows7 32位操作系统)
glut.lib,glut32.lib ---> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib
编写代码时,加入头文件#include <gl\glut.h>即可。
配置完成。
测试代码:
#include <gl\glut.h>
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
================
刚装了win7和VS2010。看了下配置OpenGL的方法和以前不太一样。搜索得之。
glut下载地址:
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
glut.h ---> C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Include/gl
glut.dll,glut32.dll ---> C:/Windows/SysWOW64 (windows7 64位操作系统)
---> C:/Windows/System32 (windows7 32位操作系统)
glut.lib,glut32.lib ---> C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/lib
!!无须!!用宏 #define GLUT_DISABLE_ATEXIT_HACK
好多人glut.h不知道放哪里,自己新建了一个文件夹,其实很多前辈在之前就说过,
要搜索gl这个文件夹,将glut.h放到里面包含gl.h glu.h这两个文件的gl文件夹中.
直接copy下面例程编译即可通过
例程如下
#include <gl/glut.h>
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
第一步,选择一个编译环境 现在 Windows 系统的主流编译环境有Visual Studio, Broland C++ Builder, Dev-C++等,它们都是支持 OpenGL 的。但这里我们选择Visual Studio 2005 作 为学习OpenGL 的环境。 第二步,安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安 装。 Windows 环境下的GLUT 下载地址:(大小约为150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的连接: http://upload.programfan.com/upfile/200607311626279.zip Windows 环境下安装GLUT 的步骤: 1、将下载的压缩包解开,将得到5 个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是 VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl 文件夹”)。把解压得到的glut.h 放到这个文件夹。 3、把解压得到的glut.lib 和glut32.lib 放到静态函数库所在文件夹(如果是 VisualStudio2005,则应该是其安装目录下面的“VC\lib”文件夹)。 4、把解压得到的glut.dll 和glut32.dll 放到操作系统目录下面的system32 文件夹内。(典型的位置为:C:\Windows\System32) 第三步,建立一个OpenGL 工 参考自 http://zhidao.baidu.com/question/193823311.html 这里以VisualStudio2005 为为例。 选择File->New->Project,然后选择Win32 Console Application,选择一个名 字,然后按OK。 在谈出的对话框左边点Application Settings,找到 Empty project 并勾上, 选择Finish。 然后向该工程添加一个代码文件,取名为“OpenGL.c”,注意用.c 来作为文件 结尾。 搞定了,就跟平时的工程没什么两样的。
visual studio2010 OpenGL开发环境搭建
最近开始进行OpengGL研究学习,本想在Eclipse搭建开发环境,但是一直出现一些未知的问题,故想省事。从同事索取visual studio2010,可以减少些工具上的研究时间,微软这个东西整起来也不是那么容易,毕竟接触的少。下面总结一下整个过程。
第一步:visual studio 2010的OpenGL配置:
1、把glut.h copy到x:\Program Files\Microsoft \Visual Studio 10.0\VC\include\GL文件夹中,如果没有GL这个文件夹则可以自己新建一个。
2、然后把glut32.lib copy到C:\Program Files\Microsoft Visual Studio 10.0\VC\lib中,
3、最后把glut32.dll copy到C:\Windows\System32中.所有工作已经完成了,下面测试一下配置结果。
这样配置完毕。
第二步:建立C的应用程序,开发OpenGL
File->New->Project 在打开的New Project对话框中最左侧一栏中选择Visual C++下面的CLR,之后在其右侧的区域中选择CLR Empty Application 并在下面的三个文本框中填入工程名称(Name),工程位置(Location)以及解决方案名称(Solution Name) 之后单击OK 然后可以解决方案浏览器中看到刚才新建的工程,右击工程名,选择Properties(属性),在打开的对话框中选择Configuration Properties(配置属性)下面的General(一般),然后将右边对话框中的Common Language Runtime Support(CLR支持)改为"No Common Language Runtime Support",然后点击确定退出接下来右击工程中的Source Files,选择Add->New Item...,在打开的对话框中选择“C++ File(.cpp)",并在下方输入一个以.c结尾的文件名,之后点击Add,之后就可以在这个文件中加入C语言代码,按F5就可以调试运行了。
OpenGL 作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。1 、与C语言紧密结合 。
OpenGL 命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。
2 、强大的可移植性 。
微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机)。而OpenGL不仅用于Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL的基本命令都做到了硬件无关,甚至是平台无关。
3 、高性能的图形渲染 。
OpenGL 是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。
总之,OpenGL是一个很NB的图形软件接口。至于究竟有多NB,去看看DOOM3和QUAKE4等专业游戏就知道了。
OpenGL 官方网站(英文)
http://www.opengl.org
下面我将对Windows下的OpenGL编程进行简单介绍。
学习OpenGL前的准备工作
第一步,选择一个编译环境
现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我们选择Visual Studio 2005作为学习OpenGL的环境。
第二步,安装GLUT工具包
GLUT 不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。
Windows 环境下的GLUT下载地址:(大小约为150k)
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
无法从以上地址下载的话请使用下面的连接:
http://upload.programfan.com/upfile/200607311626279.zip
Windows 环境下安装GLUT的步骤:
1 、将下载的压缩包解开,将得到5个文件
2 、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC/PlatformSDK/include/gl文件夹”)。把解压得到的glut.h放到这个文件夹。
3 、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC/lib”文件夹)。
4 、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:/Windows/System32)
第三步,建立一个OpenGL工程
这里以VisualStudio2005为例。
选择File->New->Project,然后选择Win32 Console Application,选择一个名字,然后按OK。
在谈出的对话框左边点Application Settings,找到Empty project并勾上,选择Finish。
然后向该工程添加一个代码文件,取名为“OpenGL.c”,注意用.c来作为文件结尾。
搞定了,就跟平时的工程没什么两样的。
第一个OpenGL程序
一个简单的OpenGL程序如下:(注意,如果需要编译并运行,需要正确安装GLUT,安装方法如上所述)
#include <GL/glut.h>
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow(" 第一个OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
该程序的作用是在一个黑色的窗口*画一个白色的矩形。下面对各行语句进行说明。
首先,需要包含头文件#include <GL/glut.h>,这是GLUT的头文件。
本来OpenGL程序一般还要包含<GL/gl.h>和<GL/glu.h>,但GLUT的头文件中已经自动将这两个文件包含了,不必再次包含。
然后看main函数。
int main(int argc, char *argv[]) ,这个是带命令行参数的main函数,各位应该见过吧?没见过的同志们请多翻翻书,等弄明白了再往下看。
注意main函数中的各语句,除了最后的return之外,其余全部以glut开头。这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍。
1 、glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。其格式比较死板,一般照抄这句glutInit(&argc, argv)就可以了。
2 、glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。更多信息,请自己Google。当然以后的教程也会有一些讲解。
3 、glutInitWindowPosition,这个简单,设置窗口在屏幕中的位置。
4 、glutInitWindowSize,这个也简单,设置窗口的大小。
5 、glutCreateWindow,根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
6 、glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。(这个说法不够准确,但准确的说法可能初学者不太好理解,暂时这样说吧)。
7 、glutMainLoop,进行一个消息循环。(这个可能初学者也不太明白,现在只需要知道这个函数可以显示窗口,并且等待窗口关闭后才会返回,这就足够了。)
在glutDisplayFunc函数中,我们设置了“当需要画图时,请调用myDisplay函数”。于是myDisplay函数就用来画图。观察myDisplay中的三个函数调用,发现它们都以gl开头。这种以gl开头的函数都是OpenGL的标准函数,下面对用到的函数进行介绍。
1 、glClear,清除。GL_COLOR_BUFFER_BIT表示清除颜色,glClear函数还可以清除其它的东西,但这里不作介绍。
2 、glRectf,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。
3 、glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。其作用跟fflush(stdout)类似。
1、头文件的包含:openGL相关的头文件在 */include/gl 目录中,主要有 gl.h glu.h glaux.h根据需要include就行。
例如:
#include <GL/glut.h>
#include <GL/GLAux.h>
#include <windows.h>
2、连接库的设置:项目-属性(快捷键ALT+F7)---配置属性-连接器-输入-附加依赖项 中加入opengl32.lib glut32.lib glu32.lib GLAux.lib , 注意用空格隔开各*.lib。
3、配置项目属性:
(1)项目——项目属性——配置属性——C/C++— —预处理器——预处理器定义,添加
GLUT_BUILDING_LIB
创建工程,其步骤如下:
(1)创建一个Win32 Console Application。(以我创建的为例,工程名为simpleGL)
(2)链接OpenGL libraries:在Visual C++中先单击Project,再单击Settings,再找到Link单击,最后在Object/library modules 的最前面加上opengl32.lib Glut32.lib Glaux.lib glu32.lib 。
(3)单击Project Settings中的C/C++标签,将Preprocessor definitions 中的_CONSOLE改为__WINDOWS。最后单击OK。
创建一个最简单的opengl程序
#include <GL/glut.h>
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
该程序的作用是在一个黑色的窗口*画一个白色的矩形。下面对各行语句进行说明。
首先,需要包含头文件#include<GL/glut.h>,这是GLUT的头文件。
本来OpenGL程序一般还要包含<GL/gl.h>和<GL/glu.h>,但GLUT的头文件中已经自动将这两个文件包含了,不必再次包含。
然后看main函数。
int main(int argc, char *argv[]),这个是带命令行参数的main函数,各位应该见过吧?没见过的同志们请多翻翻书,等弄明白了再往下看。
注意main函数中的各语句,除了最后的return之外,其余全部以glut开头。这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍。
1、glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。其格式比较死板,一般照抄这句glutInit(&argc, argv)就可以了。
2、glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。更多信息,请自己Google。当然以后的教程也会有一些讲解。
3、glutInitWindowPosition,这个简单,设置窗口在屏幕中的位置。
4、glutInitWindowSize,这个也简单,设置窗口的大小。
5、glutCreateWindow,根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
6、glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。(这个说法不够准确,但准确的说法可能初学者不太好理解,暂时这样说吧)。
7、glutMainLoop,进行一个消息循环。(这个可能初学者也不太明白,现在只需要知道这个函数可以显示窗口,并且等待窗口关闭后才会返回,这就足够了。)
在glutDisplayFunc函数中,我们设置了“当需要画图时,请调用myDisplay函数”。于是myDisplay函数就用来画图。观察 myDisplay中的三个函数调用,发现它们都以gl开头。这种以gl开头的函数都是OpenGL的标准函数,下面对用到的函数进行介绍。
1、glClear,清除。GL_COLOR_BUFFER_BIT表示清除颜色,glClear函数还可以清除其它的东西,但这里不作介绍。
2、glRectf,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。
3、glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。其作用跟fflush(stdout)类似。
1. 到http://www.xmission.com/~nate/glut.html 下载 glut-3.7.6-bin.zip,按如下方式安装解压出来的文件
glut32.dll -> C:\Windows\System or C:\WinNT\System
glut32.lib -> C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib
glut.h -> C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\gl
2. glut.h和stdlib.h一起使用会出现这个错误:error C2381: 'exit' : redefinition; __declspec(noreturn) differs
所以我们得修改glut.h,注释掉146行,并加入一条新的语句,改后的代码为:
- // extern _CRTIMP void __cdecl exit(int);
- _CRTIMP __declspec(noreturn) void __cdecl exit(int);
3. 新建一个Win 32 Console Application工程,添加一个drawcircle.cpp文件,其内容为:
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <GL/glut.h>
- #define ESC 27
- #define SPACE 32
- int Height=400, Width=400;
- int depth=0, circleRadius=2, cnt=1;
- static float vdata[4][3] = {
- {1.0, 0.0, 0.0}, {0.0, 1.0, 0.0},
- {-1.0, 0.0, 0.0}, {0.0, -1.0, 0.0}
- };
- void normalize(float v[3]) {
- float d = sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
- if (d == 0) {
- printf("zero length vector");
- return;
- }
- v[0] /= d; v[1] /= d; v[2] /= d;
- }
- void drawtriangle(float *v1, float *v2, float *v3)
- {
- glBegin(GL_TRIANGLES);
- glVertex3fv(v1);
- glVertex3fv(v2);
- glVertex3fv(v3);
- glEnd();
- }
- void subdivideCircle(int radius, float *v1, float *v2, int depth)
- {
- float v11[3], v22[3], v00[3] = {0, 0, 0}, v12[3];
- int i;
- if (depth == 0) {
- glColor3f(v1[0]*v1[0], v1[1]*v1[1], v1[2]*v1[2]);
- for (i=0; i<3; i++) {
- v11[i] = v1[i]*radius;
- v22[i] = v2[i]*radius;
- }
- drawtriangle(v11, v22, v00);
- return;
- }
- v12[0] = v1[0]+v2[0];
- v12[1] = v1[1]+v2[1];
- v12[2] = v1[2]+v2[2];
- normalize(v12);
- subdivideCircle(radius, v1, v12, depth - 1);
- subdivideCircle(radius, v12, v2, depth - 1);
- }
- void drawCircle(int circleRadius)
- // draw a circle with center at the origin in xy plane
- {
- subdivideCircle(circleRadius, vdata[0], vdata[1], depth);
- subdivideCircle(circleRadius, vdata[1], vdata[2], depth);
- subdivideCircle(circleRadius, vdata[2], vdata[3], depth);
- subdivideCircle(circleRadius, vdata[3], vdata[0], depth);
- }
- void display(void)
- {
- if (circleRadius>Width/2 || circleRadius==1)
- {
- cnt=-cnt;
- depth++;
- depth = depth % 5;
- }
- circleRadius+=cnt;
- glClear(GL_COLOR_BUFFER_BIT);
- drawCircle(circleRadius);
- glutSwapBuffers();
- }
- static void Reshape(int w, int h)
- {
- glClearColor (0.0, 0.0, 0.0, 1.0);
- glClear(GL_COLOR_BUFFER_BIT);
- Width = w; Height = h;
- glViewport (0, 0, Width, Height);
- glMatrixMode (GL_PROJECTION);
- glLoadIdentity ();
- glOrtho(-Width/2, Width/2, -Height/2, Height/2, -1.0, 1.0);
- }
- static void Key(unsigned char key, int x, int y)
- {
- switch (key) {
- case ESC:
- exit(0);
- case SPACE:
- glutIdleFunc(NULL); display();
- break;
- default:
- glutIdleFunc(display);
- }
- }
- int main(int argc, char **argv)
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE);
- glutInitWindowSize(Width, Height);
- glutCreateWindow("Example 1.5.circle.c: press SPACE & another key");
- glutKeyboardFunc(Key);
- glutReshapeFunc(Reshape);
- glutDisplayFunc(display);
- glutIdleFunc(display);
- glutMainLoop();
- }
4. 工程 --> 右键 --> Properties,打开工程配置对话框,
a. 选择 Configuration下拉框 ,选择 All Configuration
b. In the left pane, select the linker subtree and then click the Input option. Add the following code to the
Additional Dependencies text in the right pane.
Copy and Paste: opengl32.lib glu32.lib glut32.lib
5. 编译运行,如果成功,可以看到一个三维动画
在VISUAL C++ 2008上配置OPENGL开发环境
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
应该在VISUAL C++ 2005/VC 6.0/VC7.0同样都适用
首先感谢网上写VC6.0配置OPENGL开发环境的作者,我是先在你那里学习了如何配置,只是做了一点小的延伸,主要内容还是你的。
第一步:下载OpenGL的GLUT库
Windows环境下的GLUT下载地址:(苹果机不需要安装,自带)
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
第二步:OpenGL库和配置文件
OpenGL库配置用到的文件分为下面三类:
■ 动态链接库文件(.dll)
glaux.dll, glu32.dll, glut32.dll, OPENGL32.DLL, glut.dll。
■ 头文件(.h)
GL.H, GLAUX.H, GLU.H, glut.h。
■ 库文件(.lib)
GLAUX.LIB、Glu32.lib、glut32.lib、Opengl32.lib,glut.lib。
其中opengl32.dll, glaux.dll,glu32.dll是安装显卡驱动自带,应该每个系统里面都有,如果没有重新安装显卡驱动。
其中glut32.dll, glut.dll, glut.h, glut32.lib, glut.lib 是在刚才那个地址下载的,打开压缩包后会有5个文件
下面就是区别了,VC++ 2008不带GL.H, GLAUX.h, glu.h, glaux.lib, glu32.lib, opengl32.lib这些文件要在网上下载或者在VC6.0里面拷贝出来,
如果想要全套的文件,给我发邮件我给你发xudongcui@gmail.com
第三步:Windows下配置OpenGL
把glut32.dll, glut.dll拷贝到C:\WINDOWS\system32目录下,system32目录下应该已经有 opengl32.dll, glu32.dll了。
把GL.H, GLAUX.h, glu.h,glut.h 拷贝到 C:\Program Files\Microsoft Visual Studio 9.0\VC\include\gl
把 GLAUX.LIB、Glu32.lib、glut32.lib、Opengl32.lib,glut.lib拷贝到 C:\Program Files\Microsoft Visual Studio 9.0\VC\lib
第四步:建立VC++2008工程
打开VC++2008,选择新建工程,Win32,Win32控制台应用程序。删除默认的所有代码,用如下代码替换。
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )//隐藏控制台窗口 #include "stdio.h" #include <Windows.h> #include <gl\GL.h> #include <gl\GLU.h> #include <gl\glut.h> //-----function---- void drawBackgroud(void) { //设置背景色为黑色 glClearColor(0.0,0.0,0.0,0.0); } void drawDisplay(void) { //Buffer 设置为颜色可写 glClear(GL_COLOR_BUFFER_BIT); //开始绘制三角形 glBegin(GL_TRIANGLES); //设置为光滑明暗模式 glShadeModel(GL_SMOOTH); glColor3f(1.0,1.0,1.0);//设置第一个顶点的颜色 glVertex2f(-1.0,-1.0); //顶点坐标 glColor3f(0.0,1.0,0.0);//顶点颜色 glVertex2f(0.0,-1.0); glColor3f(0.0,0.0,1.0); glVertex2f(-0.5,1.0); glEnd();//结束 //强制OPENGL函数在有限时间内进行 glFlush(); } void drawShape(GLsizei w,GLsizei h) { glViewport(0,0,w,h);//设置视口的宽度高度 glMatrixMode(GL_PROJECTION);//指定当前矩阵为放映模式 glLoadIdentity();//将当前矩阵设为单位矩阵 if (w <= h) { gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w); } else { gluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5); glMatrixMode(GL_MODELVIEW);//更改矩阵模式 } } //-----main-- int main(int argc, char * argv[]) { //初始化 glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(400,400); glutInitWindowPosition(200,200); //创建窗口 glutCreateWindow("三角形"); //开始绘制 drawBackgroud(); glutReshapeFunc(drawShape); glutDisplayFunc(drawDisplay); glutMainLoop(); return (0); }