OpenGL数据类型
?
函数命名约定
?
<函数库前缀><命令名称><可选的参数个数><可选的参数类型>
例子:
glColor3f 代表是gl函数库里的 color命令,此命令有3个参数,参数类型是f
平台独立性
openGL没有创建窗口,处理按键输入,鼠标点击事件等函数。创建和管理窗口是操作系统本身应支持的功能。OpenGL是平台独立的图形硬件的抽象接口库。
使用OpenGL画图
?
画一个矩形
设置当前使用的颜色
glColor3f(0.0f, 1.0f, 0.0f);
画一个矩形,并用当前颜色填充
glRectf(-25.0f, 25.0f, 25.0f, -25.0f);
这两个函数的使用方式参考,官方函数文档
http://www.opengl.org/sdk/docs/man2/xhtml/glColor.xml
http://www.opengl.org/sdk/docs/man2/xhtml/glRect.xml
openGL是如何把这些坐标映射到真是的窗体的位置的。这个就是使用了ChangeSize这个回调函数。
通过glutReshapeFunc设置这个回调函数,当窗体的大小发生改变时,就会调用你设置的回调函数。
每次窗体大小的改变,我们都应该重新定义视口和裁剪区域以适应新的窗口尺寸。我们希望绘制的图像能够适应窗体的大小。
设置视口(ViewPort)和裁剪区域(Clipping volume)
视口和裁剪区域是如何影响坐标系范围,以及2D和3D的图像在屏幕上显示的。如下图:
定义视口
?
void glViewPort(GLint x, GLint y, GLint width, GLint height);
参数x,y制定了左下角的坐标。width和height参数制定了尺寸以像素为单位。
定义裁剪区域
void glOrtho(
GLdouble?
left,
GLdouble?
right,
GLdouble?
bottom,
GLdouble?
top,
GLdouble?
nearVal,
GLdouble?
farVal);
这个函数重新定义了裁剪区域,使得纵横比不变。纵横比就是在垂直方向上的一个单位长度内的像素个数与水平方向上一个单位长度内的像素个数的比值。上面的例子使用的是正投影。
在调用glOrtho之前,要注意调用下面两个函数
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
投影矩阵是定义可视区域的地方。glOrtho并不建立新的裁剪区域,而是对之前的裁剪区域进行修改。它把当前裁剪区域的矩阵与参数所提供的矩阵相乘,得到新的裁剪区域。glLoadIdentity();就是对当前的坐标系系统进行重置。
下面的代码可以使得正方形保持正方形
if (w <= h)
{
glOrtho(-100.0f, 100.0f, -100.0f/aspectRatio, 100.0f/aspectRatio, 1.0, -1.0);
}
else
{
glOrtho(-100.0f*aspectRatio, 100.0f*aspectRatio, -100.0f, 100.0f, 1.0, -1.0);
}
?
这个函数调用使得裁剪区域 左边总是位于-100,右边则扩展到100除非窗口的宽度大于高度,此时水平范围则会根据纵横比进行缩放。同理当高度大于宽度时,上下要进行缩放。这样就可以保持一个200X200的正方形(中心为(0,0))与窗口的形状无关。如下图:
?
?