2016-03-29 8 views
-4

Ich versuche, einen zwei gelben Pacman (einen offenen Mund und eine Ebene) und auch einen Geist zu machen, aber ich bin ziemlich noob mit openGL.Wie man Pacmans Charaktere in OpenGL macht

Könnte jemand mir Code geben, um sie zu machen?

+1

Bitte nehmen Sie eine "[Tour] (http://stackoverflow.com/tour)", um zu verstehen, wie SO funktioniert. Fragen wie "Gib mir die Lösung für etwas" werden höchstwahrscheinlich nicht beantwortet. Bitte zeig uns was du bisher versucht hast und weise auf dein Problem hin. – Peter

+0

Danke Peter für deine Antwort. Ich würde fragen, ob jemand diese Figuren schon gemacht hätte und ob er es mir geben könnte. Ich bin leider zu schlecht mit OpenGL, um es selbst zu machen. –

Antwort

3

OpenGL ist einfach eine Möglichkeit, Dinge zu zeichnen. Sie müssen herausfinden, was Sie zeichnen möchten. Ein Pacman ist jedoch eine relativ einfache Form: Es ist nur ein gefüllter Bogen.

Ich nehme an, Sie wissen bereits, wie man ein Dreieck zeichnet. Ein Kreis ist im Wesentlichen eine Reihe von Dreiecken mit einem gemeinsamen Mittelpunkt:

circle with triangles

Wenn Sie es in genug Dreiecken teilen, wird es völlig glatt auf dem Bildschirm erscheinen. Die optimale Anzahl hängt von der Größe Ihres Pacman ab.

Jetzt, um den "Mund" zu machen, einfach einige Scheitelpunkte an einer Stelle entfernen. Ein Pacman Mund bildet eine charakteristische Öffnung, die in der Richtung ausgerichtet ist, es bewegt sich und öffnet sich an „beide Enden“:

pacman shape

nun angenommen wird, um die Dreiecke unter Verwendung einer einfachen Schleife zeichnen (Pseudocode):

for (i : (0, 360)) { 
    rotate(i /* degrees */); // ---------- see remark 1. 
    drawTriangle(); 
} 

um die Öffnung Animation zu machen brauchen Sie nur die aktuelle Breite um die Hälfte von beiden Enden geteilt zu subtrahieren (nicht so schwer, schau!):

mouthOpenPercentage = 0.5; // varies from 0 to 1 
fullyOpenMouthSize = 0.1; // 10% of the circle, so around 36 deg 
numberOfSegments = 360; 
mouthOpenSegments = fullyOpenMouthSize * mouthOpenPercentage * numberOfSegments/2; 

for (i : (mouthOpenSegments, numberOfSegments - mouthOpenSegments)) { 
    rotate(i /* degrees */); 
    drawTriangle(); 
} 

Wenn es z.B. oben statt rechts, drehen Sie einfach zuerst um den gewünschten Winkel, um ihn in die gewünschte Richtung zu "richten".


1. I angenommen, dass rotate bedeutet "absolute Rotation". Denken Sie daran.

+0

Vielen Dank Bartek für Ihre Antwort. Leider ist es ziemlich schwierig für mich, einen einfachen Kreis mit openGL zu zeichnen. –

+0

@ b.allain732 Dann versuche vielleicht zuerst ein paar Quellen über Grundgeometrie und Trigonometrie zu finden, denn ohne das Grundlagenwissen wird es schwer für dich Fortschritte zu machen. –