ubuntu下opengl的安装及配置


OpenGL 是一套由SGI公司发展出来的绘图函数库,它是一组 C 语言的函数,用于 2D 与 3D 图形应用程序的开发上。OpenGL 让程序开发人员不需要考虑到各种显示卡底层运作是否相同的问题,硬件由 OpenGL 核心去沟通,因此只要显示卡支援 OpenGL,那么程序就不需要重新再移植,而程序开发人员也不需要重新学习一组函数库来移植程序。

安装

首先不可或缺的就是编译器与基本的函数库,如果系统没有安装的话,依照下面的方式安装:

sudo apt-get install build-essential

安装OpenGL Library

sudo apt-get install libgl1-mesa-dev

安装OpenGL Utilities

sudo apt-get install libglu1-mesa-dev

OpenGL Utilities 是一组建构于 OpenGL Library 之上的工具组,提供许多很方便的函数,使 OpenGL 更强大且更容易使用。

安装OpenGL Utility Toolkit

sudo apt-get install libglut-dev

OpenGL Utility Toolkit 是建立在 OpenGL Utilities 上面的工具箱,除了强化了 OpenGL Utilities 的不足之外,也增加了 OpenGL 对于视窗介面支援。
      注意:在这一步的时候,可能会出现以下情况,shell提示:

将上述$ sudo apt-get install libglut-dev命令改成$ sudo apt-get install freeglut3-dev即可。

测试


示例test.c源码:

#include <GL/glut.h>

void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-, , -, , , );
glMatrixMode(GL_MODELVIEW);
gluLookAt(, , , , , , , , ); return;
} void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, , );
glutWireTeapot();
glFlush(); return;
} int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(, );
glutInitWindowSize(, );
glutCreateWindow("OpenGL 3D View");
init();
glutDisplayFunc(display);
glutMainLoop(); return ;
}

编译程序时,执行以下指令:

$ gcc -o test test.c -lGL -lGLU -lglut

执行:

$ ./test

程序运行结果

初始化一个窗口,并在窗口中绘制一个茶壶

源码分析:

1.初始化和创建窗口

在打开窗口之前,必须指定窗口的特征。它是单缓存的还是双缓冲的?它把颜色存储为RGBA值还是颜色索引值?它应该出现在显示屏幕的什么位置?为了在应用程序中指定这些问题的答案,在使用glutCreateWindows()函数打开窗口之前,分别必须调用glutInit(),glutInitdisplayMode(),glutInitWindowSize(),和glutInitWindowPosition函数。


void glutInit( int argc, char** argv)

在调用其它任何GLUT函数之前首先要调用这个函数,它对GLUT函数库进行初始化。这个函数的参数值应与main()函数相同。

void glutInitDisplayMode(unsigned int mode);

指定glutCreateWindow()函数将要创建的的窗口的显示模式(例如使用RGBA还是颜色索引,使用单缓冲区还是双缓冲等)。另外,它还可以指定与这个窗口相关联的深度缓冲区,模板缓冲区,和累积缓冲区。mode参数的值是GLUT_RGBA(或GLUT_INDEX),GLUT_SINGLE(或GLUT_DOUBLE)以及缓冲区启用标记(GLUT_DEPTH, GLUT_STENCIL, GLUT_ACCUM)的按位OR组合。这个参数的默认值为GLUT_RGBA | GLUT_SINGLE(使用RGBA模式和单缓冲)。

void glutInitWindowPosition( int x, int y);

void glutInitWindowSize( int width, int height );

请求glutCreateWindow()函数创建的窗口具有指定的大小和位置。

int glutCreateWindow(char *name);

打开一个具有以上设置的特征(显示模式,宽度,高度等)的窗口。如果窗口系统支持,name字符串可以出现在窗口的标题栏上。进入glutMainLoop()之前,这个窗口并不会显示,因此在显示窗口之前不要在窗口中进行渲染。

 2. 处理窗口和输入事件


在窗口创建之后,但是在进入主循环之前,应该使用下面这些函数注册相关的回调函数。

void glutDisplayFunc( void(*func)(void));

指定了当窗口的内容需要重新绘制时将要调用的函数。在发生下面这些情况时,窗口就需要进行重绘:窗口刚打开,窗口弹出,窗口的内容遭到破坏,以及显示的调用了glutPostRedisplay()函数。

3.初始化和绘制三维物体

GLUT提供了很多绘图函数。这些函数都是在立即模式下渲染所有的几何图形。每个三维物体可以采用以下两种风格之一:没有表面法线的线框模式和具有着色和法线的实心形式。需要使用光照的时候,必须使用实心模式。只有绘制茶壶模型的函数能够生成纹理坐标。

void glutWireTeapot(GLdouble size);

void glutWireTeapot(GLdouble size);

分别用来绘制茶壶的线框形式和实心形式。

4.运行程序

在完成设置之后,GLUT程序就进入事件处理循环glutMainLoop()

