|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 01.10.2002, 18:20 Titel: |
|
|
Ich hab ja auch nicht gemeint, das man einen Pixel um sich selbst dreht, sondern um einen Mittelpunkt, der auch ganz woanders sein kann. Wenn jetzt 2 Benachbarte Pixel um einen Winkel gedreht werden (wobei der Mittelpunkt unterhalb der Pixel ist) kann es bei bestimmten Winkeln passieren, daß diese Pixel nicht mehr nebeneinander liegen. (Rundungsungenauigkeiten)
Nimmt man jetzt aber das Zielsurface, und berechnet rückwärts, von wo die Farbe dieses Pixels kommen muß, entstehen keine Löcher und Interpolieren muß man auch nicht unbedingt.
Und wenn man jetzt noch die Rotierfunktion in einer 2x2Matrix brerchnet, spart man noch mal gut die hälfte an Rechenschritten, was der Performace zugute kommt.
Ich hoffe, ich hab's nicht zu kompliziert erklärt.
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 01.10.2002, 18:27 Titel: |
|
|
Nee ihr habt ja das nru so geschrieben und ich habe es wortgenau übernommen, damit ihr seht, dass man sich so präzise wie möglich ausdrücken sollte...
Denkst du wirklich ich weiß nicht, was du meintest
aber lassen wir das Mal und bleiben beim Thema...
Aber wie rotiert(verschiebt) ihr einen Punkt um einen gewissen Winkel?
Ich habe mir da verschiedene Verfahren ausgedacht, die zwar gingen, aber doch kompliziert sind und das wäre dann ein riesen Rechenaufwand...
Edit: Heh ich habe doch Recht...ihr könnt keinen Punkt rotieren nur verschieben und es wirkt wie eine Rotation...das meinte ich...und das ganze um einen Punkt zu rotieren wäre für mich zu kompliziert...das meine ich sogesehen, dass das viel zu viel Arbeit machen würde als einfach ne Lineare Funktion für jede Reihe zu schreiben... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 01.10.2002, 18:46 Titel: |
|
|
Die Performance spielt doch keine Rolle, wenn man das nicht Echtzeit macht(wie ich es ja vorgeschlagen habe).
Aber lineare Funktion? Kannst du mir mal erklären, wie man mit einer LINEAREN Funktion etwas DREHEN kann? O.o Ich benutze dazu Sinus und Kosinus. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 01.10.2002, 19:36 Titel: |
|
|
Ihr habt mir so richtig lust gemacht, mal so ein kleines Prog zu schreiben, mit der man Bitmaps um einen beliebigen Winkel rotieren kann. Ich mach das einfach mal und lade es hoch, dann könnt Ihr euch anschauen, wie das gemacht wird und den Code eventuell selbst verbessern/erweitern
Bis nachher also,
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 01.10.2002, 20:42 Titel: |
|
|
Mit den linearen Funktionen, dass kann ich nciht nur mit Text erklären...wenn ich Mal Zeit ahb...mach ich dazu ne Zeichnung, dass man das auch versteht...
Ja mach Mal so ein Programm...würde mcih brennend interesieren, wie du das machst _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 01.10.2002, 21:34 Titel: |
|
|
Ich hab hier Quellcode von einer Klasse die das macht... _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 01.10.2002, 22:53 Titel: |
|
|
So, das Miniprogramm ist fertig - Hier das Projekt zum Downloaden:
Rotation
Der Quelltext ist extrem kurz gehalten, sollte aber leicht lesbar sein.
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
Zuletzt bearbeitet von AFE-GmdG am 19.11.2002, 22:19, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 02.10.2002, 06:21 Titel: |
|
|
Klappt super, der Quelltext ist auch in einem sehr guten STil geschrieben...man findet sich sofort zurecht...
...das Problem bei mir ist, dass wir noch nciht Mal Sincus, Cosinus, Tangens, etc... haben... sind erst bei der Quadratwurzel und wir lernen erst in paar Stunden den Algorhytmus...
Wo kann man das schon davor Lernen, gibt's da ein gutes Mathebuch?
Oder soll ich einfach meinen Mathelehrer konsultieren? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 02.10.2002, 07:17 Titel: |
|
|
Dein Mathelehrer wird große Augen machen, wenn du ihn nach solch einem Thema fragst, und dann hängt es davon ab, in welche der beiden Gruppen er gehört.
Gehört er zur Gruppe 1 freut er sich, das du dich mehr mit Mathematik beschäftigst und er hilft dir sehr wahrscheinlich.
Gehört er aber zur Gruppe 2, weiß dein Mathelehrer auch nur das, was gerade an Stoff drann ist, Fragst du ihn nach z.B. integrieren verweist er dich auf später, ein anderes mal villeicht, heute nicht, usw. (letzteren hatte ich leider im Abitur)
Die Rotierroutine ist erstaunlich kurz geworden, wobei ich allerdings auch keinerlei größen abfrage und verarbeite, ich setze einfach mal voraus, daß das Bitmap 128x64 Pixel groß ist...
Verbesserungsvorschläge:
- Colorkey
- Beliebig große Bitmaps (bis 512x512 Pixel)
- Zielbitmap so vergrößern, daß das gedrehte Bitmap hundertprozentig hineinpasst.
- Rechenschritte durch assamblercode Beschleunigen (Kann ich nicht)
Hinweise zur Benutzung der derzeitigen Funktion:
- Quell- und Zielbitmap sind derzeit auf 128x64 Pixel festgelegt.
- Die Funktion erstellt ein neues Bitmap mit CreateCompatibleBitmap(), das GDI-Objekt muß nach gebrauch also wieder gelöscht werden. (Siehe Code)
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 02.10.2002, 09:33 Titel: |
|
|
Mein Mathe/Physiklehrer hat sich gefreut als ich ihn gefragt habe, wie man den Winkel eines Vektors berechnet Hat sich auch gut auf meine mündliche Note ausgewirkt. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 02.10.2002, 15:07 Titel: |
|
|
echt, cool, dann muss ich meinen mathelehrer mal n bischen nach matrizen ausfragen
könnte man das drehen vileicht beschleunigen, wenn man die Surface in den arbeitsspeicher kopieren würde und sie dann da drehen würde? |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 02.10.2002, 15:38 Titel: |
|
|
Ich habe doch hier kein DirectDraw verwendet, sondern ganz normales GDI und Bitmaps. Diese befinden sich zwar nach dem Laden auch im Speicher, aber die GDI ist nunmal nicht die schnellste. Außerdem hab ich doch das Bitmap nur alle 100 Millisekunden um 1° gedreht, es kann also gar nicht schneller funktionieren, als jetzt. Ich finde, daß es schnell genug ist (In kleinem Maßstab, große Bitmaps hab ich noch nicht getestet)
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 02.10.2002, 15:39 Titel: |
|
|
achso, sry, hab nicht genau genug nachgeschaut. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 02.10.2002, 19:34 Titel: |
|
|
Ich würde die Bitmaps erst garnicht in Echtzeit drehen(ohne Hardwarebeschleunigung jedenfalls). Man kann doch BEVOR das Spiel losgeht 64 Drehstufen von den Bitmaps machen. Das ist auf jedenfall genug. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 02.10.2002, 20:20 Titel: |
|
|
Das wär dann auf jeden Fall eine enorme Speicherbelastung. Stell dir mal vor, du hast nicht nur 1 Objekt, das in 64 Drehstufen gespeichert werden müsste, sondern 10 oder 100...
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|