Genaueres RotateImage
Übersicht

![]() |
s_m_wBetreff: Genaueres RotateImage |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich möchte ein relativ großes Objekt in Echtzeit drehen, wenn ich jedoch nur ein 359er Dim benutze in dem ich 0-359° des Bildes speichere, sieht die Bewegung etwas ruckartig aus, wenn sie sehr langsam ist und das ganze mit einem 3599 Dim und RotateImage Bild, i/10 scheint auch nichts zu bringen und würde, wenn es ginge, recht langsam sein, wie mache ich das am besten? Falls es hilft, mein jetziger Code: Code: [AUSKLAPPEN] Graphics 800,600,32,2
SetBuffer BackBuffer() SeedRnd MilliSecs() TFormFilter 0 AutoMidHandle 1 Dim ShipImage (1,359) For i = 0 To 359 ;DebugLog(i) ShipImage(1,i) = LoadImage("Media\Ship1.png") RotateImage ShipImage(1,i),i Next Type Ship Field X%,Y% Field Rot% Field LastTurn% Field Hulltype.Hulltype End Type Type Hulltype Field ShipId% Field RotSpeed% End Type Playership.Ship = New Ship NewShip(Playership.Ship) While Not(KeyHit(1)) Cls Control(Playership.Ship) Draw() Flip Wend Function NewShip(Ship.Ship) Ship\X% = 400 Ship\Y% = 300 Ship\Rot% = Rand(0,359) Ship\Hulltype = New Hulltype Ship\Hulltype\ShipID% = 1 Ship\Hulltype\RotSpeed% = 200 DebugLog(Ship\Hulltype\RotSpeed%) End Function Function Draw() For S.Ship = Each Ship DrawImage(ShipImage(S\Hulltype\ShipId,S\Rot),S\X,S\Y) Next End Function Function Control(Ship.Ship) ; Wenn LastTurn 0 ist, geht alles kaputt If Ship\LastTurn% = 0 Then Ship\LastTurn%=MilliSecs() ; Wenn noch nicht X Millisekungen vorbei sind, nicht drehen If Ship\LastTurn%+Ship\Hulltype\RotSpeed% < MilliSecs() Then ; Default Winkeländerung: 1 Turn = 1 ; Abstand zwischen LastTurn und jetzt größer als RotSpeed? Schneller drehen! If (MilliSecs()-Ship\LastTurn% > Ship\Hulltype\RotSpeed%) Turn = Int((MilliSecs()-Ship\LastTurn%)/Ship\Hulltype\RotSpeed%) Ship\LastTurn% = MilliSecs() If KeyDown(30) Then ; Links drehen Ship\Rot = Ship\Rot-Turn While Ship\Rot < 0 Ship\Rot = 359+Ship\Rot Wend EndIf If KeyDown(32) Then ; Rechts drehen Ship\Rot = Ship\Rot+Turn While Ship\Rot > 359 Ship\Rot = 0+(Ship\Rot-360) Wend EndIf End If End Function |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mh, wenn du an Rotateimage Richtige Floats übergibst, sollte es funktionieren;
Float(i) / 10.0 ist was anderes als i / 10, Probiers mal aus ![]() Vll. wär draw3d auch was für dich? Da kann man sich solche Vorberechnungsspäße schenken... |
||
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah, super, nun sieht es schöner aus, nur ist das vorberechnen jetzt extrem langsam, Draw3d kann ich leider nicht benutzen, da ich nur Blitzplus habe, gibt es eine andere Methode das ganze zu verschnellern? Bei einem einzigen Objekt braucht das ganze schon 10+ Sekunden (mit Debugger), bei 50+ wäre das viel zu langsam und unerträglich. | ||
Sheep Happens |
![]() |
peacemaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vlt vorberechnen und in eine Bilddatei reinspeichern. Dann das als Animiertes Image laden. Ist vlt schneller. Ansonsten ist sowas leider etwas schwierig. | ||
~Tehadon~
www.tehadon.de http://www.blitzforum.de/worklogs/14/ |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie machen das denn andere, mit BlitzPlus programmierte Spiele? Ich bezweifle, dass ich der einzige bin der einen Haufen rotierende Objekte will
edit: Das berechnete Objekt als Bilddatei speichern würde vermutlich nicht gehen, bei einem 100x100 Objekt käme da ja schon eine ~150*360000 Grafik raus.. |
||
Sheep Happens |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tja, vll müssen dann 0-359 Grad ausreichen ![]() Wie Langsam willst du denn da was drehen, das man 1/10° erkennen kann? Intern mit Kommazahlen rechnen und wenn die nächste ganze Zahl zusammengekommen ist, den Frame wechseln ginge. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich brauche schon extrem langsame Drehungen von großen Objekten, 359 reichen nicht aus :/ | ||
Sheep Happens |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Läuft FastImage denn nicht mit BlitzPlus? Ich denke, dass es gehen müsste. Suche doch mal danach. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
FastImage geht leider nicht mit BlitzPlus, weil es über den 3D-Modus läuft. | ||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Heisst das, ich brauche B3D, wenn ich weniger Berechnungszeit haben will? | ||
Sheep Happens |
![]() |
ShadowJumper |
![]() Antworten mit Zitat ![]() |
---|---|---|
da du B+ hast kannst du ja mal probieren, wie schnell es läuft, wenn bei LoadImage der Modus auf 2 ist | ||
Bilder kostenlos hosten
lest und weint: RAM - 512 MB; GrafikRAM - 32 MB; CPU - 800 MHz Ps: ... und weint (vor lachen) |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ...das ganze mit einem 3599 Dim und RotateImage Bild, i/10 scheint auch nichts zu bringen...
*röchel, das ist ja Overkill für die Grafikkarte* Wir rechnen ein wenig: Sagen wir deine Bilder sind 100*100 Pixel groß, und du berechnest 3600 (nur wegen der runderen Zahl) Einzelschritte, dann haben wir: 100*100*4*3600 ---> 144000000 Byte (137,2 MB) Speicher für ein! Objekt dass gedreht werden soll. Unnötig zu sagen dass der durchschnittliche PC da nimmer viel Lust hat. Und wenn es mehrere Objekte sind bringst du selbst High-End-Karten ans Limit und darüber hinaus. Schlag dir also die Schritte auf dem Kopf und mach einen Kompromiss zwischen Leistung und aussehen. Weniger Frames, ein wenig Geruckel, aber dafür vertretbare Resourcennutzung. Bei einem normalen Anwendungsfall würde ich bestenfalls in 5°-Schritten rotieren, das wären 72 Schritte. Immer noch mehr als genug. |
||
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 |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
BladeRunner hat Folgendes geschrieben: *röchel, das ist ja Overkill für die Grafikkarte* Stimmt schon, war eh nur experimentell und wäre nicht so geblieben. Mein Problem ist nur, dass bei einem 100x100 Objekt sehr ruckelig aussieht, wenn ich es "nur" in 1° Schritten drehe. Gibt es eine rechnerfreundlichere Möglichkeit eine "schöne", langsame Drehung hinzubekommen? ShadowJumper hat Folgendes geschrieben: da du B+ hast kannst du ja mal probieren, wie schnell es läuft, wenn bei LoadImage der Modus auf 2 ist
Wenn es schneller läuft, dann nur ein ganz bisschen. |
||
Sheep Happens |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ausser on the fly die Zwischenschritte zu berechnen wohl leider nein, zumindest nicht unter B+. Und das wird wenn es nicht den rechner total bremsen soll logistischer Selbstmord. | ||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group