使用一个库无非包含三个步骤:
- 包含头文件
- 链接库文件
- 提供运行时dll文件
gl.h是opengl核心库
glu.h是实用库
glut.h是工具集 是第三方库,代表OpenGL Utility Tookit。Mark J.Kilgard 为了使OpenGL应用程序结构能够真正独立于窗口系统构思了GLUT库。
glu.h是实用库
glut.h是工具集 是第三方库,代表OpenGL Utility Tookit。Mark J.Kilgard 为了使OpenGL应用程序结构能够真正独立于窗口系统构思了GLUT库。
Freeglut是一个GLUT的开源实现。
glext.h使你可以调用GL的常见扩展函数。
想使用更高版本GL的特性,你必须包含该头文件,并将你的显卡驱动更新到最新版本。
glm是OpenGL
Mathematics C++ mathematics library for graphics software。数学库
gl/glu/glut/gltools等的区别
好啦,该说说gl.h/glu.h/glut.h/gltools.h的区别啦。
#include<GL/gl.h>
#include<GL/glu.h>
再往下看,就可看到好多像glutInitWindowPosition()这样以glut为首的函数声明。
#include "stdafx.h"
#include<windows.h>
#include<gl/glut.h>
//#include"gl/superbible/gltools.h"
void RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
void SetupRC(void)
{
glClearColor(0.0,0.0,1.0,1.0);
}
int main(int argc,char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(400,400);
glutCreateWindow("first program");
glutDisplayFunc(RenderScene);
SetupRC();
glutMainLoop();
return 0;
}
另:建群期间,许多朋友还是不大明白gltools.h是什么东东。这里再简单说一下。
OpenGL是基于光栅化的系统。
render 渲染
shader 着色器 是图形硬件设备所执行的一类特殊函数。可以理解为转位GPU编写的一类小型程序。
vertex 顶点
pixel 像素 显示器上最小的可见单元
framebuffer 帧缓存 计算机将所有的像素保存到帧缓存中。是由图形硬件设备单独管理的一块内存区域,可以直接映射到显示设备上。
语法
OpenGL库中的所有函数都会以gl开头 采用驼峰命名法。如 glBindVertexArrary()
所有的常量全大写,空格用下划线表示,以GL_开头。
为了能更好的跨平台,opengl还定义了不同的数据类型。如GLfloat表示浮点数。
opengl是C语言的函数库,不能是用重载,通过函数名的细微变化来区分实现同一功能的一组函数.如glUniform2f()表示传入两个GLfloat型的数据。
使用glUniform*()*表示所有glUniform*()函数的集合。又如2fv的后缀表示要用一个以为的GLfloat类型的数组传入两个浮点数。而不是两个GLfloat类型的数值。
顶点着色器和片元着色器是必须的,细分和几何着色器是可选的。
细分着色会增加集合图元的数量,是模型的外观变得更为平顺。
glutInit()负责初始化GLUT库。他必须是应用程序调用的第一个GLUT函数。
glutInitDisplayMode()设置程序使用的窗口类型。
。
glutDisplayFunc(display)设置显示回调,即glut在每次更新窗口内容时会自动调用该函数,这里讲display()函数的地址传入。
glutMainLoop()为无限循环。其后的指令不会被执行。
vertex-arrary object 顶点数组对象