Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Mai 14, 2024 09:55

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 2D Spiel Camera/Viewport
BeitragVerfasst: So Dez 02, 2012 20:45 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Hallo,

ich versuche gerade in einer Orthogonalen 2D Ansicht (einem 2D Platformer um genau zu sein) die Camera dem Spieler zu folgen zu lassen. Grundlegend funktioniert das wenn ich eine feste Orthogonale Matrix bei einer Auflösung von 800x600 verwende - also eine Ratio von 4/3 und die Modelview-Matrix einfach auf die Spielerposition + Viertel von jeweiligen Bildschirmabschnitt:

Code:
  1.  
  2.         float quarterX = (float) 800 / 4.0f;
  3.         float quarterY = (float) 600 / 4.0f;
  4.         camera.setPosition(new Vector3f(-player.getPos().x + quarterX, -player
  5.                 .getPos().y + quarterY, 0.0f));
  6.         camera.update();
  7.  


Wenn in diesem Zuge den Viewport einfach auf die aktuelle Fenstergröße festgelegt wird, dann wird immer alles gestreckt, was bei 4/3 Auflösungen wunderbar klappt aber bei einer 16/9 nicht passt.

Wie skaliert man das richtig bei einem 2D Spiel? Einfach ratio berechnen und jeweils ränder einbauen? Oder gibt es eine Konfortablere Lösung? Eigentlich möchte nur das alles sklaliert und immer gleichgroß wirkt, egal welche Auflösung, aber Logischerweise schon größer... Es macht ja keinen Sinn, bei einer Tilegröße von 16x16 Pixel einfach nur den Viewport anzupassen, dann sieht man zwar mehr von der Map aber man brauch ne Lupe alles zu erkennen.

Vor allem soll das auch auf Smartphones sowie 1080p gut aussehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D Spiel Camera/Viewport
BeitragVerfasst: So Dez 02, 2012 23:29 
Offline
DGL Member

Registriert: Sa Mär 31, 2012 23:14
Beiträge: 26
Programmiersprache: PASCAL
Also so einen "Aspect Ratio Lock" kann man eig am besten mit schwarzen Rändern an den entsprechenden Kanten machen.
Zumindest hab ich keine bessere Idee.
Und unkomfortabel ist das jetzt auch nicht unbedingt, sollte auf eine Seite Bildschirm passen.
Also einfach
Zitat:
ratio berechnen und jeweils ränder einbauen

würd ich sagen.

Wenn jemand doch 'ne bessere Lösung hat: Sorry für die Störung ^^.

MfG Yoda

_________________
The force, strong it is in OpenGL.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D Spiel Camera/Viewport
BeitragVerfasst: Mo Dez 03, 2012 00:40 
Offline
DGL Member

Registriert: Di Jun 12, 2012 21:26
Beiträge: 112
Programmiersprache: Delphi
Sehe ich genauso. Wobei ich mich frage, welchen Sinn ein Seitenverhältnis von 16:9 mit schwarzen Balken macht? Alternativ könntest Du versuchen wie es aussieht, wenn Du die Bildhöhe vom Seitenverhältnis 4:3 beibehältst und die Bildbreite entsprechend an 16:9 anpasst (also anstatt einem schwarzen Balken am linken und rechten Rand einfach etwas mehr Bild).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D Spiel Camera/Viewport
BeitragVerfasst: Mo Dez 03, 2012 11:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Ich würde die Seitenverhältnisse 16:9, 16:10 und 4:3 voll abdecken. Ich sehe auch gerade kein Problem das zu machen. Je nach Seitenverhältnis siehst Du links/rechts etwas mehr oder weniger, das fällt kaum auf, bietet aber den Vorteil, dass mit den drei Seitenverhältnissen eben alles verzerrungsfrei und bildfüllend dargestellt wird. Ich finde Ränder sehr störend, zumal Du Ränder hier einfach mit Inhalt füllen kannst. Also eigentlich genau das was subotai geschrieben hat, war gerade wohl verpeilt.

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D Spiel Camera/Viewport
BeitragVerfasst: Mo Dez 03, 2012 20:43 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Danke für die tips.

Habe nun ne ganz brauchbare Lösung entwickelt, bei der ich mich nicht mit Auflösungen rumschlagen muss.
Da das ganze nen Platformer ist, bei der die Kamera eh immer dem Player folgt, kann man ja einfach die Projektionsmatrix skalieren lassen. Der Faktor dafür berechnet sich einfach aus der alten und neuen Auflösung wie gefolgt:

Code:
  1.    
  2. private float calculateZoomFactor(final int w, final int h) {
  3.         int th = 800 * 600;
  4.         int wh = w * h;
  5.         return 0.5f + (1.0f / th * wh) * 0.5f;
  6.     }
  7.  
  8.         // Set camera scale and size
  9.         zoomFactor = calculateZoomFactor(getDisplayWidth(), getDisplayHeight());
  10.         zoom = zoomFactor * zoomValue;
  11.         camera.setSize(new Vector2i(getDisplayWidth(), getDisplayHeight()));
  12.         camera.setScale(new Vector3f(zoom));
  13.  
  14.         // Center camera based on player pos
  15.         float quarterX = (float) getDisplayWidth() / (zoomFactor * 4.0f);
  16.         float quarterY = (float) getDisplayHeight() / (zoomFactor * 4.0f);
  17.         camera.setPosition(new Vector3f(-player.getPos().x + quarterX, -player
  18.                 .getPos().y + quarterY, 0.0f));
  19.         camera.update();
  20.  


Hab mal nen einfaches Video gemacht, dass ein klein wenig meinen 2D Platformer Prototypen zeigt, an dem ich in meiner knappen Freizeit bastele.
Da sieht man schön wie gut das mit der Skalierung der Projektionsmatrix und anpassung der Kamera an die Player position klappt.
Über das Projekt kann ich aktuell noch nicht viel erzählen, ist nen Versuch nen Spiel zu machen... in Java... mit LWJGL und eigenen Grafiken die ich mit Paint.net gemacht habe.

Hier ist der Link:
http://www.youtube.com/watch?v=rnmBIJmOKzk&feature=youtu.be
(Kann ne weile dauern, bis das Video freigeschaltet ist... Youtube ist da nicht schnell drin -.-)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.020s | 17 Queries | GZIP : On ]