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

Aktuelle Zeit: Mi Mai 15, 2024 13:49

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Punkt -> Abstand zur Heightmap
BeitragVerfasst: Di Okt 19, 2004 23:35 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
Hi Leute!
Hab folgendet Problem:
Hab einen Punkt (PlayerPosition) der über ner HeightMap Liegt..
Wie kann ich die Distanz zum "Boden" errechnen ohne Linien von oben runter zu ziehen und Line-Triangle intersection zu prüfen (wie ichs im mom mach was aber wahnsinning Leistung braucht..)
Hab im Forum ma gesucht und folgendes gefunden:http://www.delphigl.com/forum/viewtopic.php?t=2815&highlight=abstand%2A+bode%2A aber daraus werd ich nich so ganz schlau weil meine HeightMap weniger was mit Einheitskreisen etc. zu tun hat sondern aus normalen Höhendaten und daraus errechneten Vertieces besteht.
Aber wie kann ich die SpielerPosition in der Weltmatrix in die zugehörigen X,Z koordinaten meiner Höhendaten einsetzen?
Das wars auch schon!
Thx fürs lesen bis dann!

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 11:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Ich gehe jetzt ma davon aus, dass du mit deinem Player über die Landschaft gehen willst. Also ich würde das so machen(Der Y-Wert eines Punktes bei den Koordinaten X|Z ist in einem Array gespeichert):
(Pseydocode ;)
Code:
  1.  
  2. Distanz:= PlayerPosition.x - HeightmapCoords[Trunc(X)][Trunc(z)];
  3.  


Dabei "springt" die Spielfigur aber eher über das Spielfeld. Wenn du das ganze "smooth" ( 8) ) haben willst, würde ich eine Sphere-Triangle-Kollision versuchen.

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 11:21 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Man muß doch nur zwischen den 4 Punkten, des Quadrats auf dem man steht, linear interpolieren um die Höher der Heightmap an dieser Stelle zu bekommen. Schnelle Kollision ist ja auch ein Vorteil von Höhenkarten. Solange die halbwegs auf einer Ebene liegen geht das so, ansonsten muß man noch zuerst noch testen auf welcher Hälfte des Quadrates man sich befindet.

Code:
  1. a:=HeightmapCoords[Trunc(X)][Trunc(z)];
  2. b:=HeightmapCoords[Trunc(X)+1][Trunc(z)];
  3. c:=HeightmapCoords[Trunc(X)][Trunc(z)+1];
  4. d:=HeightmapCoords[Trunc(X)+1][Trunc(z)+1];
  5.  
  6. h1:=frac(x)*a+(1-frac(x))*b;
  7. h2:=frac(x)*c+(1-frac(x))*d;
  8. h:=frac(y)*h1+(1-frac(y))*h2


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 12:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
Hi und Danke soweit!
Hatte das ja schon in dem Post das ich oben genannt hab gesehen und damit rumprobiert.
Klingt ja auch logisch aber irgendwie kommt da ein falscher Wert raus..
also h is die Distanz zum Boden.
Wenn ich jetzt ins Game geh dann wird zwar ein Wert errechnet aber wenn ich die Höhe des Spielers ändere verändert sich der Wert nicht und ich hab ka warum..
Also der Code sieht bei mir folgendermaßen aus:
Code:
  1. //Playerposition ist halt die Variable in der die Position des Spielers gespeichert wird
  2. function GetHeightAboveHeightMap : single;
  3. var a,b,c,d,h1,h2,h: Single;
  4. begin
  5.   a:=MapDaten[Trunc(-PlayerPosition.X)][Trunc(-PlayerPosition.Z)];
  6.   b:=MapDaten[Trunc(-PlayerPosition.X)+1][Trunc(-PlayerPosition.Z)];
  7.   c:=MapDaten[Trunc(-PlayerPosition.X)][Trunc(-PlayerPosition.Z)+1];
  8.   d:=MapDaten[Trunc(-PlayerPosition.X)+1][Trunc(-PlayerPosition.Z)+1];
  9.  
  10.   h1:=frac(-PlayerPosition.X)*a+(1-frac(-PlayerPosition.X))*b;
  11.   h2:=frac(-PlayerPosition.X)*c+(1-frac(-PlayerPosition.X))*d;
  12.   h:=frac(-PlayerPosition.Y)*h1+(1-frac(-PlayerPosition.Y))*h2;
  13.   result:=h;
  14. end;


