通过对OPENGL第一章的学习
我学到了以下内容:
1.让我对OPENGL有了一个初步的印象
2.让我对所使用的API已经有了一个概略的了解
3.让我了解飞速发展并且令人振奋的三维游戏
4.让我知道OPENGL是一个在许多游戏中使用到的图形库
5.让我了解OPENGL面世已经超过10年,它的开发受Architectural Review Board的监管
6.GLUT和SDL库与OPENGL结合起来使用以便进行更快速的开发以及增加功能性
运行 OpenGL 的软件及硬件配置如下所述:
1.操作系统:Windows 95(OEM Service Release 2)或 Window NT 4.0 版本。
2. 软件开发环境:Microsoft Visual C++4.0 及以上版本。
3. 硬件:奔腾级微机,最好配有支持OpenGL 硬加速的显示卡。
4. 相关文件: windows.h 是在微软 Windows 95 或 Windows NT 环境下使用的窗口头文件,
gl.h 是 OpenGL 核心函数的头文件
glu.h 是应用程序库
glaux.h 是辅助库函数的头文件,对于所有的 OpenGL应用程序,前 3 个头文件是必需的。
在创建执行文件时,要另外连接 opengl32.lib、glu32.lib 和 glaux.lib 等3 个函数库。
运行执行文件时,在 Windows95\system目录下要有 opengl32.dll 和glu32.dll 两个动态链接库。
问题:
1.OPENGL最早是什么时候面世的?
答案:1992年7月
2.OPENGL的当前版本是什么?
答案:1.5
3.是谁决定了OPENGL的添加和改变?
答案:
一个简单例字:
#include <windows.h>
#include <math.h>
#include <gl/gl.h>
#include<gl/glu.h>
#include<gl/glaux.h>
void init();
void CALLBACK reshape(GLsizei w,GLsizei h);
void CALLBACK display();
GLfloat s,h;
void CALLBACK display()
{
//清空窗口,设置背景色为白色
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
//取景变换
glLoadIdentity();
gluLookAt(5,5,h,s,0,0,0,1,0);
//glRotatef(30,1,1,0);
//设置前景色为黑色
glColor3f(1,1,0);
//绘图开始,两条水平平行线
GLfloat RAD=(GLfloat)3.1415926/180;
GLfloat x,y,z,r;
int i,j;
for(i=0;i<180;i+=5)
{
glBegin(GL_LINE_LOOP);
r=2*(GLfloat)sin(i*RAD);
z=2*(GLfloat)cos(i*RAD);
for(j=0;j<360;j+=10)
{
x=r*(GLfloat)cos(j*RAD);
y=r*(GLfloat)sin(j*RAD);
glVertex3f(x,y,z);
}
glEnd();
}
for(j=0;j<360;j+=10)
{
glBegin(GL_LINE_LOOP);
for(i=0;i<=180;i+=10)
{
r=2*(GLfloat)sin(i*RAD);
z=2*(GLfloat)cos(i*RAD);
x=r*(GLfloat)cos(j*RAD);
y=r*(GLfloat)sin(j*RAD);
glVertex3f(x,y,z);
}
glEnd();
}
//清空帧缓存
glFlush();
}
void init()
{
glShadeModel(GL_FLAT);
s=0;
h=5;
}
//回调函数,窗口初始化和大小改变时,调用此函数
void CALLBACK reshape(GLsizei w,GLsizei h)
{
//设置当前矩阵为投影变换矩阵
glMatrixMode(GL_PROJECTION);
//设置投影变换
glLoadIdentity();
gluPerspective(30,1,-3,3);
//设置当前矩阵为模式变换矩阵
glMatrixMode(GL_MODELVIEW);
//设置视区变换
glViewport(0,0,w,h);
}
void CALLBACK Left()
{
s+=(GLfloat)0.1;
}
void CALLBACK Right()
{
s-=(GLfloat)0.1;
}
void CALLBACK Up()
{
h-=(GLfloat)0.1;
}
void CALLBACK Down()
{
h+=(GLfloat)0.1;
}
//主函数
void main()
{
//设置 OpenGL 的显示模式:单缓存、RGB 模式
auxInitDisplayMode(AUX_SINGLE|AUX_RGB);
//设置窗口位置、大小和标题
auxInitPosition(110,100,300,300);
auxInitWindow("OpenGL Demo1");
init();
//设置回调函数
auxKeyFunc(AUX_LEFT, Left);
auxKeyFunc(AUX_RIGHT, Right);
auxKeyFunc(AUX_UP, Up);
auxKeyFunc(AUX_DOWN, Down);
auxReshapeFunc(reshape);
auxMainLoop(display);
}
/*程序分析
主程序中设置 OpenGL 窗口的显示模式,打开窗口的左下角坐标为(0,0) ,右上角坐
标为(300,300) ;auxInitWindow 函数给出窗口的标题;init 函数设定 OpenGL 的明暗处理
方式;auxShapeFunc 函数在窗口移动、变形后,调用myReshape 函数重新计算模型、取景
变换及投影变换;auxMainLoop 循环调用 displny 函数,设定颜色、投影交换、描述几何要
素;auxKeyFunc(AUX_LEFT,Left)设定响应方向键左键的回调函数;auxKeyFunc
(AUX_RIGHT,Right)设定响应方向键右键的回调函数;auxKeyFunc(AUX_UP,Up)设定响应
方向键向上键的回调函数;auxKeyFunc(AUX_DOWN,Down)设定响应方向键向下键的回调
函数。
Display 函数首先设置 OpenGL 窗口的背景及绘图颜色,然后对物体、场景进行旋转、第1章 OpenGL初步 - 7 -
缩放、平移操作。glBegin 与glEnd 之间的语句用于给定顶点绘制圆球的经线和纬线,其中
x、y、z 为顶点坐标,由 glVertex 函数定义所描述几何要素的顶点。
*/