mac上学用opengl(3)-画简单的三维图形

前面画的虽然都是三维的点操作,但是画出的图形看不出三维的效果

简单的理解一下:三维里的图形比二维多的是 视点与物体的相对位置布局,以及有投影变换

所以我们需要理解的三维中的几个概念:

视图变换----观测三维模型的角度不同,显示内容不同

模型变换----三维模型的放大,缩小,移动,旋转

投影----三维模型应该近大远小

视口的设置-----只看模型一部分,该如何显示,选择性视野忽略症

双缓存-----显存里一块用来绘制图形,一块用来显示,提高性能用

垂直同步------全部绘制好了再显示,提高性能用

FPS的测试方法:FPS即每秒多少针,测试方法是多次求平均值

一个三维图形代码的例子框架与解释,一般是先设置投影,再设置视图,再画

#include <GLUT/GLUT.h>

#include <math.h>

void display(  void )

{

  //清除颜色缓存

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  

  //先设置投影参数再设置视点布局参数

  //投影参数解决视角,长宽比,近点,远点4个问题

  //视点布局解决眼睛位置,物体位置,眼睛与物体方向 3个问题

  //设置投影变换参数

  glMatrixMode(GL_PROJECTION);

  glLoadIdentity();

  gluPerspective                            // 设置透视图

  (45,                            // 透视角设置为 45 度,在Y方向上以角度为单位的视野

   1.0,    // 窗口的宽与高比

   0.1f,                                // 视野透视深度:近点1.0f

   3000.0f                            // 视野透视深度:始点0.1f远点1000.0f

   );

  

  //开始画模型

  glMatrixMode(GL_MODELVIEW);

  glLoadIdentity();

  //眼睛位于(0,10,100)位置,物体位于(0,0,0)位置,方向是从上往下看(0,1,0)

  gluLookAt(10,10,100,0,0,0,0,1,0);


  glColor3f(0.5f0.7f1.0f);

  

  //生成三角

  glBegin(GL_LINES);

  for(int i=-1000;i<=1000;i+=10)

  {

    glVertex3f(0,0,i);

    glVertex3f(10,10,i);

    

    glVertex3f(0,0,i);

    glVertex3f(-10,10,i);

  }

  glEnd();

  

  //生成网络

  int x=(int)(40*2);

  glBegin(GL_LINES);

  for(int i=-x;i<=x;i+=4)

  {

    glVertex3i(-x,0,i);

    glVertex3i(x,0,i);

    

    glVertex3i(i,0,x);

    glVertex3i(i,0,-x);

  }

  glEnd();

  

  

  //生成球体

  GLUquadricObj * pObj;

  pObj = gluNewQuadric();

  gluQuadricDrawStyle(pObj,GLU_LINE);

  gluQuadricNormals(pObj,GLU_SMOOTH);

  gluSphere(pObj,16,16,16);

  

  glFlush();

}


void testDisplay(void){

  glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //设置显示属性为RBGA颜色,双缓存

  glutInitWindowPosition(200, 200);//设置窗口位置

  glutInitWindowSize(WIDTH,HEIGHT);//设置窗口大小

  glutCreateWindow("OpenGL测试");//生成窗口

  glutDisplayFunc(&display);//设置显示回调函数

}

/***************************/


int main(int argc, const char * argv[])

{

  glutInit(&argc, argv);//初始化GLUT

    testDisplay();


  glutMainLoop();//事件循环 


  return 0;}


你可能感兴趣的:(mac上学用opengl(3)-画简单的三维图形)