OpenGL(全写Open Graphics Library)

OpenGL是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。

OpenGL是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。

一个简单的OpenGL程序。

环境:CentOS7

g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)

OpenGL实现厂商的名字:VMware, Inc.
渲染器标识符:Gallium 0.4 on llvmpipe (LLVM 3.9, 256 bits)
OpenGL实现的版本号:2.1 Mesa 17.0.1
OGLU工具库版本:1.3

/** *      绘制一个光照的球。**           test.c 2018.05*由于头文件glut.h中已经包含了头文件gl.h和glu.h,所以只需要include 此文件*/
# include <GL/glut.h>
# include <stdlib.h>/* 初始化材料属性、光源属性、光照模型,打开深度缓冲区 */
void init ( void )
{const GLubyte* name = glGetString(GL_VENDOR); const GLubyte* biaoshifu = glGetString(GL_RENDERER);const GLubyte* OpenGLVersion =glGetString(GL_VERSION);const GLubyte* gluVersion= gluGetString(GLU_VERSION);printf("OpenGL实现厂商的名字:%s\n", name);printf("渲染器标识符:%s\n", biaoshifu);printf("OpenGL实现的版本号:%s\n",OpenGLVersion );printf("OGLU工具库版本:%s\n", gluVersion);GLfloat mat_specular [ ] = { 1.0, 1.0, 1.0, 1.0 };GLfloat mat_shininess [ ] = { 50.0 };GLfloat light_position [ ] = { 1.0, 1.0, 1.0, 0.0 };glClearColor ( 0.0, 0.0, 0.0, 0.0 );glShadeModel ( GL_SMOOTH );glMaterialfv ( GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv ( GL_FRONT, GL_SHININESS, mat_shininess);glLightfv ( GL_LIGHT0, GL_POSITION, light_position);glEnable (GL_LIGHTING);glEnable (GL_LIGHT0);glEnable (GL_DEPTH_TEST);
}/*调用GLUT函数,绘制一个球*/
void display ( void )
{glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glutSolidSphere (1.0, 40, 50);glFlush ();
}/* 定义GLUT的reshape函数,w、h分别是当前窗口的宽和高*/
void reshape (int w, int h)
{glViewport (0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode (GL_PROJECTION);glLoadIdentity ( );if (w <= h)glOrtho (-1.5, 1.5, -1.5 * ( GLfloat ) h / ( GLfloat ) w, 1.5 * ( GLfloat ) h / ( GLfloat ) w, -10.0, 10.0 );elseglOrtho (-1.5 * ( GLfloat ) w / ( GLfloat ) h, 1.5 * ( GLfloat ) w / ( GLfloat ) h, -1.5, 1.5, -10.0, 10.0);glMatrixMode ( GL_MODELVIEW );glLoadIdentity ( ) ;
}/* 定义对键盘的响应函数 */
void keyboard ( unsigned char key, int x, int y)
{/*按Esc键退出*/switch (key) {case 27:exit ( 0 );break;}
}int main(int argc, char** argv)
{/* GLUT环境初始化*/glutInit (&argc, argv);/* 显示模式初始化 */glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);/* 定义窗口大小 */glutInitWindowSize (300, 300);/* 定义窗口位置 */glutInitWindowPosition (100, 100);/* 显示窗口,窗口标题为执行函数名 */glutCreateWindow ( argv [ 0 ] );/* 调用OpenGL初始化函数 */init ( );/* 注册OpenGL绘图函数 */glutDisplayFunc ( display );/* 注册窗口大小改变时的响应函数 */glutReshapeFunc ( reshape );/* 注册键盘响应函数 */glutKeyboardFunc ( keyboard );/* 进入GLUT消息循环,开始执行程序 */glutMainLoop( );return 0;
}

Makefile文件:

ALL:gcc test.c -lGL -lglut -lGLU -lXmu -Bstatic -Bdyanmic./a.out
clean:rm *~

效果图:

OpenGL简介+一个简单的程序相关推荐

  1. python的简单程序代码_小白学编程?从一个简单的程序开始学习Python编程

    笔者思虑再三还是决定选择图文(因为百家的视频发布画质真不怎么样[囧]). 笔者学习编程的时间也挺长的,因为业余,因为时间不多,各种原因,自学编程的路特别难走.然后笔者发现,自己能为小白贡献一些力量,然 ...

  2. 用opengl编写一个简单的画图软件示例代码

    //用opengl编写一个简单的画图软件示例代码(存在闪烁问题) //本代码,抄写自一本教授opengl的书,可惜,里面的代码存在一些问题,导致不能正常显示,现在是增加了一些语句的代码 #includ ...

  3. 编写一个简单Java程序,计算银行年存款的本息

    编写一个简单Java程序,计算银行年存款的本息 要求:程序运行后要求用户输入存款本金.年利率和存款年限,最后程序计算并输出相应年限后存款的金额.相应的计算公式为:存款总额=本金 * (1 + 利率)存 ...

  4. 如何编辑程序(一个简单的程序)

    如何编辑程序(一个简单的程序) 运行Excel程序,创建一个新的站长工作簿(格式.xlsm),进入VBE,让我们开始编写一个站长列表的程序.程序运行后,一个对话框显示"你好,欢迎来到VBA& ...

  5. LabWindows_CVI测试技术及工程应用_学习笔记1(构建一个简单的程序)

    构建一个简单的程序 1.创建工程文件 或File--〉New--〉Project(*.prj),默认名Untitled.prj,存储在Unititled.cws的工作空间中 File--〉Save U ...

  6. Protues的一个简单51程序仿真

    Protues的一个简单51程序仿真 一.组装原件步骤 二.代码编写 三.仿真结果 四.总结 一.组装原件步骤 1.创建一个新的工程 2.找原件 3.将各元件连接起来,构成原理图 二.代码编写 1.打 ...

  7. Web Service入门简介(一个简单的WebService示例)

    一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intrane ...

  8. revit二次开发概念_BIM百科 | Revit二次开发入门--创建一个简单的程序

    获取<每日一技,我的成长轨迹>汇总 · 请访问柏慕联创官方网站: www.lcbim.com · 创建一个简单的Revit外部命令程序[Revit2017+VS2015]: 1.打开VS, ...

  9. Revit二次开发入门--创建一个简单的程序

    创建一个简单的Revit外部命令程序[Revit2017+VS2015]: 1.打开VS,我的版本是VS2015,点击[新建项目]→[Visual C#]→[类库],然后输入程序名称,如:Hello ...

最新文章

  1. LL-verilog语法多位宽全加器
  2. 支付宝php 验签 解密,支付宝敏感信息解密 - osc_fcq4wwqo的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. jdbc.properties文件
  4. 2021泉州高考学校成绩查询,2021泉州市地区高考成绩排名查询,泉州市高考各高中成绩喜报榜单...
  5. 作者:王文生,中国农业科学院农业信息研究所副所长、研究员。
  6. 测试构造器它山之玉可以重构:身份证号(第四天)
  7. 剑指offer面试题[15]-链表中倒数第K个结点
  8. 利用Resource Hacker简单去除WinRar广告
  9. MAC打开eclipse一直卡在core.ui的解决办法
  10. 今天看到CSDN某博客提到的linux在线音乐播放器,移动的咪咕音乐不错,推荐一下
  11. 谷歌(google)、百度、必应d等高级搜索指令使用
  12. 【沃顿商学院学习笔记】商业基础——Financing:05 名义利率和实际利率 APR EAR
  13. android设置透明主题后背景为黑色,android – 活动应该是透明的,但有黑色背景
  14. 《社会动物——爱、性格和成就的潜在根源》读后感及摘录(3)
  15. 空间直角坐标系、左手坐标系、右手坐标系
  16. 一个人花8块钱买了一只鸡,9块钱卖掉了,然后他觉得不划算,花10块钱又买回来了,11块卖给另外一个人。问他赚了多少?
  17. 李开复哥大毕业演讲:工程师的AI银河系漫游指南
  18. Java将project设置为Maven项目,并配置
  19. CS信号(片选信号)经常都是低电平有效
  20. GEE遍历影像中每个像元的值

热门文章

  1. 包,logging日志模块,copy深浅拷贝
  2. 区块链技术基础语言(三十二):Go语言网络编程(下)
  3. Java学习---JDK的安装和配置
  4. [luoguP2831] 愤怒的小鸟(状压DP)
  5. 【Java基础】final关键字总结
  6. Android 用户界面---拖放(Drag and Drop)(二)
  7. 安装nvm nodejs npm webpack vue vue-cli
  8. 路由器信号总是无法与手机连接服务器,手机无法搜到路由器信号怎么办? | 192路由网...
  9. 读保护_GD32VF103之片上flash读、写、擦除
  10. java aop xml配置_spring AOP使用 xml配置