OpenGL简介
2010-11-29 18:25
176 查看
OpenGL是OpenGL是一个操纵硬件的软件接口
包含大约250个函数(GLU中50个)
没有执行窗口任务的函数
没有获取用户输入的函数
没有描述高级三维模型例如汽车/人等的高级函数
只有描述几何图元的函数(点/直线/多边形)
OpenGL实用库(GLU)提供了高级特性(二次曲面,NURBS曲线,曲线)
渲染,指计算机根据模型创建图像。模型,是有几何图元(点/直线/多边形)构成的。几何图元,由顶点指定。vertex最终渲染的图像,由屏幕像素组成。像素是显示硬件能够放置到屏幕上的最小的可视元素。有关像素的信息,如颜色,在系统内存中被组织为位面bitplane。bitplane是一块内存区域,存储屏幕上一个像素所需的信息。许多位面一起,构成了帧缓冲。
OpenGL函数命名规则gl + 函数功能描述 + 数字,表示接收参数个数 + f/d等字母,表示接收参数类型,其中v表示指针/数组。
OpenGL是一个状态机。当设置了状态之后,直到下一次修改设置之前,状态都有效。
glEnable()和glDisable()启用和禁用某状态。
glGetBooleanv();glGetDoublev();glGetFloatv();glGetIntegerv();glGetPointerv();glIsEnable(),六个函数都返回状态值,只是类型不同。也可以使用更具体的glGetLight*()等。
另外可以使用glPushAttrib()和alPopAttrib()将一组状态变量的值保存到属性堆栈中,暂时修改它们。将来使用glPopAttrib()和glPopClientAttrib()恢复。就暂时修改状态而言,使用该方法可能比使用查询函数效率更高。OpenGL渲染流水线
OpenGL渲染流水线使用双缓存的一个例子#include <Windows.h>
#include <gl/glut.h>
// 旋转角度
static GLfloat spin = 0.0;
void init(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_FLAT);
}
void createRect(void)
{
glClear(GL_COLOR_BUFFER_BIT);
// 这里使用glPushMatrix和glPopMatrix对
// 上例使用glBegin和glEnd对
glPushMatrix();
glRotatef(spin, 0.0,0.0,1.0);
glColor3f(1.0,1.0,1.0);
glRectf(-25.0,-25.0,25.0,25.0);
glPopMatrix();
// 交换缓存
glutSwapBuffers();
}
void spinRect(void)
{
spin = spin +2.0;
if (spin>360.0)
{
spin = spin-360.0;
}
// 显示?
glutPostRedisplay();
}
void reshape(int w, int h)
{
glViewport(0,0, (GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50.0,50.0,-50.0,50.0,-1.0,1.0);
glMatrixMode(GL_MODELVIEW);
// ???
glLoadIdentity();
}
void mouse(int button, int state, int x, int y)
{
switch (button)
{
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
// 在空闲时spinRect
glutIdleFunc(spinRect);
break;
case GLUT_MIDDLE_BUTTON:
if (state == GLUT_DOWN)
// 停止空闲时的操作
glutIdleFunc(NULL);
break;
default:
break;
}
}
int main(int argc, char** argv)
{
// GLUT初始化窗口的5个必须的步骤
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
glutInitWindowPosition(250,250);
glutInitWindowSize(400,400);
glutCreateWindow("Hello");
// 一些初始化操作
init();
// 添加回调*****重要
glutDisplayFunc(createRect);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
// 真正开始绘制
glutMainLoop();
return 0;
}
包含大约250个函数(GLU中50个)
没有执行窗口任务的函数
没有获取用户输入的函数
没有描述高级三维模型例如汽车/人等的高级函数
只有描述几何图元的函数(点/直线/多边形)
OpenGL实用库(GLU)提供了高级特性(二次曲面,NURBS曲线,曲线)
渲染,指计算机根据模型创建图像。模型,是有几何图元(点/直线/多边形)构成的。几何图元,由顶点指定。vertex最终渲染的图像,由屏幕像素组成。像素是显示硬件能够放置到屏幕上的最小的可视元素。有关像素的信息,如颜色,在系统内存中被组织为位面bitplane。bitplane是一块内存区域,存储屏幕上一个像素所需的信息。许多位面一起,构成了帧缓冲。
OpenGL函数命名规则gl + 函数功能描述 + 数字,表示接收参数个数 + f/d等字母,表示接收参数类型,其中v表示指针/数组。
OpenGL是一个状态机。当设置了状态之后,直到下一次修改设置之前,状态都有效。
glEnable()和glDisable()启用和禁用某状态。
glGetBooleanv();glGetDoublev();glGetFloatv();glGetIntegerv();glGetPointerv();glIsEnable(),六个函数都返回状态值,只是类型不同。也可以使用更具体的glGetLight*()等。
另外可以使用glPushAttrib()和alPopAttrib()将一组状态变量的值保存到属性堆栈中,暂时修改它们。将来使用glPopAttrib()和glPopClientAttrib()恢复。就暂时修改状态而言,使用该方法可能比使用查询函数效率更高。OpenGL渲染流水线
OpenGL渲染流水线使用双缓存的一个例子#include <Windows.h>
#include <gl/glut.h>
// 旋转角度
static GLfloat spin = 0.0;
void init(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_FLAT);
}
void createRect(void)
{
glClear(GL_COLOR_BUFFER_BIT);
// 这里使用glPushMatrix和glPopMatrix对
// 上例使用glBegin和glEnd对
glPushMatrix();
glRotatef(spin, 0.0,0.0,1.0);
glColor3f(1.0,1.0,1.0);
glRectf(-25.0,-25.0,25.0,25.0);
glPopMatrix();
// 交换缓存
glutSwapBuffers();
}
void spinRect(void)
{
spin = spin +2.0;
if (spin>360.0)
{
spin = spin-360.0;
}
// 显示?
glutPostRedisplay();
}
void reshape(int w, int h)
{
glViewport(0,0, (GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50.0,50.0,-50.0,50.0,-1.0,1.0);
glMatrixMode(GL_MODELVIEW);
// ???
glLoadIdentity();
}
void mouse(int button, int state, int x, int y)
{
switch (button)
{
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
// 在空闲时spinRect
glutIdleFunc(spinRect);
break;
case GLUT_MIDDLE_BUTTON:
if (state == GLUT_DOWN)
// 停止空闲时的操作
glutIdleFunc(NULL);
break;
default:
break;
}
}
int main(int argc, char** argv)
{
// GLUT初始化窗口的5个必须的步骤
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
glutInitWindowPosition(250,250);
glutInitWindowSize(400,400);
glutCreateWindow("Hello");
// 一些初始化操作
init();
// 添加回调*****重要
glutDisplayFunc(createRect);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
// 真正开始绘制
glutMainLoop();
return 0;
}
相关文章推荐
- OpenGL 库 简介
- OpenGL编程指南1:OpenGL简介
- 多窗口使用OpenGL——wglShareLists使用简介
- OpenGL和OpenGl ES简介
- 现代3D图形编程学习-基础简介(3)-什么是opengl (译)
- OpenGL API 简介
- OpenGL VAO, VBO 使用简介
- OpenGL]-----简介及快速起步(基于VisualC++)
- 【Modern OpenGL】OpenGL简介
- OpenGL、OpenGL ES、OpenVG、GLX、EGL简介
- OpenGL简介
- siggraph 2007 ---- GPU Gems 3 和 OpenGL 3 简介 (转)
- 我的opengl编程学习(一)(简介、绘制图像、三维观察、光照)
- 计算机图形学第二章---概论(OpenGL简介)
- OpenGL学习一:OpenGL简介
- OpenGL 和OpenGL ES简介
- OpenGL开发环境简介
- OpenGL入门学习之OpenGL库简介
- Opengl API简介
- OpenGL简介--显示列表