Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.12.2006, 12:54

Opengl: Kollision mit einer Highmap! Wie?=

Hallo!
Ich habe es entlich geschnallt wie diese Highmaps funktiionieren!
Jetzt habe ich 2 Fragen:
1) Wie lege ich eine Textur darüber?
2) Wie kann ich überprüfen ob die Kamera mit der Highmap kollitiert?

Wäre echt nett von euch wenn ihr mit helfen würdet ;).

Gruß Flo

2

24.12.2006, 13:00

Also die erste Frage hat sich erledigt!
Ich habs! :)
Aber das mit der kollision bleibt offen!
Gruß Flo

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

24.12.2006, 13:08

naja, du brauchst ja nur nachzuschauen, ob die höhe der kamera an ihrer aktuellen position kleiner als die höhe in der heightmap an dieser stelle ist...

4

24.12.2006, 13:22

Also ich habe eine Structur erstellt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
struct tPosition
{
       GLfloat x;
       GLfloat y;
       GLfloat z;
       
       };
       
tPosition Positionen[MAP_SIZE-STEP_SIZE];


Jetzt lade ich alle Positionen in den array:

doch da ist ein kleines problem.
Ich habe die Eckpunkte jedes Quadrates!
Doch ich brauche doch davon den Mittelpunkt oder?
Wie bekomme ich den?

Gruß Flo

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

24.12.2006, 13:35

1. Es heißt Height-Map.
2. Was hat das mit OpenGL zu tun?
3. Warum speicherst du Positionen, wenn du doch nur Höhen speichern musst?
4. Um die Höhe an einer beliebigen Stelle innerhalb eines Vierecks (das sind keine Quadrate) zu bestimmen, kannst du bilineare Interpolation benutzen.
5. Bevor du jetzt fragst, was das ist, benutze Google.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

24.12.2006, 13:37

oO

abgesehen davon, dass du den nicht brauchst, versteh ich nicht wo das problem liegt, den mittelpunkt eines quadrates auszurechnen!?

du kennst ja die positionen deiner vertices und die der kamera.
jetzt brauchst du nur die höhe in der heightmap an der stelle an der sich die kamera befindet berechnen.
entweder schaust du dazu direkt in der heightmap nach, oder du berechnest z.b. die die kamera umgebenden 4 vertices und interpolierst dir daraus die höhe an der stelle (in beiden fällen wird sich bilineare interpolation anbieten).
alternativ kannst du auch einen strahl der von der kamera aus nach unten geht auf einen schnittpunkt mit dem mesh testen, was aber sicher langsamer als die andren möglichkeiten ist.

7

24.12.2006, 13:48

Also!
Ich kann doch der Kamera eine "Kugel" geben!
So.
Jetzt brauche ich doch alle Positionen der Quadraten um zu prüfen ob die Kamera mit denen Kollidiert!
Hmm.
Doch dafür brauche ich doch alle Koordinaten oder?
Dann könnte doch die Kollisions überprüfung (die nicht klappt ;) ) so aussehen:

C-/C++-Quelltext

1
2
3
4
5
GLfloat dist=sqrt(pow(Positionen[i].x-Cam.mPos.x,2) + pow(Positionen[i].y-Cam.mPos.y,2) + pow(Positionen[i].z- Cam.mPos.z,2));

if (dist<2){
//Kollidiert

}


Hoffentlich ist das nicht völliger schrott :lol:
Egal

Gruß Flo

Anonymous

unregistriert

8

24.12.2006, 14:34

Lies bitte die bereits gegebenen Antworten durch.

cu

9

24.12.2006, 14:58

Danke erstmal das Sie den Beitrag wieder geöffnet haben!
Also.

Zitat


alternativ kannst du auch einen strahl der von der kamera aus nach unten geht auf einen schnittpunkt mit dem mesh testen, was aber sicher langsamer als die andren möglichkeiten ist.

dann würde ich wohl gerne diese Methode testen ;)
Auch wenn sie langsamer ist.
Sie klingt ein bisschen einfacher und verständlicher.

Und wie kann ich dann "schnittpunkt mit dem mesh testen"?

Gruß Flo

PS: Bitte nicht schlagen :!:

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

24.12.2006, 15:24

die andren methoden sind einfacher als das und viel schneller ;)
achja, niemals pow() vewenden wenn du nur ein quadrat berechnen willst...
x * x ist um einiges schneller.

und weil heute weihnachten ist, hab ich dir noch ein bildchen gemalt:


(Link)

Werbeanzeige