2016-04-24 3 views
1

Ich bin derzeit fest auf etwas Arbeit, die ich nicht herausfinden kann, wie man die Gesichter und die Ecken oder die Gesichter auf, wo sie gehen müssen. Wenn jemand in der Lage wäre, mir die Mathematik hinter dem Code zu erklären und wie ich es ausarbeiten kann, um das Sechseck zu einem 3D zu machen, das großartig wäre.Wie zeichne ich eine 3D-Form mit Open TK C#

danke

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 

    initProgram(); 

    vertdata = new Vector3[] { 

     //new Vector3(0.0f,0.0f,0.0f), // center 
     //new Vector3(2.0f, 0f,0f), // right hand side 
     //new Vector3(0f,2f,0f), // up 

     new Vector3(0.0f,0.0f,-0.8f), // center point 
     new Vector3(2.0f,0.0f,-0.8f), // right hand side 
     new Vector3(1.0f,1.7f,-0.8f), // right hand top 
     new Vector3(-1.0f,1.7f,-0.8f), // right hand top 
     new Vector3(-2.0f,0.0f,-0.8f), // left hand top 
     new Vector3(-1.0f,-1.7f,-0.8f), 
     new Vector3(1.0f,-1.7f,-0.8f), // right hand top 
    }; 

    indicedata = new int[]{ 
     //front 
     0, 1, 2, 
     0, 2, 3, 
     //back 
     0, 3, 4, 
     0, 4, 5, 
     //left 
     0, 5, 6, 
     0, 6, 1, 
    }; 

    coldata = new Vector3[] { new Vector3(1f, 0f, 0f), 
     new Vector3(0f, 0f, 1f), 
     new Vector3(0f, 1f, 0f),new Vector3(1f, 0f, 0f), 
     new Vector3(0f, 0f, 1f), 
     new Vector3(0f, 1f, 0f),new Vector3(1f, 0f, 0f), 
     new Vector3(0f, 0f, 1f)}; 

    mviewdata = new Matrix4[]{ 
     Matrix4.Identity 
    }; 

    Title = "Hello OpenTK!"; 
    GL.ClearColor(Color.DarkTurquoise); 
    GL.PointSize(5f); 
} 

Antwort

0

Sie so etwas wie dieses könnten versuchen, Sie ein wenig mehr Kontrolle über Ihre Sechseck zu geben:

points[0] = vec3(0.0f,0.0f,0.0f) 
for(int i = 1; i < 7; ++i) { 
    points[i] = vec3(sin(i/6.0*HEX_SIZE*M_PI), 
        cos(i/6.0*HEX_SIZE*M_PI)); 
} 

Grundsätzlich Sie 60 Grad zu einer Zeit bewegen und einen Punkt zu schaffen an der richtigen Stelle. Ihre Indizes sehen korrekt aus, wenn Sie einzelne Dreiecke erstellen, aber Sie könnten einen Dreieckslüfter (etwas antiquiert) erstellen, indem Sie Folgendes verwenden:

private short[] indicedata = { 0, 1, 2, 3, 4, 5, 6, 1 }; 
... 
glDrawElements(GL_TRIANGLE_FAN, indicedata.length, GL_UNSIGNED_SHORT, indexBuffer);