opengl学习笔记(一)的更多相关文章

  1. OpenGL学习笔记3——缓冲区对象

    在GL中特别提出了缓冲区对象这一概念,是针对提高绘图效率的一个手段.由于GL的架构是基于客户——服务器模型建立的,因此默认所有的绘图数据均是存储在本地客户端,通过GL内核渲染处理以后再将数据发往GPU ...

  2. OpenGL学习笔记:拾取与选择

    转自:OpenGL学习笔记:拾取与选择 在开发OpenGL程序时,一个重要的问题就是互动,假设一个场景里面有很多元素,当用鼠标点击不同元素时,期待作出不同的反应,那么在OpenGL里面,是怎么知道我当 ...

  3. OpenGL学习笔记2017/8/29

    OpenGL学习日志: 感谢doing5552 的OpenGL入门学习:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 相 ...

  4. OpenGL学习笔记(1) 画一个三角形

    最近找实习有一丢丢蛋疼,沉迷鬼泣5,四周目通关,又不想写代码,写篇笔记复习一下,要好好学图形学啊 用OpenGL画一个三角形 项目的简介 记录一下跟着learnOpenGL学习的过程 笔记里的代码放在 ...

  5. OpenGL学习笔记5——嵌入Qt框架

    学习OpenGL也有段时间了,前几篇将GL最基本的画图过程解析了一下,后面进阶的就随项目需要再学.因为之前一直是用glut这个实用工具包来开发很方便,但是会附带一个控制台的窗口,实在觉得有些low,因 ...

  6. OpenGL学习笔记0——安装库

    最近需要做一个基于Zigbee室内无线定位的系统,受到TI公司ZigBee Sensor Monitor软件的启发,打算用OpenGL来做一个3D显示空间内物体位置的程序.学习阶段选择VS2010+O ...

  7. OpenGL 学习笔记 01 环境配置

    以下教程仅适用于Mac下的Xcode编程环境!其他的我也不会搞. 推荐教程:opengl-tutorial  本项目Github网址       OpenGL太可怕了...必需得把学的记下来,不然绝壁 ...

  8. OpenGL学习笔记之了解OpenGL

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

  9. OpenGL学习笔记:Console工程下如何不显示控制台黑窗口只显示Windows窗口

    刚学习OpenGL,绘制图形的时候,如果不进行设置,运行的时候会先出现黑窗口再出现Windows窗口. 其实要去除控制台窗口非常简单,只需要修改工程设置,把子系统改成Windows,程序的入口点改成m ...

随机推荐

  1. Dubbo -- 系统学习 笔记 -- 示例 -- 泛化引用

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 泛化引用 泛接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值 ...

  2. 8 -- 深入使用Spring -- 1...4 重写占位符配置器

    8.1.5 重写占位符配置器 (PropertyOverrideConfigurer) PropertyOverrideConfigurer是Spring提供的另一个容器后处理器.PropertyOv ...

  3. http 返回码 405 解决方案之一

    今天做网络请求数据的时候遇到返回码405,当时就傻了~~ 故事是这样的-- 我用post请求访问一个url,服务端数据是一个json的txt文件,理论上直接访问,返回json,然后解析就没事了,可是今 ...

  4. 【安全开发】Perl安全编码规范

    多年以来,Perl已经成为用于系统管理和WebCGI开发的功能最强的编程语言之一(几乎可以使用Perl做任何功能的程序).但其扩展应用,即作为Internet上CGI的开发工具,使得它经常成为Web服 ...

  5. iOS开发-- 使用NSNumber将int、float、long等数据类型加入到数组或字典中

    // 设置值 NSNumber *number=[NSNumber numberWithInt:45]; // 取值 NSLog(@"NSNumber %d",[number in ...

  6. Flask-Script应用实例

    #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 #命令行任务 #fr ...

  7. 《JavaScript 秘密花园》

    恰巧今天是传统民间重要的节日之一--七夕节: 被大家挂在嘴上最多的一句话便是:有对象了吗?这不-- 这样的话,那咱就先给new出一个对象吧: var boyfriend = new Object(); ...

  8. 在wepy里面使用redux

    wepy 框架本身是支持 Redux 的,我们在构建项目的时候,将 是否安装 Redux 选择 y 就好了,会自动安装依赖,运行项目后看官方给的 demo 确实是可以做到的,但是官方文档里却对这一块只 ...

  9. UITableView-FDTemplateLayoutCell 学习笔记

    本文转载至 http://www.tuicool.com/articles/I7ji2uM 原文  http://everettjf.github.io/2016/03/24/learn-uitabl ...

  10. codeforces水题100道 第五题 Codeforces Round #304 (Div. 2) A. Soldier and Bananas (math)

    题目链接:http://www.codeforces.com/problemset/problem/546/A题意:一个人现在有n元,它买第i根香蕉需要i*k元,问他要买w根香蕉的话,需要问他的朋友借 ...