DrawOval
Übersicht

![]() |
ThommesBetreff: DrawOval |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gibt es eine Möglichkeit einen Kreis zu zeichnen, der nicht gefüllt ist?
Code: [AUSKLAPPEN] Graphics 800,600,32,60 Setcolor 100,100,100 DrawOval 100,100,50,50 Flip While Not KeyHit(KEY_ESCAPE) Wend End Das Progrämmchen gibt mir einen gefüllten Kreis aus. Ich brauche aber einen Kreis, der nicht geföllt ist... Gesucht hab ich, aber nichts gefunden. Das muss doch gehen!! (ich denke die Lösung ist so einfach, das ich mich jetzt schon mal für die Frage schäme!!) ![]() MfG... Thommes |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nö geht nicht.
Da müsstest du dir eine eigene Funktion schreiben. Speedtechnisch ist aber Pixelzeichnen sehr langsam, weswegen man die Textur für einen Kreis nimmt (loadimage) und das dann zeichnet. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau mal nach dem Bresenham-Algorhythmus. Der ist verdammt schnell (sicher schneller als ein Bild zu zeichen, speicherschonender und viel praktischer, wenn man Kreise in verschiedenen Farben malen will z.B.). Außerdem einfach zu realisieren. | ||
Variety is the spice of life. One day ignore people, next day annoy them. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich fürchte, damit liegst du ziemlich daneben.
Wenn Pixeloperationen eine Option wären, hätte ich Bresenham sicher als oberste Wahl genannt, da es für solche Dinge mit abstand am schnellsten ist. ABER: Bresenham ist 2D und BlitzMax ist rein 3D, gibt keine 2D Zeichenoberfläche noch gibt es 2D Zeichenbefehle. BlitzMax hat keine Buffer Du müsstest mit dem Bresenham in ein Pixmap zeichnen und das auf den Backbuffer zeichnen und Pixmaps sind +- 10 Mal langsamer als Images (Pixmap ist RAM Pixeldaten, Image sind VRAM Texturen, Pixmap muss zum zeichnen manuell rüberkopiert werden also Pixelcopy von RAM auf VRAM) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, war ja die BlitzMax-Sektion. Ich nehme alles zurück. (Und die Farbe kann man natürlich super mit SetColor verändern) | ||
Variety is the spice of life. One day ignore people, next day annoy them. |
![]() |
Thommes |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also im Forum vom Mark habe ich eine sehr Interessante Antwort erhalten und wollte euch einen Teil des Inhalts nicht vorenthalten:
Code: [AUSKLAPPEN] ' ' program : circle drawing lib using Bresenham algrorith ' using the circle drawint algorithm at: ' <a href="http://www.gamedev.net/reference/articles/article767.asp" target="_blank">www.gamedev.net/reference/articles/article767.asp</a> ' created by Jesse Perez 8/20/2006 ' ' draws a circle with: ' ' offsetx = center x ' offsety = center y ' Radius = circle radius in pixels ' ' note: no clipping is done so may become extremely slow if excessibly large circles are drawn. ' also: also if the screen resolution is not proportionally correct it will not look round. Type Tcircle Method draw(OffsetX#,OffsetY#,Radius#) If Radius <= 0 Return If (offsetx-radius) > GraphicsWidth() Return If (offsety-radius) > GraphicsHeight() Return If (offsetx+radius) < 0 Then Return If (offsety+radius) < 0 Then Return Local x = 0 Local d = 3-(2*Radius) Local y=Radius While x<y If d < 0 Then d = d + (4 * x) + 6 Else d = d + 4 * (x - y) + 10 y = y - 1 End If Plot(offsetX + X, OffsetY + Y) Plot(OffsetX + X, OffsetY - Y) Plot(OffsetX - X, OffsetY + Y) Plot(OffsetX - X, OffsetY - Y) Plot(OffsetX + Y, OffsetY + X) Plot(OffsetX + Y, OffsetY - X) Plot(OffsetX - Y, OffsetY + X) Plot(OffsetX - Y, OffsetY - X) x=x+1 Wend End Method End Type Graphics 800,600 Local circle:Tcircle= New Tcircle For Local a = 1 To 10 circle.draw 100+Rand(0,600),100+Rand(0,400),Rand(10,100) Next Flip() WaitKey() Das ist genau das was ich gesucht habe. Vielleicht braucht ja noch jemand anders diese Funktion... Trotz allem bin ich der Meinung, das ein derart standartisierter Befehl in BlitzMax nicht fehlen sollte. Sehr traurig, das man auf eine Funktion zugreifen muss... Den Befehl gibt es sonst in jedem Basic. ![]() MfG... Thommes |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hast du ihn vom speed her getestet ob er schneller ist als einfach ein Image eines Kreises zu nehmen?
Da er mit Plot arbeitet ... naja sagen wir ma bin ich davon nicht umbedingt überzeugt ^^ |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Krümel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
unausgefüllte Kreise mit BlitzMax
(Da braucht man keine eigene Funktion für) Graphics 800,600,0 glPolygonMode(GL_FRONT, GL_LINE) 'Kreis Umriss 'glPolygonMode(GL_FRONT, GL_FILL) 'Kreis Ausfüllen For t=1 To 30 rad=Rnd(100,200) SetColor Rnd(255),Rnd(255),Rnd(255) DrawOval Rnd(800),Rnd(600),rad,rad Next Flip WaitKey() End |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man sollte allerdings hinzufügen dass das unter DX nicht funktioniert.
Korrekt geht es nur so: Code: [AUSKLAPPEN] SetGraphicsDriver GLMax2DDriver()
Graphics 800,600,0 glPolygonMode(GL_FRONT, GL_LINE) 'Kreis Umriss 'glPolygonMode(GL_FRONT, GL_FILL) 'Kreis Ausfüllen For t=1 To 30 rad=Rnd(100,200) SetColor Rnd(255),Rnd(255),Rnd(255) DrawOval Rnd(800),Rnd(600),rad,rad Next Flip WaitKey() End |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Krümel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OK, da dran hab ich nicht gedacht. Vielen Dank für den Hinweis. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group