OPENGL中简单点的理解以及关于照相机的简单理解

代码基于前面的QT+SDL+OPENGL的架构

顺便在上面研究下OPENGL的代码

首先是最基本的点的理解。

首先看一下OPNEGL的坐标系

典型的XYZ坐标系,有高中的立体几何的知识就可以轻松搞定。

下面我们尝试来画点。首先点的定义有好几种方式,目前我们只用向量的方式,也就是一个数组,一个(X,Y,Z)的数组

static GLfloat v0[] = {1.0f, 1.0f,  0.0f};

这就定义了一个点的坐标,还是个浮点类型的。参数分别就是X,Y,Z轴的坐标。

如果点是(0,0,0)的话


不知道为什么,点向X轴方向偏移了一个像素~~

画点部分的代码应该是

    glBegin(GL_POINTS);
    glColor4ubv( red );
    glVertex3fv( v0 );
    glEnd();

这里GL_POINTS控制了说明是画点的操作,这里还涉及了颜色的问题

    static GLubyte red[]    = {255, 0  , 0  , 255};
    static GLubyte black[]  = {0, 0, 0, 255};

看了颜色的定义就明白了,颜色也是个数组,R,G,B,A带有透明度的。

上面的代码我们定义了一个点的颜色。

下面再看几个点的


点挺小的,要仔细看才能看出来

再来一个

这个点是(-1,-1,1),这里没有画出坐标系的参考线,不过大致的偏移是没问题的。


这里,有人会问了,线怎么画的?我就定义两个点,然后画线就是了,下面给出代码

    static GLfloat x0[] = {-10.0f, 0.0f, 0.0f};
    static GLfloat x1[] = {10.0f, 0.0f, 0.0f};
    static GLfloat y0[] = {0.0f, -10.0f, 0.0f};
    static GLfloat y1[] = {0.0f, 10.0f, 0.0f};
    static GLfloat z0[] = {0.0f, 0.0f, -10.0f};
    static GLfloat z1[] = {0.0f, 0.0f, 10.0f};

画线的话,改一下上面画点的参数

    glBegin(GL_LINES);
    glColor4ubv( black );
    glVertex3fv(x0);
    glColor4ubv( black );
    glVertex3fv(x1);
    glColor4ubv( black );
    glVertex3fv(y0);
    glColor4ubv( black );
    glVertex3fv(y1);
    glColor4ubv( black );
    glVertex3fv(z0);
    glColor4ubv( black );
    glVertex3fv(z1);
    glEnd();

这里,有人会发现,我们是XYZ坐标系,但是现在只出现了XY没有Z。

是的因为还有段代码是

    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();
    gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

这里面的重点是gluLookAt函数。后面跟了9个参数~~恐怖啊

首先说这个函数是用来确定照相机的位置的,照相机嘛~~照相机在哪儿咱就从哪儿开始观察的。

前面三个是X,Y,Z的位置,也就是照相机在空间里的位置,通过这个可以移动照相机的位置

中间三个是照相机镜头对准的点,我们这里对准的是0,0,0原点。也就是对焦的点啦

后面三个比较个性,是照相机朝向~~,你看我们都用过照相机把,中间有个取景器,上面有个快门,OK,你可以理解快门的方向就是后面这三个参数所构成的向量的方向。这里我们的0,1,0表示正常情况下端着照相机的方向。

这就好理解了,照相机放在Z轴正向的位置,对着原点,也就是Z轴负方向,照相机朝上拿着就是Y轴正向,那我们看到的就是XOY面的正视图啦。~~正视图~~懂了不。

最后,我们改变一下照相机的位置,再来看一看。


这是在(-1,-5,0)的位置上画的,这时候的观察角度是

gluLookAt(5.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

是的,没错,(5,5,5)是三个轴的正方向的区域,一个俯视45度角的角度来观察的。

向量的方向~~(1,1,1),自己比划比划~~,照相机就在这条线上~~

到现在,差不多,点的方面可以有所掌握了,主要还是对坐标系统有所了解了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值