opengl学习笔记(一)
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学习笔记(一)的更多相关文章
- OpenGL学习笔记3——缓冲区对象
在GL中特别提出了缓冲区对象这一概念,是针对提高绘图效率的一个手段.由于GL的架构是基于客户——服务器模型建立的,因此默认所有的绘图数据均是存储在本地客户端,通过GL内核渲染处理以后再将数据发往GPU ...
- OpenGL学习笔记:拾取与选择
转自:OpenGL学习笔记:拾取与选择 在开发OpenGL程序时,一个重要的问题就是互动,假设一个场景里面有很多元素,当用鼠标点击不同元素时,期待作出不同的反应,那么在OpenGL里面,是怎么知道我当 ...
- OpenGL学习笔记2017/8/29
OpenGL学习日志: 感谢doing5552 的OpenGL入门学习:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 相 ...
- OpenGL学习笔记(1) 画一个三角形
最近找实习有一丢丢蛋疼,沉迷鬼泣5,四周目通关,又不想写代码,写篇笔记复习一下,要好好学图形学啊 用OpenGL画一个三角形 项目的简介 记录一下跟着learnOpenGL学习的过程 笔记里的代码放在 ...
- OpenGL学习笔记5——嵌入Qt框架
学习OpenGL也有段时间了,前几篇将GL最基本的画图过程解析了一下,后面进阶的就随项目需要再学.因为之前一直是用glut这个实用工具包来开发很方便,但是会附带一个控制台的窗口,实在觉得有些low,因 ...
- OpenGL学习笔记0——安装库
最近需要做一个基于Zigbee室内无线定位的系统,受到TI公司ZigBee Sensor Monitor软件的启发,打算用OpenGL来做一个3D显示空间内物体位置的程序.学习阶段选择VS2010+O ...
- OpenGL 学习笔记 01 环境配置
以下教程仅适用于Mac下的Xcode编程环境!其他的我也不会搞. 推荐教程:opengl-tutorial 本项目Github网址 OpenGL太可怕了...必需得把学的记下来,不然绝壁 ...
- OpenGL学习笔记之了解OpenGL
OpenGL(全写Open GraphicsLibrary)是个定义了一个跨编程语言.跨平台的编程接口规格的专业的图形程序接口.它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库. 说 ...
- OpenGL学习笔记:Console工程下如何不显示控制台黑窗口只显示Windows窗口
刚学习OpenGL,绘制图形的时候,如果不进行设置,运行的时候会先出现黑窗口再出现Windows窗口. 其实要去除控制台窗口非常简单,只需要修改工程设置,把子系统改成Windows,程序的入口点改成m ...
随机推荐
- python2和3的区别,怎么样做到轻松切换2和3
以下是菜鸟教程列举的.这些零散的改变需要注意. 下面这些东西可能平时的程序根本没用到,或者稍加注意就可以了.但2和3最主要的区别是,掌握编码. 编码在所有程序中无处不在,处理不好,要么乱码,要么编码解 ...
- OC中Runtime浅析
近期了解了一下OC的Runtime,真的是OC中非常强大的一个机制,看起来比較底层,但事实上能够有非常多活用的方式. 什么是Runtime 我们尽管是用Objective-C写的代码,事实上在运行过程 ...
- 为什么要使用JS模板引擎
我之前在写一个输入联想控件的时候,改过好几个版本,每个版本不是因为性能不好就是因为代码凌乱而被推翻,最后用了understore模板引擎,效果有明显改善.整好这两天在研究互联网技术架构,发现很多的开发 ...
- 恶劣条件下的apache配置(Linux)
(本文出自yangjj ^_^) 前提:1.没联网,yum挂.2.至少要有GCC,要不玩个屁. 3.你有充足的咖啡并且有几个小时时间不想打dota. 4.你要做集群. 以上条件不满足其一,看到这里 ...
- POJ 3273 Monthly Expense(二分搜索)
Description Farmer John is an astounding accounting wizard and has realized he might run out of mone ...
- ios开发之--仿(微信)自定义表情键盘
先附上demo:https://github.com/hgl753951/CusEmoji.git 效果图如下:
- swift--浮点数转换成整数(四舍五入/直接截断)
1,直接截取小数部分转换成整数 let i = Int(23.52536) print("输出是:\(i)") 2,四舍五入转换成证书 let q = lround(586.565 ...
- cocos2d-x 3.0 在C++中调用lua函数
代码用的是<cocos2d-x 3.0 在lua中调用自定义类>中的代码. 在上篇的基础上进行扩充. 写lua函数 local function process_packet(user_d ...
- kohana 简单使用
声明:基于公司使用的 Kohana 框架写的,不确定是否适用于原生 Kohana 附:Kohana 3 中文手册,传送门:http://www.lampblog.net/kohana3%E4%BD%B ...
- 1. Oracle安装部署文档
一. 部署环境步骤 1.1 软件环境 操作系统:CentOS release 6.5oracle安装包:linux.x64_11gR2_database_1of1.zip:linux.x64_11gR ...