DrawOval

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Thommes

Betreff: DrawOval

BeitragMi, Aug 16, 2006 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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!!) Embarassed

MfG... Thommes
 

Dreamora

BeitragMi, Aug 16, 2006 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 17, 2006 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 17, 2006 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 17, 2006 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Aug 22, 2006 0:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Rolling Eyes
MfG... Thommes
 

Dreamora

BeitragDi, Aug 22, 2006 7:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 16, 2006 10:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BladeRunner

Moderator

BeitragSa, Sep 16, 2006 11:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 16, 2006 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
OK, da dran hab ich nicht gedacht. Vielen Dank für den Hinweis.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group