360 Grad drehungen
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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²).
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.
Der Weise weiß, dass er ein Narr ist.
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Weise weiß, dass er ein Narr ist.
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
<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?
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?
@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.
@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.
Dann mach es doch so und bau Dir mittels PureBasics 3D-Sprites eine Skybox.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.
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.