Seite 2 von 3
Verfasst: 28.11.2004 19:11
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²).
Verfasst: 30.11.2004 17:05
von estate
Danke für deine Hilfe, mit der Mathematik komme ich zurecht,
aber wie soll ich die Verzerrung praktisch durchführen?
Verfasst: 01.12.2004 16:19
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.
Verfasst: 01.12.2004 16:52
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.
Verfasst: 01.12.2004 17:36
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.

Verfasst: 02.12.2004 18:47
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.
Verfasst: 02.12.2004 22:44
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:
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.

Verfasst: 03.12.2004 01:11
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?
Verfasst: 03.12.2004 07:44
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.
Verfasst: 03.12.2004 10:16
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.