Camera verzerrt beim drehen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

TerrorMachine

Betreff: Camera verzerrt beim drehen

BeitragMi, Jul 01, 2009 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist das normal, dass die Perspektive beim Drehen der Kamera Richtung Boden oder Himmel verzerrt wird.
Also ein rundes Loch wird auf der Y-Achse gestreckt, je weiter ich die Kamera richtung Boden drehe. Bei etwa 90° nach unten ist der Kreis in einer 2:1 Streckung.

Kann man das irgendwie umgehen? Sieht nämlich total komisch aus.

Mr.Keks

BeitragMi, Jul 01, 2009 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
auch wenn ich aus deiner beschreibung nicht völlig schlau wurde: eine gewisse verzerrung beim drehen ist ganz normal. wenn du die verzerrungen unnatürlich findest, kannst du ein wenig den CameraZoom justieren.
MrKeks.net

NightPhoenix

BeitragMi, Jul 01, 2009 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst du nichtmal Screenshots posten?

Vielleicht löst CameraZoom dein Problem.

*edit*
offensichtlich einen Augenblick zu spät Smile
 

TerrorMachine

BeitragDo, Jul 02, 2009 8:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke
Bei Zoom 4.0 wirds meiner Ansicht nach rundlicher. Ist aber viel zu groß.
Gibts da keine andere Möglichkeit?

Hier ein Screenshot des eigentlich runden Brunnens bei 90° nach unten schauen:
http://onkelz.fasthoster.de/screen.bmp

Man muss die Adresse in die Adresszeile kopieren.

Tankbuster

BeitragDo, Jul 02, 2009 10:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Asu. Normalerweise passiert sowas nicht. Hast du vielleicht irgendwo ScaleEntity, ScaleMesh oder etwas ähnliches auf das Objekt verwendet?

Ansonsten kann man davon ausgehen, dass dein Modell von Anfang an nicht so rund war.
Twitter
Download Jewel Snake!
Windows|Android

NightPhoenix

BeitragDo, Jul 02, 2009 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Gib uns doch mal bitte den Quellcode.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Jul 02, 2009 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Wer sich das nicht vorstellen kann hat hier mal folgenden Code: [AUSKLAPPEN]
Graphics3D 800,600,0,2
SetBuffer BackBuffer()

Local Timer=CreateTimer(60)
Local Camera=CreateCamera()
Local Sphere=CreateSphere(24)

PositionEntity Sphere,4,3,6

While Not KeyHit(1)
   TurnEntity Camera,-0.06,-0.08,0
   WaitTimer Timer
   RenderWorld
   Flip 0
Wend


Um mal das Problem zu beschreiben. Der Grund warum es verzerrt wird ist, dass eine 3D-Grafikkarte kein echtes 3D darstellt. Eine 3D-Grafikkarte berechnet die Entfernung an den Bildschirmecken genauso weit, wie in der Bildschirmmitte, was natrülich falsch ist. Denn die tatsächliche Entfernung breitets sich vom Betrachter aus immer Kugelförmig aus, nicht parallel in alle Richtungen. Allerdings hat jedes Spiel dieses Problem. Wer es unbedingt umgehen will, muß sich sein eigenen Raytracer schreiben und dann die Lichtstrahlen Kugelörmig ausbreiten lassen. Dieses führt aber zu einem leichtem Fischaugeneffekt, welcher aus Gewohnheit von vielen nicht akzeptiert wird, obwohl selbst jede normale Kameraaufnahme dieses mitsich bringt.

Edit1: Alternativ kann man statt 3D-Objekte auch Sprites nehmen. Diese werden immer verzerrfrei dargestellt. Dann allerdings tritt ein anderes Problem auf, da die Entfernungsberechnung der 3D-Karten dazu führen, dass sich beim drehen dichte Objekte vor anderen schieben. Das kommt aber nur dann, wenn viele Objekte gezeichnet werden.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

TerrorMachine

BeitragDo, Jul 02, 2009 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Langsam wirds komisch...
Kann dieser verzerrungseffekt von Rechner zu Rechner unterschiedlich sein?
Hab nachher was am Code geändert (Waffe hinzugefügt und das Playermodel ersetzt) und dann war alles richtig. Ich konnte mich drehen, wie ich wollte und alles wurde perfekt rund dargestellt o.O

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Jul 02, 2009 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, man kann es nicht verändern und es wird von allen Rechnern gleich dargestellt. Außer eben du programmierst dir deine eigene 3D-Rechenroutine die nicht von der Grafikkarte sondern von der CPU berechnet wird. Und das geht dann am einfachsten mit einem Raytracer welcher aber sehr sehr langsam sein wird.

Du kannst aber Kugeln besser darstellen lassen, indem du per CameraZoom den Sichtbereich einschränkst. Das nützt aber wenig, da der Spieler dann einen ''Tunnelblick'' bekommt und das ganze dann unspielbar wird. Die meisten Spiele haben einen horizontalen Sichtbereich von +/- 45° was 1/4 der Gesamtszene bedeutet. Spiele wie Battlefield dagegen haben schon einen leicht eingeschränkten Sichtbereich was bei manchen schon für etwas Verwirrung sorgt.

Andere Möglichkeit ist eben, man zeichnet die Objekte als Sprites ein. Diese werden dann immer komplett im Verhältnis 1:1 gezeichnet, so lange sie sich automatisch zur Kamera drehen. Bei vielen Objekten passiert es dann aber, dass sich bei einer Kameradrehung die einzelnen Objekte vor anderen Schieben. Und das sieht natürlich etwas blöd aus. Außerdem hat man mit Sprites nur noch eine sehr eingeschränkte perspektivische Darstellungmöglichkeit.

Es sei mal gesagt: Wenn du aber eine fertige Szene hast, dann wirkt das verzerren nicht mehr so stark, da die Szene selbst ja auch verzerrt wird und das wird vom Betrachter dann im Gehirn ''interpoliert'' und entzerrt. Eine Kugel vor schwarzem Hintergrund fällt also mehr auf, als die selbe vor einer Skybox/Terrain etc...
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

AnniXa

BeitragDi, Jul 21, 2009 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hatte einmal ein ähnliches problem, also die verzerrung war unnatürlich stark.
bei mir lag dies daran das ich die kamera mit scaleentity verzert habe, bzw war Camera ein child von einem anderem entity auf welches ich ScaleEntity angewendet habe.
|moonForge|
Ich bin Pokémon Meisterin seit 1998!

Megamag

BeitragDi, Jul 21, 2009 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
AnniXa:
Ist ja witzig. Genau das selbe ist mir gestern auch passiert. Cam war Child von einem Pivot, und den habe ich dann skaliert und damit auch die Cam. Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group