opengl基础知识

一、OpenGL数据类型
  与C语言相对应,OpenGL中也有整数、字节、浮点数等数据类型,为了说明两者的对应关系,下表将OpenGL的数据类型与相应的C类型进行了对比:

前缀

数据类型

相应C语言类型

OpenGL类型

b

8-bit integer

signed char

GLbyte

s

16-bit integer

short

GLshort

i

32-bit integer

long

GLint,GLsizei

f

32-bit floating-point

float

GLfloat,GLclampf

d

64-bit floating-point

double

GLdouble,GLclampd

ub

8-bit unsigned integer

unsigned char

GLubyte,GLboolean

us

16-bit unsigned integer

unsigned short

GLushort

ui

32-bit unsigned integer

unsigned long

GLuint,GLenum,GLbitfield

                表一、OpenGL数据类型表
二、OpenGL库函数的命名规律
  所有OpenGL函数采用了以下格式:
<库前缀><根命令><可选的参数个数><可选的参数类型>
  库前缀有gl、glu、aux、glut、wgl、glx等等,分别表示该函数属于OpenGL某开发库等,从函数名后面中还可以看出需要多少个参数以及参数的类型。i代表int型,f代表float型,d代表double型,u代表无符号整型。注意,有的函数参数类型后缀前带有数字2、3、4。2代表二维,3代表三维,4代表alpha值(以后介绍)。有些OpenGL函数最后带一个字母v,表示函数参数可用一个指针指向一个向量(或数组)来替代一系列单个参数值。

下面两种格式都表示设置当前颜色为红色,二者等价。
  glColor3f(1.0,0.0,0.0);等价于:

  float color_array[]={1.0,0.0,0.0};
  glColor3fv(color_array[0]);

  除了以上基本命名方式外,还有一种带"*"星号的表示方法,例如glColor*(),它表示可以用函数的各种方式来设置当前颜色。同理,glVertex*v()表示用一个指针指向所有类型的向量来定义一系列顶点坐标值。

任何复杂的三维模型都是由基本的几何图元:点、线段和多边形组成的,有了这些图元,就可以建立比较复杂的模型。因此这部分内容是学习OpenGL编程的基础。
三、基本图元的描述及定义
OpenGL图元是抽象的几何概念,不是真实世界中的物体,因此须用相关的数学模型来描述。所有的图元都是由一系列有顺序的顶点集合来描述的。OpenGL中绘制几何图元,必须使用glBegin()glEnd()这一对函数,传递给glBegin()函数的参数唯一确定了要绘制何种几何图元,同时,在该函数对中给出了几何图元的定义,函数glEnd()标志顶点列表的结束。例如,下面的代码绘制了一个多边形:

glBegin(GL_POLYGON);
glVertex2f(0.0,0.0);
glVertex2f(0.0,3.0);
glVertex2f(3.0,3.0);
glVertex2f(4.0,1.5);
glVertex2f(3.0,0.0);
glEnd();


  函数glBegin(GLenummode)标志描述一个几何图元的顶点列表的开始,其参数mode表示几何图元的描述类型,具体类型见表一:

类型

说明

GL_POINTS

单个顶点集

GL_LINES

多组双顶点线段

GL_POLYGON

单个简单填充凸多边形

GL_TRAINGLES

多组独立填充三角形

GL_QUADS

多组独立填充四边形

GL_LINE_STRIP

不闭合折线

GL_LINE_LOOP

闭合折线

GL_TRAINGLE_STRIP

线型连续填充三角形串

GL_TRAINGLE_FAN

扇形连续填充三角形串

GL_QUAD_STRIP

连续填充四边形串

                  表二、几何图元类型说明

  在glBegin()glEnd()之间最重要的信息就是由函数glVertex*()定义的顶点,必要时也可为每个顶点指定颜色(只对当前点或后续点有效)、法向、纹理坐标或其他,即调用相关的函数:

任何复杂的三维模型都是由基本的几何图元:点、线段和多边形组成的,有了这些图元,就可以建立比较复杂的模型。

