为了用GLUT写一个C语言程序你需要有三个文件:

1glut.h—这个头文件是要包含到你的代码里的去的。一般把这个文件放到、include/gl文件夹里。

2glut.libglut32.libglut.libSGI的,glut32.libMicrosoft的。好像就是看你用的什么操作系统了。一般down的这两个文件都有)这个文件必须连接到你的程序。所以必须放在lib文件夹里。

3:glut32.dllwindows)和glut.dllSGI--这个文件必须放在system32文件夹里。

这里面用cuda来写的一个程序:

下面分别来说明以下每个函数的意思:

建立一个main函数,这个main函数将完成必须的初始化和开启事件处理循环。那么可以理解,以上都是进行一个初始化操作

所有的GLUT函数都有glut前缀并且那些完成一些初始化的函数有glutInit前缀。你首先要做的是调用函数glutInit()。

1.glutInit(int*argc,char**argv)

参数:

Argc:一个指针,指向从main()函数传递过来的没更改的argc变量。

Argv:一个指针,指向从main()函数传递过来的没更改的argv变量

2.glutInitDisplayMode(unsighed int mode)定义显示方式

参数:

Mode――可以指定下列显示模式

Mode参数是一个GLUT库里预定义的可能的布尔组合。你使用mode去指定颜色模式,数量和缓冲区类型。

指定颜色模式的预定义常量有:

1GLUT_RGBA或者GLUT_RGB。指定一个RGBA窗口,这是一个默认的颜色模式。

2GLUT_INDEX。指定颜色索引模式。

这个显示模式还允许你选择单缓冲区或双缓冲区窗口。

1GLUT_SINGLE.单缓冲区窗口。

2GLUT_BUFFER.双缓冲区窗口,这是产生流畅动画必须选的。

还可以指定更多,如果你想指定一组特殊的缓冲的话,用下面的变量:

1GLUT_ACCUM.累积缓冲区。

2GLUT_STENCIL.模板缓冲区。

3GLUT_DEPTH.深度缓冲区。参考地址https://blog.csdn.net/sz76211822/article/details/57407130

假定你想要一个有单缓冲区,深度缓冲区的RGB窗口,你用“或“(|)操作符来建立你想要的显示模式。

3. glutInitWindowPositon(int x,int y);

参数:

X: 距离屏幕左边的像素数。-1是默认值,意思就是由窗口管理程序决定窗口出现在哪里。如果不使用默认值,那你就自己设置一个值。

Y:距离屏幕上边的像素数。和X一样。

注意,参数仅仅是对窗口管理程序的一个建议。尽管你精心的设置了窗口位置,window返回的可能是不同的位置。如果你设置了,一般会得到你想要的结果。接下来我们设置窗口大小,使用函数glutInitWindowSize()。

4.glutInitWindowSize(int width,int height);

参数:

Width:窗口的宽度。

Height:窗口的高度。

同样widthheight也只是一个参考数字。避免使用负数。

经过上面的这些步骤后,就可以调用函数glutCreateWindow()来创建窗口了。

5.glutCreateWindow(char* title);

参数:

Title:设置窗口的标题。

glutCreateWindow()的返回值是一个窗口标识符。后面你可以在GLUT里使用这个标识符

以上程序如果我们做到这里

如果你运行上述代码,你将会得到一个空的黑的控制台窗口,而没有OpenGL窗口。并且控制台窗口将很快消失。

在我们渲染一些东西前,还有两件事需要处理。第一告诉GLUT哪个函数负责渲染。我们创建一个简单的渲染的函数。下面的这个函数将会清除颜色缓冲区并画一个三角形。

void Handle_Display(void) {glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_TRIANGLES);glVertex3f(-0.5,-0.5,0.0);glVertex3f(0.5,0.0,0.0);glVertex3f(0.0,0.5,0.0);glEnd();glFlush();}

上面的函数的名字你可以自己取一个。现在你必须告诉GLUT使用我们上面的函数来进行渲染。这个叫寄存回调。让我们告诉GLUT这个函数renderScene应该被使用。当需要重画的时候GLUT有一个只传递一个函数名称参数的函数(以函数名为形参的函数)就会被调用。

6.glutDisplayFunc(void (*func)(void));

参数:

func: 当窗口需要被重绘是调用的函数的名称。注意使用NULL作为实参是错误的。

最后一件事是告诉GLUT我们准备进入应用程序事件处理循环。GLUT提供了一个函数让程序进入一个永不结束的循环。一直等待处理下一个事件。函数是glutMainLoop()。

7.glutMainLoop(void)

到目前为止所有的代码都列在下面。如果你运行代码,将会得到一个控制台窗口,和一个画着一个白色三角形的OpenGL窗口,出现在你设置的位置,并有着你设置的尺寸。

#include <GL/glut.h>void Handle_Display(void) {glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_TRIANGLES);glVertex3f(-0.5,-0.5,0.0);glVertex3f(0.5,0.0,0.0);glVertex3f(0.0,0.5,0.0);glEnd();glFlush();}void main(int argc, char **argv) {glutInit(&argc, argv);glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);glutInitWindowPosition(100,100);glutInitWindowSize(320,320);glutCreateWindow("3D Tech- GLUT Tutorial");glutDisplayFunc(renderScene);glutMainLoop();}

