Autor Beitrag
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 04.12.03 14:12 
ok... ich versuchs ;)

ausblenden volle Höhe Delphi-Quelltext
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 
 // nur positivie Zahlen
 x := abs(x); y := abs(y); 

 // wenn die Zahlen außerhalb des Feldes liegen, nicht weitermachen
 if (x > MapSize) or (y > MapSize) then 
 begin 
  result := 0; 
  exit; 
 end; 

 // Kommateil der Zahlen ermitteln (z.B. bei 1.513 = 0.513)
 fx := frac(x); 
 fy := frac(y); 

 // koordinaten um (x|y) ermitteln
 x1 := trunc(x); 
 x2 := x1 + 1; 
 y1 := trunc(y); 
 y2 := y1 + 1; 

 // in fx und fy stehen die Anteile, zu der jeder Punkt miteinbezogen wird
 // x1,y1,x2 und y2 sind die Koordinaten der Punkte um (x|y)
 // Height ist ein 2d-array das die Höhen der Punkte enthält.
 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 511

Windows XP
Delphi 05 Pers
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 511

Windows XP
Delphi 05 Pers
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 511

Windows XP
Delphi 05 Pers
BeitragVerfasst: 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



BeitragVerfasst: Do 04.12.03 14:50 
Das Terrain ist in Height gespeichert (2d array bzw. property)
adler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 511

Windows XP
Delphi 05 Pers
BeitragVerfasst: Do 04.12.03 14:57 
Titel: mh
dann kann man das nicht für meine Sache nehmen?
Hab die hier drinne ...
ausblenden 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 user profile iconKlabautermann: Delphi-Tags hinzugefügt.

_________________
Wo's nix zu gucken gibt, gibts vielleicht was zu hören.
adler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 511

Windows XP
Delphi 05 Pers
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 511

Windows XP
Delphi 05 Pers
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Fr 13.02.04 22:16 
noch zusätzlich überprüfen ob x bzw y kleiner 0 ist:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
 if (x <0) or (y < 0) then 
 begin 
  result := 0; 
  exit; 
 end;
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 14.02.04 00:52 
obwohl das ja eigentlich schon durchs

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Sa 14.02.04 01:15 
obbschtkuche hat folgendes geschrieben:
obwohl das ja eigentlich schon durchs

ausblenden 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 :mrgreen:
adler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 511

Windows XP
Delphi 05 Pers
BeitragVerfasst: 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



BeitragVerfasst: Sa 14.02.04 12:12 
Das hängt dann aber eher an deiner Zeichenroutine. Wie sieht die denn aus?
adler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 511

Windows XP
Delphi 05 Pers
BeitragVerfasst: Sa 14.02.04 15:09 
Hi, die sieht so aus:
ausblenden volle Höhe Delphi-Quelltext
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 511

Windows XP
Delphi 05 Pers
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 15.02.04 18:09 
das Problem ist übrigens gelöst... :)