| Autor |
Beitrag |
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Do 04.12.03 14:12
ok... ich versuchs ;)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| function GetInterpolatedHeight(x, y: single): single; var x1,y1,x2,y2: integer; fx,fy: single; begin x := abs(x); y := abs(y);
if (x > MapSize) or (y > MapSize) then begin result := 0; exit; end;
fx := frac(x); fy := frac(y);
x1 := trunc(x); x2 := x1 + 1; y1 := trunc(y); y2 := y1 + 1;
result := Height[x1,y1] * (1-fx) * (1-fy) + Height[x1,y2] * (1-fx) * fy + Height[x2,y1] * fx * (1-fy) + Height[x2,y2] * fx * fy; end; |
|
|
adler 
      
Beiträge: 511
Windows XP
Delphi 05 Pers
|
Verfasst: Do 04.12.03 14:22
Titel: mh...
mh, weiß ja net ^^
Du rechnest das dort doch alles durch x,y aus!
Wie berechnest du das dreieck?
Also, du brauchst doch auch die koordinaten der verticen oder?
Ich sehe dort aber keine
und x und y ist doch die Position des Spielers oder?
_________________ Wo's nix zu gucken gibt, gibts vielleicht was zu hören.
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Do 04.12.03 14:29
Das ist nur eine Fkt, die eine Position auf der Karte interpoliert. Das Zeichnen ist eine Extra-fkt
|
|
adler 
      
Beiträge: 511
Windows XP
Delphi 05 Pers
|
Verfasst: Do 04.12.03 14:36
Titel: Ja...
Also ich habe ja jetzt Etwas gezeichnet aber was rechnet diese Funktion aus? die Höhe des Spielers wenn er zB. dort auf einem Hügel rumm läuft oder?
Und dazu braucht er doch für die Dreiecke die Koordinaten oder net?
_________________ Wo's nix zu gucken gibt, gibts vielleicht was zu hören.
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Do 04.12.03 14:39
ich verstehe deine Frage nicht ganz.... Die Fkt rechnet die Hähe des Punktes (x|y) auf der Landkarte aus. Also z.B. die Höhe des Spielers.
|
|
adler 
      
Beiträge: 511
Windows XP
Delphi 05 Pers
|
Verfasst: Do 04.12.03 14:46
Titel: Ja
Ja, aber die Höhe hat man doch oder net?
Ich dachte damit kann man ausrechnen wie hoch der Spieler sein soll, wenn er sozusagen ein Dreieck hoch läuft...
Beim Fiji-Fighter war ja das Prob das der Spieler immer nach einem Punkt sagen wir mal 1Meter höher gesetzt wurde... dann wurde der Spieler flüssig hochgesetzt... Frage ist, wie das geht wenn die Funktion garkeine Dreieck Koordinaten hat...
_________________ Wo's nix zu gucken gibt, gibts vielleicht was zu hören.
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Do 04.12.03 14:50
Das Terrain ist in Height gespeichert (2d array bzw. property)
|
|
adler 
      
Beiträge: 511
Windows XP
Delphi 05 Pers
|
Verfasst: Do 04.12.03 14:57
Titel: mh
dann kann man das nicht für meine Sache nehmen?
Hab die hier drinne ...
Delphi-Quelltext 1: 2: 3:
| vertex_x: array of single; vertex_y: array of single; vertex_z: array of single; |
... Vielleicht, mh ne, das geht net oder? ich muss mir glaube ich selbst was schreiben ^^
Muss ich dann jedes Dreieck Prüfen? oder kann ich irgendwie bestimmen welches Dreieck in meinem Sektor liegt?
Moderiert von Klabautermann: Delphi-Tags hinzugefügt.
_________________ Wo's nix zu gucken gibt, gibts vielleicht was zu hören.
|
|
adler 
      
Beiträge: 511
Windows XP
Delphi 05 Pers
|
Verfasst: Fr 05.12.03 21:29
Titel: man...
Wie kann ich denn, wenn ich drei Dreieckpunkte habe und eine position mitten drinne, y bestimmen?
ich sitze hier mit nem blatt und zeichne aber mir fällt nichts ein!
_________________ Wo's nix zu gucken gibt, gibts vielleicht was zu hören.
|
|
adler 
      
