[OpenGL]OpenGL基本语法

1.OpenGL函数的命名规则

详细的命名规则巴拉巴拉的,就不写了(实际上寡人就是懒),但是不写又感觉不好意思,毕竟标题都写了( 那啥都脱了你给我看这个??),既然这样,那就上个例子:

老板来杯拿铁,不加奶

[OpenGL]OpenGL基本语法

2.OpenGL数据类型

[OpenGL]OpenGL基本语法
哎呦,这一大堆的东西,看的寡人头都大了,脑阔疼。。。
看到这,肯定会有小哥哥或者小姐姐心想,明明C/C++里面就有int byte float这乱七八糟一大顿的类型,为么斯OpenGL还要自己定义一套呢?
晚上翻来覆去睡不着,寡人掐指一算,夜观星象,思前想后,得出结论,因为OpenGL需要跨平台,而每个平台间的数据类型大小长度不一样,为了统一标准,OpenGL就自己定义了一套规则(放荡不羁爱*),反正用了这个类型就是这个大小,不管是哪个平台。。。
OpenGL:你瞅我干啥
平台:瞅你咋地,咬我呀
OpenGL:不要以为你瞅我,给我眼神暗示就会改成跟你一样的数据类型,献身都没用,哇哈哈

3.OpenGL基本语法

①每个顶点有x,y,z三个坐标值,有时会出现第四个坐标值w

我们可以根据后缀不同,传入不同的参数(投其所好,撩妹必备啊,手动滑稽)
例如:
后缀为f,代表float
glVertex3f(3.0f, 4.0f, 5.0f)
后缀为fv,代表float型数据
GLfloat v[3]={3.0f, 4.0f, 5.0f};
glVertex3fv( v );

②颜色值有 4 个分量: Red, Green, Blue and Alpha.(RGBA)

glColor4f(1.0f, 0.0f, 0.0f, 0.5f);
glColor3ub(255, 0, 0);

4.OpenGL基本图元类型

[OpenGL]OpenGL基本语法
忽略左下角帅气的小哥哥,毕竟有点帅,毕竟寡人有点懒,能少写就少些
GL_POINTS 点
GL_LINES 线段
GL_LINE_STRIP 线段带,一条条线连在一起
GL_LINE_LOOP 线段行成闭合回路
GL_TRIANGLE_STRIP 三角形带
GL_TRIANGLES 三角形
GL_TRIANGLE_FAN 扇形
从3.1版本后吧,OpenGL就把GL_POLYGON,GL_QUADS,GL_QUAD_STRIP三个基本类型取消了,多边形都可以用三角形拼
三个类型表示,再也得不到宠幸了,三角形,你个小碧池!!!!

5.OpenGL基本编程模式

main( )
{
设置显示模式;
初始化窗口;
创建窗口;
设置一系列回调函数;
启动主循环;
}

回调函数:(特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应)
简单来说就是,针对于某个时间特定执行的响应

例如:
①display()
②reShape()
③键盘,鼠标响应函数


回调函数display()
设置绘制相关的参数,完成绘制 glutDisplayFunc(display); ----说明当接收到重绘消息时调用此 函数
回调函数myReshape()
设置投影变换和视口变换的参数
glutReshapeFunc(myReshape)
关于键盘的回调函数 。
glutSpecialFunc(processSpecialKeys);
glutKeyboardFunc(processNormalKeys);

总结一下,OpenGL绘制时,是一个大循环,通过消息响应机制,什么消息响应什么方法,来完成某种操作

附带,敲黑板敲黑板了!!!!!!
我们经常看到有glutIdleFunc(display),这就是重绘,定时调用display,就是自动操作
当然我们也可以用其他的glutPostRedisplay( ),想要重绘的时候发消息,比如说我们旋转了某个物体,在旋转之后就需要发送这个消息,召之即来挥之即去

6.OpenGL是一个状态机

整个绘制操作会按照固定的流程进行,如同一条流水线
OpenGL函数只是用来设置这条流水线的一些状态参数,而并不是用来真正执行绘制操作的

忙活半天,其实我们只是流水线上的操作员,负责投食,至于在哪吃这些食物,用什么方式吃,那是别个的事情,泪奔~~~~~~

end