360 Grad drehungen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

die grundidee hinter den verzerrungen ist der weitwinkel-effekt.

dazu hab ich leider auch keine formeln zur hand, aber vielleicht findest du was wenn du auch mal in richtung fotografie googlest.

wie gesagt, wenn der hintergrund weit genug entfernt ist, kannst du evtl. auf die verzerrung verzichten.
und wenn der hintergrund nur ein streifen ist, wie bei manchen racing-spielen, bräuchtest du ihn auch nicht cirkulär, sondern nur in der breite verzerren.

vom gefühl her wurde ich mal sagen, da steckt so ne formel ähnlich x² oder auch ein log dahinter, die ein schmaleres bild verbreitert.. ist jetzt sehr abstrakt, ich weiss.
mal so ausdrücken: wenn du von der bildmitte kommst, nimmt die anzahl der dargestellten pixel pro ursprungspixel immer stärker zu.
also in der bildmitte 1:1, auf halben weg 1:1.2 usw, bei starker verzerrung am bildrand 1:2
und dieses verhältniss könnte vielleicht einer x² gehorchen,
wegen kugel-auf-fläche-projektion und kreisrelation r²=sqr(x²+y²).
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
estate
Beiträge: 110
Registriert: 10.09.2004 08:53
Wohnort: nähe Graz
Kontaktdaten:

Beitrag von estate »

Danke für deine Hilfe, mit der Mathematik komme ich zurecht,
aber wie soll ich die Verzerrung praktisch durchführen?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich würde das so lösen:

eine proc schreiben, die den datenbereich des gesamthintergrundes (als sprite geladen) in ein anderes sprite ausliest, unter berücksichtigung der formel. ein weichzeichnen einzubauen, wäre auch nicht schlecht, sonst könntest du es auch doppelt so gross erzeugen und dann mit zoomsprite3d darstellen. allerdings brauchen die meisten grafikkarten dafür eine quadratische bitmap in 2erpotenz-grösse (256x256 etc.)

nur horizontal-verszerrung:
für jede zeile einen schleifendurchlauf, der für jeden zielpunkt errechnet, von wo der ursprungspunkt kommt, mit nachkommastelle. das gibt dir dann an, wenn der ursprung zwischen zwei punkten liegt, wieviel prozent der beiden einfliesst.
also für jeden farbkanal:
Red=(Red1*Prozent1+Red2*Prozent2)/100

re: mathe dahinter:
wenn du die formal schon kennst, klär mich doch mal auf. sonst muss ich mir noch ne skizze machen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
estate
Beiträge: 110
Registriert: 10.09.2004 08:53
Wohnort: nähe Graz
Kontaktdaten:

Beitrag von estate »

Ich meinte eigentlich das ich mir von der Mathematik her vorstellen kann die Sache durchzuziehen.
Vermutlich werde ich die Winkelfunktionen benutzen, und die landschaft so verzerren, als ob sie in einem Kreis um einen liegen würde.

Mit der Darstellung komme ich jetzt zurecht, danke dir.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

prima.

um auf die formel zu kommen hatte ich die idee, einen viertelkreis zu zeichnen mit mehreren radien.

die bildebene währe dann eine strecke durch die radien, an dieser kann man die verhältnisse ablesen.

wenn deine fertige proc kurz und schnell genug ist, poste sie doch, bestimmt bin ich nicht der einzige, der daran interessiert wäre. :wink:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
estate
Beiträge: 110
Registriert: 10.09.2004 08:53
Wohnort: nähe Graz
Kontaktdaten:

Beitrag von estate »

Leider verstehe ich nicht ganz genau was du meinst
Wie kann man einen Viertelkreis mit mehreren Radien zeichnen?


Aber wenn du das Programm postest werde ich das schon erfahren.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ok, wahr vielleicht missverständlich.

es geht nicht um einen viertelkreis mit verschiedenen radien (unmöglich)
sondern darum, in einem viertelkreis mehrere radiale linien einzuzeichnen.

Skizze:
Bild

wie du siehst, haben die radiallinien den gleichen winkelabstand (in diesem fall 11.25), aber unterschiedliche x-koordinaten-abstände auf der bildebene.

dieses verhältniss der abstände auf der bildebene wird durch die formel bestimmt, die du brauchst um deine koordinaten-verzerrung zu berechnen. :wink:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Beitrag von traumatic »

<SarkasmusModeOn>
Schön wieder einen Thread gefunden zu haben, in dem ich mit Kaeru Gaman
rumstreiten kann
<SarkasmusModeOff>

@estate: Wenn ich Dich richtig verstehe, suchst Du eine Möglichkeit, einen
realistischen Hintergrund zu schaffen, der aus allen Richtungen zu betrachten ist?

Soll das in etwas so aussehen?
http://www.xbdev.net/directx3dx/demos/s ... utable.rar

Normalerweise nimmt man hierzu der Einfachheit halber Skyboxes bzw.
Skyspheres zur Hilfe. Da Du das ganze anscheinend mit PB-Bordmitteln bewältigen
möchtest, würde ich persönlich zu einer Skybox raten (ist einfacher).

Zum Prinzip:

Stell Dir einfach mal einen (großen) Würfel vor, bei dem alle sechs
Flächen mit einer entsprechenden Textur versehen sind. Du "stehst"
innerhalb des Würfels, die Texturen liegen also auch innenseitig.

Wenn die Grafiken für die Texturen entsprechend angelegt wurden,
hast Du das Auge im Grunde schon getäuscht - die Eckpunkte sieht
man nicht. Die Skybox (der Würfel) muss natürlich immer mit der
Kamera mitbewegt werden, so dass sich der Abstand zu ihr niemals
ändert.

Es gibt Programme (einfach mal nach Skybox im Netz suchen), die Dir
die Erstellung von geeigneten Texturen erleichten.

Großartig rumrechnen brauchst Du dafür aber IMHO grundsätzlich nicht.

Ansonsten, ich weiß es nicht genau, bietet OGRE nicht Skyboxes an?
estate
Beiträge: 110
Registriert: 10.09.2004 08:53
Wohnort: nähe Graz
Kontaktdaten:

Beitrag von estate »

@Traumatic: Ich möchte sinngemäß genau so etwas wie dein Beispiel machen, nur wollte ich eigentlich auf die Skybox von Ogre verzichten, und stattdessen einen eigenen algorithmus entwickeln, damit ich mehr einstellmöglichkeiten habe.

@Kaeru Gaman: Jetzt verstehe ich sehr gut wie du das meinst.
Nur mit der Formel bin ich mir nur etwas im unklaren.
Ich denke aber, dass ich sie sicher aus einem Raycasting tutorial bekommen werde, da dort im Grunde das Selbe gemacht wird.

Übers Wochenende habe ich die Zeit den Code dafür zu schreiben.
Danke für deine Hilfe.
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Beitrag von traumatic »

estate hat geschrieben:@Traumatic: Ich möchte sinngemäß genau so etwas wie dein Beispiel machen, nur wollte ich eigentlich auf die Skybox von Ogre verzichten, und stattdessen einen eigenen algorithmus entwickeln, damit ich mehr einstellmöglichkeiten habe.
Dann mach es doch so und bau Dir mittels PureBasics 3D-Sprites eine Skybox.

Pedro / Balrogsoftware hat das dazu nötige mal in eine 'Engine' gepackt:
http://www.balrogsoftware.com/info3d.html

IIRC gibt's da auch den Source zu.
Antworten