Kreis zeichnen
-
Warum zeichnet die Funktion hier keinen Kreis:
(an PointXY liegts nicht, die Funktion funzt)
EDIT: Es wird nur ein eiziger Punkt, in der Mitte des Kreises gezeichnet, also is cos und sin wohl immer 0
int Circle(GLfloat centerx, GLfloat centery, GLfloat radius) { GLfloat x,y; GLfloat bgm=0; const GLfloat Pi=3.14159; for (bgm=0; bgm<=2*Pi; bgm+=0.001); { x=(cos(bgm)*radius)+centerx; y=(sin(bgm)*radius)+centery; PointXY(x,y); } }
-
Semikolon hinter for
-
man man und ich probier schon 15min da rum ey, danke dir!
-
MasterCounter schrieb:
man man und ich probier schon 15min da rum ey, danke dir!
Vielleicht solltest du zusätzlich (oder anstelle) zum ziellosen Herumprobieren das Benutzen eines Debuggers in Erwägung ziehen.
Mit einem Debugger deiner Wahl hättest du sofort gesehen, dass die for-Schleife nicht so ausgeführt wird, wie du willst.
-
sry, fürs falsche Topic, dacht halt zuerst es wär en Mathe Problem
-
BTW: Dein Algorithmus ist zwar vielleicht ganz intuitiv für den ersten Versuch, aber nicht gerade optimal. Bei kleinen Kreisen treibst Du einen viel zu großen Aufwand und bei großen Kreisen wirst du nur Punkte erzeugen, die kreisförmig angeordnet sind, aber nicht zusammenhängen. Ich empfehle Dir, diesbezüglich mal ein bischen im Netz nach besseren Algorithmen zu suchen. Guck dir zum Beispiel mal den Kreis-Algorithmus von Bresenham an. Eine Aufgabe wie "Kreis zeichnen" kann sehr leicht kritisch bezüglich der Performance sein. Deswegen denke ich, eine entsprechende Recherche würde sich in diesem Fall lohnen.
-
In dem von dir genannten Algorithmus werden ja nur ganze Zahlen verwendet, was in OpenGL schwierig zu implementieren is, da dort als Koordinaten nur Gleitkommazahlen verwendet werden (Steh noch am Anfang und hab mich da noch nicht so reingedacht)...
-
Für OGL reichen einfach x-Punkte die dann per Linien/ Dreieke verbunden werden. Am schlausten ist es x von der relativen Größe (Durchmesser durch Entfernung zum Betrachter) abhängig zu machen.
Bye, TGGC (Fakten)
-
wie nur x Koordinate??
EDIT: Hat sich erledigt, man will ja nicht 5Pixel ham, sondern kommt ja auf die Kamera an usw... Aber wenn ich jetzt die Kamera bei (0,0,-6) setze, woher weiss ich dann wie breit der Sichtbare bereich is?? Weil das brauch ich ja um die Koordinaten die ich dann an Circle mit dem Bresenham-Algo übergebe umzurechnen, nur wie???
-
Nicht x Koordinate, Punkte mit der Anzahl x. x so wählen wie oben beschrieben.
Bye, TGGC (Fakten)
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich verstehe die Umrechnung noch immer nicht, wie ich von den OGL Gleitkommazahlen auf ganze für den Algo kommen soll
-
Brauchst du doch gar nicht?
Bye, TGGC (Fakten)
-
Gregor schrieb:
Guck dir zum Beispiel mal den Kreis-Algorithmus von Bresenham an.
das gibt aber nur einen kreis, wenn der bildschirm quadratisch ist
-
Meinst du die Pixel?
Bye, TGGC (Fakten)
-
circle (x,y,r); <- Funktion circle(1.2f,2.4f,0.5f); <- OGL Koordinaten als Parameter Bresenham Algo geht nix mit Kommazahlen :( Also umrechnen, nur wie??
-
MasterCounter: Ich habe dummerweise am Anfang nicht mitgekriegt, dass es sich um OGL handelt. Weiß nicht, inwiefern der Bresenham dafür zu gebrauchen ist. TGGC hat ja auch schon einen anderen Vorschlag gemacht, wenn ich mich nicht irre. Vielleicht solltest Du das eher weiterverfolgen.
-
Für OGL reichen einfach x-Punkte die dann per Linien/ Dreieke verbunden werden. Am schlausten ist es x von der relativen Größe (Durchmesser durch Entfernung zum Betrachter) abhängig zu machen.
Du meins bestimmt das hier, aber das hat sich doch auf Bresenham bezogen, oder?? Weil ein Kreis krieg ich nur mit Punkte verbinden auch nicht unbedingt raus
-
MasterCounter schrieb:
Für OGL reichen einfach x-Punkte die dann per Linien/ Dreieke verbunden werden. Am schlausten ist es x von der relativen Größe (Durchmesser durch Entfernung zum Betrachter) abhängig zu machen.
Du meins bestimmt das hier, aber das hat sich doch auf Bresenham bezogen, oder?? Weil ein Kreis krieg ich nur mit Punkte verbinden auch nicht unbedingt raus
Ja, das meine ich. Du solltest also vor allem die Anzahl der Punkte vom Radius des Kreises abhängig machen. Im Übrigens gilt für den Umfang des Kreises U=2*Pi*r. Die Anzahl der Punkte sollte somit vielleicht am ehesten proportional zum Radius sein.
TGGCs Aussage bezog sich nicht auf den Bresenham.
Sicherlich kriegst Du da keinen perfekten Kreis raus, aber es geht wohl eh eher darum, den Kreis angemessen zu approximieren. Ein Kreis ist in dem Sinne mit einem Raster von Bildpunkten, wie es der Bildschirm liefert, eh nicht zu realisieren.
-
Wenn Du eh OpenGL verwendest, warum dann nicht GLU: http://wiki.delphigl.com/index.php/GluDisk