Winkel

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Te(Y)House

Betreff: Winkel

BeitragMo, Dez 25, 2006 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leuz,
ich habe da so nen Problem...
ich will ne Grafik mit Rotateimage drehen das ist allerdings ziemlich langsam!
Nun habe ich es mit dieser Cos Funktion versucht bekomm es aber nicht hin z.B. ein Bild per Tastendruck um 90° zu drehen... währe über ein wenig Hilfe sehr dankbar! ^^


Mfg.
Te(Y)House
--------------
kcvd.rshost.de
-------------

PSY

BeitragMo, Dez 25, 2006 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
schalte tformfilter aus, dann wird rotateimage etwas schneller.

prinzipell solltest du aber alle bilder im voraus berechnen, 2d-realtimebearbeitung ist (anders als in 3d) seehr langsam.

Te(Y)House

BeitragMo, Dez 25, 2006 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ja nur trotz Tformfilter 0 ist es viel zu langsam! Es soll in Realtime sein!
Kann mir vielleicht jemand erklären wie es anhand von der Cos funktion funktioniet? Also einfach ein Bild per Taste zu drehen um z.B: 90° ?
--------------
kcvd.rshost.de
-------------

PSY

BeitragMo, Dez 25, 2006 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Sprite erstellen, Textur drauf, drehen

oder:
SingleSurfacetechnik (gibts massig Erklärungen im Forum)


Realtimedrehungen in 2D sind viel zu lahm

Te(Y)House

BeitragMo, Dez 25, 2006 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
sind sie auch zu langsam wenn ich es mit Cos irgendwie mache?
--------------
kcvd.rshost.de
-------------
 

Ava

Gast

BeitragMo, Dez 25, 2006 20:19
Antworten mit Zitat
Cos ist eine mathematische Funktion, was genau möchtest Du damit machen?!

Wenn Du Pixel für Pixel das Bild auslesen willst, die Koordinaten umrechnen und dann auf den Backbuffer zeichnen möchtest, wird dies vermutlich noch sehr viel langsamer sein als eine Imagerotation.

Rolling Eyes

Te(Y)House

BeitragMo, Dez 25, 2006 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
achso... naja um nochmal zu erklären was ich machen will:
Ich will Bilder in Realtime drehen, also wie als würde ich die Funktion Rotateimage benutzen! Doch ist diese trost TFormfilter auf 0 immer noch viiieeellll zu langsam...
also suche ich halt nach ner möglichkeit meine Bilder schneller zu drehen?
Und glaubt mir, ich will nicht für eine Animation 360 Einzel Bilder Rendern... glaub mir das macht wirklich keine Spaß Razz

Also, help pls ^^
--------------
kcvd.rshost.de
-------------
 

Mr Hopp

BeitragMo, Dez 25, 2006 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja...entweder du lädst im Vorraus (Dim Bild(359)), oder du musst eine entsprechende Grafik erstellen und als Animation laden. Aber letzteres willst du ja nicht... Beispiel für ersteres:

Code: [AUSKLAPPEN]
Dim vehicle(359)

;Folgender Block lädt das vehicle
AutoMidHandle 1
For i=0 To 359
vehicle(i)=LoadImage("gfx\Auto.PNG")
MaskImage vehicle(i),1,0,0
RotateImage vehicle(i),i
Next
AutoMidHandle 0
Zitat:
Wie poste ich falsch?

Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann.
 

BIG BUG

BeitragMo, Dez 25, 2006 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Vorberechnung ist hier die einzige Möglichkeit, wenn Du keine B3D-Funktionen benutzen kannst.
Normalerweise sollten 32 Rotationsstufen ausreichen(also z.B. alle 11,25 Grad). Wenn es ganz flüssig sein soll, kann man hier auch z.B. 5 Grad Schritte machen, denn zwischen z.B. 0 und 1 Grad ist das Bild sowieso identisch, da die einzelnen Pixel ja entsprechend hingerundet werden...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Te(Y)House

BeitragMo, Dez 25, 2006 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Dim vehicle(359)

