OpenGL入门学习笔记(一)
来源:互联网 发布:g11s变频器的数据复写 编辑:程序博客网 时间:2024/06/05 22:41
OpenGL学习(一)
目录
用 [TOC]
来生成目录:
- OpenGL学习一
- 目录
- OpenGl特性
- OpenGL入门实例
- GlUT工具包提供的几个函数
- 实例绘制简单的几何图形
- 一指定顶点
- 二指定定点的命令
- 三画圆
OpenGl特性
OpenGL 作为当前主流的图形 API 之一,它在一些场合具有比 DirectX 更优越的特性。
1、与 C 语言紧密结合。
OpenGL 命令最初就是用 C 语言函数来进行描述的,对于学习过 C 语言的人来讲,OpenGL 是容易理解和
学习的。如果你曾经接触过 TC 的 graphics.h,你会发现,使用 OpenGL 作图甚至比 TC 更加简单。
2、强大的可移植性。
微软的 Direct3D 虽然也是十分优秀的图形 API,但它只用于 Windows 系统(现在还要加上一个 XBOX 游
戏机)。而 OpenGL 不仅用于 Windows,还可以用于 Unix/Linux 等其它系统,它甚至在大型计算机、各种
专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL 的基本命令都做到了硬件无关,甚至是
平台无关。
3、高性能的图形渲染。
OpenGL 是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对 OpenGL 提供强力支持,激烈
的竞争中使得 OpenGL 性能一直领先。
总之,OpenGL 是一个很 NB 的图形软件接口。至于究竟有多 NB,去看看 DOOM3 和 QUAKE4 等专业游戏就知道了。
OpenGL 官方网站(英文)
http://www.opengl.org
OpenGL入门实例
#include <GL/glut.h>void myDisplay(void){ glClear(GL_COLOR_BUFFER_BIT); glRectf(-0.5f, -0.5f, 0.5f, 0.5f); glFlush();}int main(int argc, char *argv[]){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("第一个 OpenGL 程序"); glutDisplayFunc(&myDisplay); glutMainLoop(); return 0;}
该程序的作用是在一个黑色的窗口中央画一个白色的矩形
GlUT工具包提供的几个函数
实例:绘制简单的几何图形
- OpenGL中的点被画成单个的像素
- OpenGL中规定,一个多边形必须是一个凸多边形(如果使用的多边形不是凸多边形,则最后输出的效果是未定义的)可以尽量使用三角形
(一)指定顶点
以 glVertex开头,后面跟一个数字和 1~2 个字母。
例如: glVertex2d glVertex3f glVertex3fv
数字表示参数的个数,2 表示有两个参数,3 表示三个,4 表示四个(我知道有点罗嗦~)。
字母表示参数的类型,s 表示 16 位整数(OpenGL 中将这个类型定义为 GLshort),
- i 表示 32 位整数(OpenGL 中将这个类型定义为 GLint 和 GLsizei),
- f 表示 32 位浮点数(OpenGL中将这个类型定义为 GLfloat 和 GLclampf),
- d 表示 64 位浮点数(OpenGL 中将这个类型定义为 GLdouble
- v 表示传递的几个参数将使用指针的方式,见下面的例子。
这些函数除了参数的类型和个数不同以外,功能是相同的。例如,以下五个代码段的功能相同
glVertex2i(1, 3);glVertex2f(1.0f, 3.0f);glVertex3f(1.0f, 3.0f, 0.0f);glVertex4f(1.0f, 3.0f, 0.0f, 1.0f);GLfloat VertexArr3[] = {1.0f, 3.0f, 0.0f};glVertex3fv(VertexArr3);
(二)指定定点的命令
指定顶点的命令必须包含在 glBegin 函数之后,glEnd 函数之前(否则
指定的顶点将被忽略)。并由 glBegin 来指明如何使用这些点。
glBegin(GL_POINTS);glVertex2f(0.0f, 0.0f);glVertex2f(0.5f, 0.0f);glEnd();
这两个点将会分别画出来,如果将 GL_POINTS 替换成 GL_LINES,则两个点将被认为是直线的两个端点,OpenGL 将会画出一条直线。
glBegin 支持的方式除了 GL_POINTS 和 GL_LINES,还有 GL_LINE_STRIP,GL_LINE_LOOP,GL_TRIANGLES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN 等
void myDisplay(void){glClear(GL_COLOR_BUFFER_BIT);glBegin( /* 在这里填上你所希望的模式 */ );/* 在这里使用 glVertex*系列函数 *//* 指定你所希望的顶点位置 */glEnd();glFlush();}
(三)画圆
#include <GL/glut.h>#include <math.h>const int n = 20;const GLfloat R = 0.5f;const GLfloat Pi = 3.1415926536f;void myDisplay(void){ int i; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); for(i=0; i<n; ++i) glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i)); glEnd(); glFlush();}int main(int argc, char *argv[]){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("第一个 OpenGL 程序"); glutDisplayFunc(&myDisplay); glutMainLoop(); return 0;}
- OpenGL入门学习笔记(一)
- OpenGL入门学习笔记(一)
- OpenGL入门学习笔记一
- OpenGL入门笔记(一)
- OpenGL入门学习(一)
- OpenGL入门学习(一)
- OpenGL入门学习(一)
- OpenGL入门学习(一)
- OpenGL入门学习(一)
- OpenGL入门学习(一)
- OpenGL入门学习(一)
- OpenGL入门学习(一)
- OpenGL入门学习(一)
- OpenGL入门学习(一)
- 初识openGL---openGL学习笔记(一)
- Opengl学习笔记(一)
- OpenGL学习笔记(一)
- OpenGL学习笔记(一)
- 安装MYSQL-python
- 一张图说明,到底调谁的operator new
- python学习之列表
- 求三个数中最大者
- ros gdb
- OpenGL入门学习笔记(一)
- java 蓝桥杯 分解质因子
- 11G RAC OLR维护命令
- 做过程序员的产品经理是一种什么样的存在?
- bzoj 3667: Rabin-Miller算法 (Miller_rabbin+Pollard rho)
- Morphological filtering/形态学滤波
- js参数中不能出现有反斜杠
- 让绝对定位的元素水平居中对齐
- 设计模式学习笔记一(创建型)