技术开发 频道

游戏是这样写成的(五)

  【IT168 技术文档】

在Wrapper里,我加了两个新功能,一个是Enable2D,一个是Enable3D,方便我们混合2D/3D。

  1. void Enable2D()
  2. {
  3.     int width = SCREEN_WIDTH;
  4.     int height = SCREEN_HEIGHT;
  5.    
  6.     glViewport      (0, 0, width, height);
  7.    
  8.     glMatrixMode    (GL_PROJECTION);
  9.     glLoadIdentity  ();
  10.     glOrthof(0, (float)width, 0, (float)height, 0, 100);
  11.     glMatrixMode    (GL_MODELVIEW);
  12.     glLoadIdentity();
  13.    
  14.     glEnable                (GL_BLEND);
  15.     glEnable                (GL_TEXTURE_2D);
  16.     glDisable                (GL_CULL_FACE);
  17.     glDisable                (GL_DEPTH_TEST);
  18.     glDisable                (GL_LIGHTING);
  19.     //glDisableClientState    (GL_NORMAL_ARRAY);
  20.    
  21. }
  22.  
  23.  
  24. void Enable3D()
  25. {    
  26.     int width = SCREEN_WIDTH;
  27.     int height = SCREEN_HEIGHT;
  28.     float aspect = (float)width/(float)height;
  29.    
  30.     glViewport          (0, 0, width, height);
  31.     glScissor           (0, 0, width, height);
  32.    
  33.     //glMatrixMode        (GL_MODELVIEW);
  34.     //glLoadIdentity      ();
  35.    
  36.     glMatrixMode        (GL_PROJECTION);
  37.     glLoadIdentity      ();
  38.     InitPerspective     (60.f, aspect, 0.1f, 1000.f);
  39.    
  40.     glMatrixMode        (GL_MODELVIEW);
  41.     glLoadIdentity      ();
  42.    
  43.    
  44.     glEnable           (GL_CULL_FACE);
  45.     //glDisable            (GL_BLEND);
  46.     glEnable            (GL_DEPTH_TEST);
  47.     //glEnable            (GL_LIGHTING);
  48.     //glEnableClientState (GL_NORMAL_ARRAY);
  49.    
  50.     //glEnable(GL_NORMALIZE);    
  51. }

  因为我们没有用lighting, 我把Normal Array暂时弄走了。

  这个例子,每隔8秒会换到另一个动作。人的模型是732面,枪是102面。 

0
相关文章