三、多边形(Polygon)

  凸、凹多边形。
  OpenGL定义的多边形是由一系列线段依次连结而成的封闭区域,多边形可以是平面多边形,即所有顶点在一个平面上,也可以是空间多边形。OpenGL规定多边形中的线段不能交叉,区域内不能有空洞,也即多边形必须是凸多边形(指多边形任意非相邻的两点的连线位于多边形的内部),不能是凹多边形,否则不能被OpenGL函数接受。凸多边形和凹多边形见图。


 四、程序参数说明

 1. #include <gl/glut.h>       //header file for GLUT

 2voidmain(int argc, char **argv);

  变量argc包含了传递到程序的参数的数目,argv是一个指向参数的指针。系统将它们传给glutInit(),让其能够处理发送到GLUT的任何命令行参数。

3.glutInitDisplayMode

该函数用来设置显示模式。可以用以下的参数来调用它:

  • GLUT_RGB 指明要在窗口中使用一个RGB颜色缓存区。
  • GLUT_DOUBLE 指明要一个双缓冲区。双缓冲区使得在图像被送到屏幕前完成绘制,从而防止闪烁。
  • GLUT_DEPTH 指明要一个深度缓冲区。深度缓冲区确保靠近camera的物体永远在较远的物体上面。当只绘制单个的三角形的时候,这就没有必要。
  •  4  glutCreateWindow()函数创建供绘制的窗口。
  • 5.  glutDisplayFunc()  回调函数diaplay的注册函数,绘制屏幕的函数, GLUT在显示需要更新的时候调用这个函数。

6.glutMainLoop()函数是GLUT框架中的主循环函数, 

7. glClear()将清空窗口的颜色和深度缓冲区。需要在绘制之前做这个工作。

8.在glBegin()和glEnd()之间,需要用glVertex3f指定4个顶点。在每个glVertex2i()调用中的2个值是顶点在世界空间中的X,Y和Z=0坐标。

 

其实: intmain(int argc,char *argv[]) UNIX Linux 中的标准写法,而 int main() 只是 UNIX Linux 默许的用法..

理解 voidmain(int argc, char** argv)

这个函数搞个两星号,看上去就复杂了点儿,如果改成这样就感觉熟悉的了许多voidmain(int argc, char* argv[ ])

void main(int argc, char* argv[ ])等同于void main(int argc, char* *argv)

这行中有三个字符串分别为 cp.exedoc1.txt doc2.txt
argc3,即argc是命令行中参数的个数。
char *argv[]
为一个指像字符串的数组。

argv[0]="cp.exe"

argv[1]="doc1.txt"
argv[2]="doc2.txt"
agv[0]
为一个字符串指针,它就象*p=”goodbye” 实际上是*argv[0]=”cp.exe”

pgoodbye的首地址,*p则指向goodbye的第一个字符,*p=”goodbye”p[]=”goodbye”完全一致的作用, 同理argv[0]就指向cp.exe的地址,*argv[0]指向cp.exe的第一个字符,即c

argc,argv[] 的作用:

下面看个例子test_argc.c

文件名:test_argc.c
#include<unistd.h>
#include<stdio.h>

int main(int argc,char *argv[])
{
if( argc==1 || argc>2 )
{
printf("
请输入想要编辑的文件名如:./test_argc filename \n");
}
if( argc==2 )
{
printf("
编辑%s\n",argv[1]);
}
exit (0);
}


编译该程序:gcc -otest_argc test_argc.c
运行:#./test_argc
结果: 请输入想要编辑的文件名如:./test_argcfille
运行:#./test_argc test_argc.txt
结果: 编辑 test_argc.txt

看到这里 argc,argv[]如何用就很明白了,argc 是外部命令参数的个数,argv[] 存放各参数的内容,如上例:执行 ./test_argc ,argc 1,
argv[0]
./test_argc .而执行./test_argc test_argc.txt ,argc 的值为 2,
argv[0]
./test_argc, argv[1] test_argc.txt .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值