2011-03-20 6 views

Répondre

2

glutWireCube n'est pas une fonction OpenGL. Il fait partie de GLUT, une bibliothèque souvent confondue avec OpenGL.

1

Cette fonction dessine un cube solide en utilisant l'ancien pipeline de fonction fixe, modifiez-le selon vos besoins. J'ai écrit les déclarations de variables à l'intérieur de la fonction pour plus de brièveté, mais vous devriez les retirer de la fonction si vous voulez plus de performance. Je recommande également de réécrire la fonction pour utiliser GL.DrawElements() à la place.

private void DrawBox(float size) 
    { 
     float[,] n = new float[,]{ 
      {-1.0f, 0.0f, 0.0f}, 
      {0.0f, 1.0f, 0.0f}, 
      {1.0f, 0.0f, 0.0f}, 
      {0.0f, -1.0f, 0.0f}, 
      {0.0f, 0.0f, 1.0f}, 
      {0.0f, 0.0f, -1.0f} 
     }; 
     int[,] faces = new int[,]{ 
      {0, 1, 2, 3}, 
      {3, 2, 6, 7}, 
      {7, 6, 5, 4}, 
      {4, 5, 1, 0}, 
      {5, 6, 2, 1}, 
      {7, 4, 0, 3} 
     }; 
     float[,] v = new float[8,3]; 
     int i; 

     v[0,0] = v[1,0] = v[2,0] = v[3,0] = -size/2; 
     v[4,0] = v[5,0] = v[6,0] = v[7,0] = size/2; 
     v[0,1] = v[1,1] = v[4,1] = v[5,1] = -size/2; 
     v[2,1] = v[3,1] = v[6,1] = v[7,1] = size/2; 
     v[0,2] = v[3,2] = v[4,2] = v[7,2] = -size/2; 
     v[1,2] = v[2,2] = v[5,2] = v[6,2] = size/2; 

     GL.Begin(BeginMode.Quads); 
     for (i = 5; i >= 0; i--) { 
      GL.Normal3(ref n[i, 0]); 
      GL.Vertex3(ref v[faces[i, 0], 0]); 
      GL.Vertex3(ref v[faces[i, 1], 0]); 
      GL.Vertex3(ref v[faces[i, 2], 0]); 
      GL.Vertex3(ref v[faces[i, 3], 0]); 
     } 
     GL.End(); 
    }