;Folgender Block lädt das vehicle
AutoMidHandle 1
For i=0 To 359
vehicle(i)=LoadImage("gfx\Auto.PNG")
MaskImage vehicle(i),1,0,0
RotateImage vehicle(i),i
Next
AutoMidHandle 0


Thx für den Code + die Erklärung!
Ich denke das es mir sehr weiterhelfen wird! Very Happy
--------------
kcvd.rshost.de
-------------

Te(Y)House

BeitragMo, Dez 25, 2006 22:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab da nen Problem:

Zitat:
cls
;Dim vehicle(359) Für 360
Dim vehicle(180)

;Folgender Block lädt das vehicle
AutoMidHandle 1
;For i=0 To 359 ; Für 360
For i=0 To 180
vehicle(i)=LoadImage("test.bmp")
;MaskImage vehicle(i),1,0,0
RotateImage vehicle(i),i
pro = pro +1
Cls
Color 255,255,255
Text 20,20, "Laden..." + pro + " /360"
Color 0,0,$666666
Rect 20,40,360,20,0

Color 0,0,$999999
Rect 20,41,x,18,1

x = x +1
Next
AutoMidHandle 0


x = 120
y = 140

Repeat
SetBuffer BackBuffer ()
Flip
Cls

Color 255,255,255
Text 20,20, "Press > for Rotate Right"
Text 20,40, "Press < for Rotate Left"
text 20,60, "[ESC]"

Tformfilter 1

DrawImage vehicle(ji),x,y

If Keydown (205) Then
ji = ji + 2
EndIf

If Keydown (203) Then
ji = ji - 2
EndIf


If ji >= 359 Then
ji = 0
EndIf

If ji >= 180 Then ji = 180
If ji <= 0 Then ji = 0



Until KeyDown (1)
End


Ich sehe die Ladeleiste nur wenn ich in meinem Compiler den Debug-Mode an hab, ist er aus sehe ich sie nicht mehr...!? Wie kann man das umgehen?
--------------
kcvd.rshost.de
-------------

Te(Y)House

BeitragDi, Dez 26, 2006 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
hab das Gefühl der geht hier gerade nen bischen unter... deswegen *push*
--------------
kcvd.rshost.de
-------------

Hagbard

BeitragDi, Dez 26, 2006 0:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Das liegt wohl daran, dass das so schnell geht!
Bau mal ein WaitKey() in die For next Schleife, dann siehst du es.

Setbuffer Backbuffer() sollte aus der Hauptschleife raus, also davor.

Te(Y)House

BeitragDi, Dez 26, 2006 1:52
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso soll ich Setbuffer Backbuffer() aus der schleife nehmen?

Ein Delay 20 hat es jetzt auch getan ^^
--------------
kcvd.rshost.de
-------------

Axe

Betreff: Optimierung

BeitragDi, Dez 26, 2006 2:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab den Code mal ein bisschen optimiert und kleinere Fehler beseitigt:

Neuer Code: [AUSKLAPPEN]

Graphics 800,600,32,2 ;Auflösung 800*600*32 im festen Fenster
SetBuffer BackBuffer()

Dim vehicle(360)

AutoMidHandle 1
TFormFilter 1

;Folgender Block lädt das vehicle
For i=0 To 360 Step 2
vehicle(i)=LoadImage("test.bmp")
RotateImage vehicle(i),i

If (i Mod 90)=0 Then;also nur bei 90,180,275°
   Color 255,255,255
   Text 20,20, "Laden..." + i/90*25 + "%"
   Color 0,0,$666666
   Rect 20,40,360,20,0
   Color 0,0,$999999
   Rect 20,41,i,18,1
   Flip
   Cls
EndIf
Next

x = 120
y = 140

Color 255,255,255

Repeat
Flip
Cls

Text 20,20, "Press > for Rotate Right"
Text 20,40, "Press < for Rotate Left"
Text 20,60, "[ESC]"


If KeyDown (205) Then ji = ji + 2
If KeyDown (203) Then ji = ji - 2

If ji > 360 Then ji = 0
If ji < 0   Then ji=360

DrawImage vehicle(ji),x,y

Until KeyDown (1)
End

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group