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

Aktuelle Zeit: Do Mär 28, 2024 15:41

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kamera Matrix FPS
BeitragVerfasst: Di Jul 05, 2016 13:34 
Offline
DGL Member

Registriert: So Jun 12, 2016 13:05
Beiträge: 9
Programmiersprache: Lazarus 1.6.
Hallo,

wahrscheinlich wird jetzt jeder die Augen rollen und sich denken "Nein...nicht noch einer..."

Dank der Hilfe von Mathias bin ich aus den dunklen Spähren von depraceted OpenGl auferstanden und hantiere mit OGL 4.3 rum..

Ich steh mal wieder vor dem Problem was ich im alten OGL auch nicht wirklich lösen konnte.
Ich versuch mir eine Kamera Klasse zu erstellen, welche diverese Kamera Modis hat. Zu Anfang würde mir eine FPS Kamera Steuerung reichen.

Bisher liegt meine View Matrix legdilich in der Identitätsmatrix vor. Ich behandel sämtliche Matrizen nicht in der OpenGL Variante, sondern so wie es im Mathebuch steht :)



Tutorials im Netz sind alle sehr C++ lastig und sind alle mit GLM verammelt. Gibts irgendwo nen Tutorial was man als Pascaler gebrauchen könnte als Anhalt..?

oder ist hier gar jemand bereit mich an die Hand zu nehmen und mir dabei zu helfen selbst eine zu schreiben?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kamera Matrix FPS
BeitragVerfasst: Di Jul 05, 2016 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn man Matrizen und Vektoren versteht ganz einfach. Ich nutze zwar auch GLM, aber eine simple Implementation einer (FPS)-Kamera (wie die für meine Vulkan-Beispiele) lässt sich auch ganz einfach ohne externe Mathelib nachbilden wenn man die grundlegenden Matrizen- und Vektorfunktionen implementiert hat:

Man benötigt:
- 3 Rotationen (ein 3-Komponenten Vektor*)
- Position (3 Komponenten, aka Translatioon)
- Vorwärtsvektor der in Richtung der Kamerabewegung zeigt, damit man z.B. leicht auch Seitwärtsbewegungen implementieren kann

Die Funktionalität ist dann ganz einfach implementiert:

Rotationsvektoren z.B. mit der Maus manipulieren.

Für die Bewegung:
Vorwärtsvektor berechnen:
Code:
  1. camFront.x = -cos(rotation.x) * sin(rotation.y);
  2. camFront.y = sin(rotation.x);
  3. camFront.z = cos(rotation.x) * cos(rotation.y);


Diesen dann auf die Position addieren wenn man sich vorwärts bewegt:
Code:
  1. position += camFront * moveSpeed;


Will man sich seitwärts bewegen, dann das Kreuzprodukt mit einem Vektor der zur Seite zeigt:
Code:
  1. position += normalize(cross(camFront, vec3(0.0f, 1.0f, 0.0f))) * moveSpeed;


Matrix erzeugen:

Rotationsanteil:
Code:
  1. rotMat = rotate(rotMat, rotation.x, vec3(1.0f, 0.0f, 0.0f));
  2. rotMat = rotate(rotMat, rotation.y, vec3(0.0f, 1.0f, 0.0f));
  3. rotMat = rotate(rotMat, rotation.z, vec3(0.0f, 0.0f, 1.0f));


Position:
Code:
  1. transMat = translate(matIdentity, position);


Beide multiplizieren:
Code:
  1. matrices.view = rotMat * transMat;


Die kann man dann direkt an den Shader übergeben.

In wenigen Minuten implementiert. Weder schick, noch schnell, aber für die Anfänge ausreichend ;)

(*)Im nächsten Schritt kann man für die Rotationen dann auf Quaternionen wechseln, um u.a. den Gimbal Lock zu vermeiden.

Wie Matrizen aufgebaut werden (Rotation, Skalierung, etc.) kann man z.B. hier nachlesen.

Wer was gedrucktes will, dem kann ich Essential Mathematics for Games and Interactive Applications empfehlen, dass steht hier in meinem Regal und erklärt häufig benötigte mathematische Dinge im 3D Bereich sehr schick ;)

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kamera Matrix FPS
BeitragVerfasst: Di Jul 05, 2016 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Tutorials im Netz sind alle sehr C++ lastig und sind alle mit GLM verammelt.

Das ist leider so, aber man kann trotzendem vieles umsetzten.

Zitat:
Gibts irgendwo nen Tutorial was man als Pascaler gebrauchen könnte als Anhalt..?

Da habe ich leider auch nichts schlaues gefunden.

Vielleicht hilft dir diese Seite ein bisschen weiter.

https://wiki.delphigl.com/index.php/Tut ... re_Algebra

_________________
OpenGL


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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 9 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.068s | 20 Queries | GZIP : On ]