对于我的程序,其中Handle_Display函数里面并不是画一个三角形,其实更加复杂,在这里为了能够快速学习opengl会在后面把Handle_Display函数拿出来讲解。

OpenGL---GLUT(一)相关推荐

  1. OpenGL(glut)模拟太阳系:太阳,地球,月球,火星

    GitHub项目地址OpenGL(glut)模拟太阳系:太阳,地球,月球,火星 核心代码如下: // orgin.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并 ...

  2. Ubuntu下安装OpenGL/Glut库

    http://www.libaqiang.com/?p=78330 1.Ubuntu下安装OpenGL/Glut库 OpenGL(全写Open Graphics Library)是个定义了一个跨编程语 ...

  3. 基于C++和OpenGL (GLUT) 实现太阳系行星系统

    基于C++和OpenGL (GLUT) 实现太阳系行星系统 效果图: 分析与设计 OpenGL 包含了很多渲染函数,但是他们的设计目的是独立于任何窗口系统或操作系统的.因此,它自身并没有包含创建打开窗 ...

  4. OpenGL Glut剖析(2)--平行投影及其显示范围

    http://anony3721.blog.163.com/blog/static/51197420114282720194/ OpenGL Glut剖析(2)--平行投影及其显示范围 2011-05 ...

  5. 如何在Python中创建OpenGL/Glut

    OpenGL(开放图形库)是一种跨语言.多平台的应用程序编程接口(API),用于绘制二维和三维计算机图形. API通常用于与图形处理单元(GPU)交互,以实现硬件加速渲染.OpenGL由Silicon ...

  6. OpenGL模板 Mac Cmake OpenGL(Glut) Template

    自己经常使用的一些功能做一个模板,有灯光效果,你可以用鼠标放大,围绕所述旋转坐标系的原点 Main.cpp #include <GLUT/glut.h> #include <cstd ...

  7. eclipse opengl java_eclipse openGL glut运行环境配置

    eclipse_opengl_glut_setting opengl一般使用vs来开发,我个人还是偏向使用eclipse,这里是eclipse使用glut的配置 首先下载glut包,包含下面5个文件: ...

  8. ubuntu配置openGL glut库

    openGL开发有比较好用的库:glut,本文讲述ubuntu该如何配置: 以下为安装过程(需要root权限): 1. apt-get install build-essential 2. apt-g ...

  9. OpenGL Glut 初学

    第一个代码:绘制一个凸多边形,更改背景和多边形的颜色 #include <GL/glut.h> #include<iostream> using namespace std; ...

  10. VS2019 OpenGL glut:错误: 无法打开包括文件:“gl/glut.h”: No such file or directory

    罪魁祸首 更新了vs2019 解决方法 在更新之后,vs2019的安装目录下(我装在C盘)C:\Program Files (x86)\Microsoft Visual Studio\2019\Pro ...

最新文章

  1. Redis入门到精通-Redis高级命令
  2. 求解迷宫问题的所有路径及最短路径程序
  3. echarts中如何使用timeline组件
  4. 使用回溯法解决编辑距离问题(C语言)
  5. SqlBulkCopy只支持SQL Server? EF Core实现支持多数据库类型的Bulk Copy
  6. NFC 验证平台搭建
  7. 两个字段位置相反去重_Flink零基础教程:并行度和数据重分布
  8. 跟ArthurXF学从雅虎抓取股票数据的方法
  9. 面向对象 阶段性总结
  10. 【luogu P2939 [USACO09FEB]改造路Revamping Trails】 题解
  11. 使用知行之桥® EDI系统对接德州仪器TI
  12. AE CS6 安装后启动报错BUG解决
  13. sonarqube配置全指南,集成阿里巴巴p3c规范
  14. mysql事物幻读_MySQL事务的幻读
  15. python中多行语句可以使用反斜杠来实现吗_Python中的多行语句可以使用反斜杠来实现...
  16. html div鼠标选中状态,CSS鼠标移动div时如何避免选中div中的文字
  17. Java实现项目电影购票系统(swing界面)
  18. Django刨坑记-- Anaconda3 环境报错
  19. IPTV桌面系统建设物料和费用:服务器+软件+电视盒
  20. 运行时异常一般异常的区别

热门文章

  1. 汽车自动泊车辅助系统APA(上)
  2. android 启动画面广告,浅谈APP启动界面广告
  3. 九联unt401h装软件_九联UNT401H南传刷机包 V1.0 免费版
  4. 中文拼写检测(Chinese Spelling Checking)相关方法、评测任务、榜单
  5. Word插入希腊字母及特殊符号 分类整
  6. 用计算机弹奏音乐的数字乐谱,抖音计算器音乐
  7. Internet Information Services 5.0 技术概述(转)
  8. dnf最新地图编号2020_DNF100级即将迎来新城镇 地图小贴士
  9. java怎么写dnf辅助_易语言地下城与勇士辅助自动刷图类源码
  10. javascript实现2048小游戏