webGL 投影

OpenGL中的投影变换

投影变换相当于选择相机的镜头或则说调整相机的焦距,并把确定的物体投影到胶片上

投影变换确定了视野的大小或视图体的大小

确定哪些物体在视野之内,以及它们的形状和大小

看到的结果投影到投影平面上

投影变换的分类

透视投影

  类似于在现实生活中观察事物,越远的物体显示的越小。如观察一条比笔直的马路,边界在很远处近似于交汇于一点。

正交投影

  这种方式平行地投影与屏幕,物体的大小不发生任何变化,不管被投影的物体是远还是近。

void glFrustum(GLdouble left,GLdouble Right,GLdouble bottom,GLdouble top,

                              GLdouble near,GLdouble far);

它创建一个透视景体。其操作是创建一个投影矩阵,并且在这个矩阵乘以当前矩阵。这个函数只定义进裁剪平面的左下角点和右上角点的三维空间坐标,即(left,bottom,-near)和(right,top,-near);最后一个参数far 是远裁剪平面的 Z 负值,其左下角点和右上角点空间坐标由函数根据透视投影原理自动生成。near和far 表示离视点的远近。它们总为正值。



void gluPerspective (GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar);

  它也创建了一个对称透视视景体,但它的参数定义于前面的不同,参数fovy定义视野在X-Z平面的角度,范围是【0.0,180.0】;参数aspect是投影平面宽度与高度的比率;参数zNear和Far分别是远近裁剪面沿Z负轴到视点的距离,它们总为正值。


void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,

                          GLdouble near,GLdouble far)

   它创建一个平行视景体。实际上这个函数的操作是创建一个正射投影矩阵,并且用这个矩阵乘以当前矩阵。其中近裁剪平面是一个矩形,矩形左下角点三维空间坐标是(left,bottom,-near),右上角点事(right,top,-near);远裁剪平面也是一个矩形,左下角点空间坐标是(left,bottom,-far),右上角点是(right,top,-far)。所有的near和far值同时为正或同时为负。如果没有其他变换,正射投影的方向平行与Z轴,且视点朝向Z负轴。



OpenGL中的模型变换

视点变换

  视点变换是在视点坐标系中进行的。视点坐标系与一般的物体所在的世界坐标系不同,它遵循左手法则,即左手大拇指指向Z正轴,与之垂直的四个手指

指向X正轴,四指弯曲90度的方向是Y正轴。而世界坐标系遵循右手法则。

  当矩阵初始化glLoadIdenitity()后,调用glTranslatef()作视点转换。

  函数参数(x,y,z)表示视点或相机视点坐标系中移动的位置,这里z=-5.0,意思是将相机初始化方向都指向Z负轴移动5个单位。

    通常相机位置缺省值同场景中的物体一样,都在原点处,而且相机初始方向都指向Z轴负轴。

    这里相机移走后,仍然对准立方体,如果相机需要指向另一方向,则调用glRotatef()可以改变

  在OpenGL中,实质上只有模拟变换,视图变换只是一种模拟。

  OpenGl中的视口变换



OpenGL视坐标变换中常用的函数

1)glMatrixMode(GLENUM mode)

常用的有二个参数:

   GL_MODELVIEW

   GL_PROJECT

2)glLoadIdentity(void)

   把当前矩阵更改为单位矩阵

3)glTranslate{fd}(TYPEx,TYPEy,TYPEz)

平移

4)glRotate{fd}(TYPE andgle,TYPE x TYPE y,TYPE z)

    旋转

5)gluLookAt(GLdouble eyes,GLdouble eyey,Ldouble eyez,

                           GLdouble centerx,GLdouble centery,GLdouble centerz,

                           GLdouble upx,GLdouble upy,GLdouble centerz)

    含义:

   选准一个位置(视野较好,eyex,eyey,eyez))

    选准前面一个点(中心点centerx,centery,centerz)

     然后偏头到一定的角度(upx,upy,upz).



OpenGL视坐标转换中常用的函数

6)glFrustum(GLdouble left,GLdouble right,

                                                           GLdouble bottom,GLdouble top,

                                                           GLdouble near, GLdouble far)





7)glPerspective(GLdouble fovy,GLdouble aspect,

                                GLdouble znear,GLdouble zfar)

     aspect为视口的长宽比例



8)glOrtho(GLdouble left,GLdouble right,

                       GLdouble bottom,GLdouble top,

                       GLdouble near,GLdouble far)


9)glViewport(GLint x,GLint y

                        GLsizei width,GLsizei height)

 定义视区(用来显示最终的图行)


10)glPushMatrix(void)

    当前矩阵入栈

11)glPopMatrix(void)

     当前矩阵出栈





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值