2015-12-12 1 views
0

Donc, je fais un projet de simulation d'oléoduc qui a trois fenêtres; la fenêtre de statistiques (pour les détails du pipeline), la fenêtre de simulation (pour plus de détails sur le fonctionnement du pipeline et la fenêtre du milieu) la simulation 2D de l'oléoducCréation de formes dans la bibliothèque OpenTK en C#?

La simulation 2D est en fait là, à des fins esthétiques- le gros problème est fait dans la classe Maths.cs que j'ai déjà programmée, donc ma question est la suivante:

En utilisant des formes dans la bibliothèque OpenTK, tout ce que j'ai l'air de construire est des triangles. code utilisé pour construire le triangle mais sinon il ne semble pas y avoir d'autres formes Est-il possible de dessiner un 1) Cercle, 2) Rectangle et 3) Ligne?

En outre, que fait la classe 'BeginMode'? Je pense que cela permettrait de résoudre le problème, en utilisant quelque chose d'autre que BeginMode je peux accéder à d'autres formes à travers un autre classe ??

Merci :-)

private void viewportGL_Paint(object sender, PaintEventArgs e) 
    { 
     if (!loaded) 
      return; 

     GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); 

     GL.MatrixMode(MatrixMode.Modelview); 
     GL.LoadIdentity(); 

     GL.Translate(x, 0, 0); 

     GL.Color3(Color.Aqua); 
     GL.Begin(BeginMode.Triangles); 
     GL.Vertex2(10, 20); 
     GL.Vertex2(100, 20); 
     GL.Vertex2(100, 50); 
     GL.End(); 

     viewportGL.SwapBuffers(); 

    } 

    int x = 0; 
    private void viewportGL_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Space) 
      x+=4; 
     viewportGL.Invalidate(); 
    } 
+0

Il n'y a pas primitive comme un cercle, mais vous pouvez le construire en définissant plusieurs triangles entre Begin() et End(). – nmin

+0

Seriez-vous en mesure de fournir le code source pour le faire s'il vous plaît? J'ai de vrais problèmes. :( – sea1997

Répondre

0

Je vais donc maintenant étendre à une réponse:

float step = (float) Math.PI/10; 
GL.Color3(Color.Aqua); 
GL.Begin(BeginMode.Triangles); 
for (float angle = 0.0f; angle < Math.PI*2 - 0.001f; angle += step) { 
    GL.Vertex2(0.0f, 0.0f); 
    GL.Vertex2(Math.Cos(angle), Math.Sin(angle)); 
    GL.Vertex2(Math.Cos(angle - step), Math.Sin(angle - step)); 
} 
GL.End(); 

BeginMode est un Enum et il dit essentiellement OpenGL sur l'entrée type primitif. Je pense que PrimitiveType fait la même chose mais on pourrait argumenter que sa signification est plus intuitive. Pour un rectangle, vous pouvez écrire:

GL.Begin(PrimitiveType.Quads); 
GL.Vertex2(-0.5f, -0.5f); 
GL.Vertex2(0.5f, -0.5f); 
GL.Vertex2(0.5f, 0.5f); 
GL.Vertex2(-0.5f, 0.5f); 
GL.End(); 

par la façon dont vous pouvez jeter un coup d'oeil au manuel OpenTK: http://www.opentk.com/doc/graphics