Beiträge: 511
Windows XP
Delphi 05 Pers
|
Verfasst: Fr 13.02.04 20:28
Hi Obschtkuchn
Ähm... hab deine Funktion eingebaut, doch wenn ich zu weit laufe, vor oder zurück, oder mich zu weit drehe gibts nen "range check error" ne Ahnung warum? wie kann ich den Fehler umgehen?
Ich denke mal vom Fehler her gibt es diese Größe nicht mehr, doch stand ich noch nichtmal auf dem Terrain... Da kam ich noch nicht hin ^^
_________________ Wo's nix zu gucken gibt, gibts vielleicht was zu hören.
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Fr 13.02.04 22:16
noch zusätzlich überprüfen ob x bzw y kleiner 0 ist:
Delphi-Quelltext 1: 2: 3: 4: 5:
| if (x <0) or (y < 0) then begin result := 0; exit; end; |
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Sa 14.02.04 00:52
obwohl das ja eigentlich schon durchs
Delphi-Quelltext 1:
| x := abs(x); y := abs(y); |
eliminiert sein müsste. (Auch wenn ich mich, wenn ich mir das nochmal angucke, frage, was ich da gemacht hab ;) )
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Sa 14.02.04 01:15
| obbschtkuche hat folgendes geschrieben: | obwohl das ja eigentlich schon durchs
Delphi-Quelltext 1:
| x := abs(x); y := abs(y); |
eliminiert sein müsste. |
nagut, stimmt auch wieder...
auch wenn du nicht mehr weißt, was du gemacht hast, es funktioniert auf alle Fälle 
|
|
adler 
      
Beiträge: 511
Windows XP
Delphi 05 Pers
|
Verfasst: Sa 14.02.04 09:44
Ja, es geht mit der If-Abfrage auf jeden Fall besser... ^^
Doch Richtig gehts bei mir net... Die heightmap wird irgendwo weiter weg gezeichnet... wenn ich hin fahren, dann klappts nur mit höhe ist nichts mehr 
_________________ Wo's nix zu gucken gibt, gibts vielleicht was zu hören.
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Sa 14.02.04 12:12
Das hängt dann aber eher an deiner Zeichenroutine. Wie sieht die denn aus?
|
|
adler 
      
Beiträge: 511
Windows XP
Delphi 05 Pers
|
Verfasst: Sa 14.02.04 15:09
Hi, die sieht so aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| PROCEDURE PaintHeightmap(); CONST VertPos: Array[0..3] of Array[0..1] of Byte = ((0,0),(0,1),(1,1),(1,0)); VAR Triangles : LongInt; X,Z,I: LongInt; Vertieces: Array[0..3] of TVertex;
procedure PaintTri(V1,V2,V3: Integer); var Normale: TVertex; begin inc(Triangles); Normale := VectorCrossProduct(VectorSubtract(Vertieces[V1],Vertieces[V2]),VectorSubtract(Vertieces[V2],Vertieces[V3])); NormalizeVector(Normale); glNormal3f(Normale[0],Normale[1],Normale[2]); glBindTexture(GL_TEXTURE_2D, textur.boden); glenable(GL_TEXTURE_2D); GLBegin(GL_TRIANGLES); glTexCoord2f(0,1); glVertex3f(Vertieces[V1][0],Vertieces[V1][1],Vertieces[V1][2]); glTexCoord2f(1,1); glVertex3f(Vertieces[V2][0],Vertieces[V2][1],Vertieces[V2][2]); glTexCoord2f(1,0); glVertex3f(Vertieces[V3][0],Vertieces[V3][1],Vertieces[V3][2]); GLEnd(); gldisable(GL_TEXTURE_2D); end; BEGIN for X := 0 to MapRes - 1 do for Z := 0 to MapRes - 1 do begin for I := 0 to 3 do begin Vertieces[I][0] := (X + VertPos[I][0])/MapRes*MapSize; Vertieces[I][2] := (Z + VertPos[I][1])/MapRes*MapSize; Vertieces[I][1] := MapDaten[X + VertPos[I][0], Z + VertPos[I][1]] end; PaintTri(0,1,3); PaintTri(1,2,3); end; END; |
Und am einlesen (laden) liegt es nicht oder? die höhenberechnung geht ja... nur nicht am richtigen platz  bzw. nicht an dem Platz wo gezeichnet wird.
_________________ Wo's nix zu gucken gibt, gibts vielleicht was zu hören.
|
|
adler 
      
Beiträge: 511
Windows XP
Delphi 05 Pers
|
Verfasst: So 15.02.04 12:03
Und, weißte auch nicht an was es liegt? am translaten liegts nicht...
_________________ Wo's nix zu gucken gibt, gibts vielleicht was zu hören.
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: So 15.02.04 18:09
das Problem ist übrigens gelöst... 
|
|