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

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

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

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

首先看一下OPNEGL的坐标系

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

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

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

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

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


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

画点部分的代码应该是

  1. glBegin(GL_POINTS);  
  2. glColor4ubv( red );  
  3. glVertex3fv( v0 );  
  4. glEnd();  

这里GL_POINTS控制了说明是画点的操作,这里还涉及了颜色的问题
  1. static GLubyte red[]    = {255, 0  , 0  , 255};  
  2. static GLubyte black[]  = {0, 0, 0, 255};  

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

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

下面再看几个点的


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

再来一个

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


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

  1. static GLfloat x0[] = {-10.0f, 0.0f, 0.0f};  
  2. static GLfloat x1[] = {10.0f, 0.0f, 0.0f};  
  3. static GLfloat y0[] = {0.0f, -10.0f, 0.0f};  
  4. static GLfloat y1[] = {0.0f, 10.0f, 0.0f};  
  5. static GLfloat z0[] = {0.0f, 0.0f, -10.0f};  
  6. static GLfloat z1[] = {0.0f, 0.0f, 10.0f};  

画线的话,改一下上面画点的参数
  1. glBegin(GL_LINES);  
  2. glColor4ubv( black );  
  3. glVertex3fv(x0);  
  4. glColor4ubv( black );  
  5. glVertex3fv(x1);  
  6. glColor4ubv( black );  
  7. glVertex3fv(y0);  
  8. glColor4ubv( black );  
  9. glVertex3fv(y1);  
  10. glColor4ubv( black );  
  11. glVertex3fv(z0);  
  12. glColor4ubv( black );  
  13. glVertex3fv(z1);  
  14. glEnd();  

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

是的因为还有段代码是

  1. glClear(GL_COLOR_BUFFER_BIT);  
  2. glLoadIdentity();  
  3. 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)的位置上画的,这时候的观察角度是

  1. 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),自己比划比划~~,照相机就在这条线上~~

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

posted @ 2017-08-02 17:40  苍月代表我  阅读(711)  评论(0)    收藏  举报