Wie gesagt wenn ich die Spielerhöhe ändere bleibt der anzegeigte Wert gleich.
Thx und Cya

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 20:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
Also hab nomma bissel dranrumgebastelt... sieht jetzt so aus:
Code:
  1.  
  2.   h1:=MapDaten[trunc(-PlayerPosition.X),trunc(-PlayerPosition.Z)]/10; // /10 weil ich beim Erstellen der HeightMap auch die Y Werte durch 10 geteilt hab damit die Karte nicht zu groß wird
  3.   h2:=MapDaten[trunc(-PlayerPosition.X)+1,trunc(-PlayerPosition.Z)]/10;
  4.   h3:=MapDaten[trunc(-PlayerPosition.X),trunc(-PlayerPosition.Z)+1]/10;
  5.   h4:=MapDaten[trunc(-PlayerPosition.X)+1,trunc(-PlayerPosition.Z)+1]/10;
  6.   h1:=h1*(1-frac(-PlayerPosition.X))+h2*frac(-PlayerPosition.X); // !!!!!
  7.   h2:=h3*(1-frac(-PlayerPosition.X))+h4*frac(-PlayerPosition.X); // !!!!!
  8.   result:=h1*(1-frac(-PlayerPosition.Z))+h2*frac(-PlayerPosition.Z);
  9.  

aber irgendwie wenn ich mich in den Raum bewege der so bei X>80 liegt kommt immer 0 aus der Funktion ?!
Hab ka was da falsch is.. und versteh die 2 zeilen nich hinter denen die ! sind.Also versteh nich was da gerechnet wird
Thx!Cya

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 20:28 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Bei den Zeilen mit dem !! darfst du nicht wieder h1 und h2 zuweisen sonders mußt neue Variablen nehmen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 20:42 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
jo hab ich gemacht aber kein unterschied..
da die ja nachdem die sich selbst ändern eh nich mehr gebraucht werden in dem durchlauf wärs eh egal
trotzdem thx.. komm echt nich drauf wo da der bug is...

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 20:46 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Stimmt. Ich hatte mich vertan.Daran kann es nicht gelegen haben. Warum hast du eigentlic da -PlayerPosition?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 21:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
das is alles - weil x und z bei der bewegung ins negative berechnet werden also is X eigentlich -X und Z -Z

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 21:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
Das komische ist: Habe eben zum Test ma ne Map gemalt, bei der alles schawarz is nur ein Strich in der Mitte..
ich lass mit h1-h4 anzeigen.. der strich is bei x: 0 bis 127 (ganz durch) und z: 60 .. aber bei z 40 zeigt er 25,5 in h1-h4 ?!
hab ka was da abgeht...*totalverwirrtbin*

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 22:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
Upps habs glaub ich gefunden.. habs grad getestet und scheint zu klappen..
Musste die Mapresolution im Verhältnis zur Größe noch einrechnen.. wenn ichs fertig hab post ichs noch grad fallses jemanden interessiert...

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 22:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
Sollte inetwa so aussehen:
Code:
  1.  
  2. function GetHeightAboveHeightMap(X,Z: Single) : single;
  3. var h1,h2,h3,h4: Single;
  4. begin
  5.   h1:=MapDaten[trunc(X*MapResolution/MapSize)  ,trunc(Z*MapResolution/MapSize)  ]/10;
  6.   h2:=MapDaten[trunc(X*MapResolution/MapSize)+1,trunc(Z*MapResolution/MapSize)  ]/10;
  7.   h3:=MapDaten[trunc(X*MapResolution/MapSize)  ,trunc(Z*MapResolution/MapSize)+1]/10;
  8.   h4:=MapDaten[trunc(X*MapResolution/MapSize)+1,trunc(Z*MapResolution/MapSize)+1]/10;
  9.  
  10.   h1:=h1*(1-frac(X*MapResolution/MapSize))+h2*frac(X*MapResolution/MapSize);
  11.   h2:=h3*(1-frac(X*MapResolution/MapSize))+h4*frac(X*MapResolution/MapSize);
  12.   result:=h1*(1-frac(Z*MapResolution/MapSize))+h2*frac(Z*MapResolution/MapSize);
  13. end;
  14.  


Thx an die, die mir weitergeholfen haben!! :wink:
Bye

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


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


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.023s | 17 Queries | GZIP : On ]