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
Quellcode |
|
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 |
Die Eckpunkte des Quadrates sind A,B,C,D. Von denen ist jeweils die x,y und z position bekannt. Kamera y Kamera z Kamera x sind bekannt. L ist die Kantenlänge: L = A.x - B.x + A.y - B.y + A.z - B.z (??) interpolationsfaktor in x und y richtung: a ist die distanz zwischen dem linkenrand und der x position der Kamra! b ist die distanz zwischen dem oberenrand und der y position der Kamera! (Müsste das nicht z sein?) fx = a / L; fy = b / L; jetzt interpolierst du dir 2 Höhenwerte h1 und h2 z.B. in x richtung: hv1 ist die höhe (also y?) von dem ersten vertex. hv2 vom zweiten. hv3 vom dritten. hv4 vom vierten. h1 = hv1 * fx + hv2 * (1 - fx) h2 = hv3 * fx + hv4 * (1 - fx) Jetzt die höhe der Kamera (h): h = h1 * fy + h2 * (1 - fy) |
Zitat von »"F-Wölkchen"«
L ist die Kantenlänge:
L = A.x - B.x + A.y - B.y + A.z - B.z (??)
Zitat von »"F-Wölkchen"«
b ist die distanz zwischen dem oberenrand und der y position der Kamera! (Müsste das nicht z sein?)
Zitat von »"dot"«
...(oder z, je nachdem was deine ebene ist)...
Zitat von »"F-Wölkchen"«
jetzt interpolierst du dir 2 Höhenwerte h1 und h2 z.B. in x richtung:
hv1 ist die höhe (also y?) von dem ersten vertex.
Zitat von »"F-Wölkchen"«
Wie sieht dann der Wert aus??
Ist das dann ein Wert zwischen 0 bis unendlich?
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
L = A.x - B.x; a = Cam.mPos.x-A.x; b = Cam.mPos.y-A.y; fx = a / L; fy = b / L; h1 = A.y * fx + B.y * (1 - fx); h2 = C.y * fx + D.y * (1 - fx); hoehe = h1 * fy + h2 * (1 - fy); |
Zitat
Also y ist die höhe!
Zitat
C-/C++-Quelltext
1 b = Cam.mPos.y-A.y;
Zitat
Doch die höhe ist dann immer -1.#IND ??
Zitat von »"http://www.thescripts.com/forum/thread62988.html"«
> Hello!
>
> Which operatiaon causes -1.#IND ?[/color]
That's how Microsoft's compilers print out a Quiet NaN (Not a Number).
It's typically the result of working with a variable that hasn't been
initialized (the IND stands for "indefinite" if I'm not mistaken).
Another post mentioned infinity. At least with MS's compilers, a
infinity will print out as -1.#INF. This is typically produced by a
division that produces a result too large to represent, such as
something like 1e+300/1e-300. With infinite range available, this would
produce 1e+600, but a double normally tops out at around 1e+308.
C-/C++-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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
#define MAP_SIZE 1024 // Size Of Our .RAW Height Map ( NEW ) #define STEP_SIZE 16 // Width And Height Of Each Quad ( NEW ) #define HEIGHT_RATIO 1.5f // Ratio That The Y Is Scaled According To The X And Z ( NEW ) // Holds The Height Map Data ( NEW ) float scaleValue = 0.15f; // Scale Value For The Terrain ( NEW ) UINT Gras[1]; typedef struct tVector{ GLfloat x; GLfloat y; GLfloat z; }; GLfloat hoehe[(MAP_SIZE-STEP_SIZE)*(MAP_SIZE-STEP_SIZE)]; void init_Landschaft(BYTE pHeightMap[]){ LoadRawFile("Terrain.raw", MAP_SIZE * MAP_SIZE, pHeightMap); // ( NEW ) BMP_Texture(Gras, "grass.bmp",0); } int Height(BYTE *pHeightMap, int X, int Y) // This Returns The Height From A Height Map Index { int x = X % MAP_SIZE; // Error Check Our x Value int y = Y % MAP_SIZE; // Error Check Our y Value if(!pHeightMap) return 0; // Make Sure Our Data Is Valid return pHeightMap[x + (y * MAP_SIZE)]; // Index Into Our Height Array And Return The Height } void draw_Landschaft(BYTE pHeightMap[]){ int X = 0, Y = 0; // Create Some Variables To Walk The Array With. int x, y, z=0, i=0; // Create Some Variables For Readability glBindTexture(GL_TEXTURE_2D, Gras[0]); glBegin( GL_QUADS ); for ( X = 0; X < (MAP_SIZE-STEP_SIZE); X += STEP_SIZE ) for ( Y = 0; Y < (MAP_SIZE-STEP_SIZE); Y += STEP_SIZE ) { tVector A; tVector B; tVector C; tVector D; GLfloat L; GLfloat a, b; GLfloat fx, fy; GLfloat h1, h2; glTexCoord2f(0.0f, 1); x = X; y = Height(pHeightMap, X, Y ); z = Y; A.x=x; A.y=y; A.z=z; glVertex3i(x, y, z); glTexCoord2f(0.0f, 0.0f); x = X; y = Height(pHeightMap, X, Y + STEP_SIZE ); z = Y + STEP_SIZE ; B.x=x; B.y=y; B.z=z; glVertex3i(x, y, z); glTexCoord2f(1, 0.0f); x = X + STEP_SIZE; y = Height(pHeightMap, X + STEP_SIZE, Y + STEP_SIZE ); z = Y + STEP_SIZE ; C.x=x; C.y=y; C.z=z; glVertex3i(x, y, z); glTexCoord2f(1, 1); x = X + STEP_SIZE; y = Height(pHeightMap, X + STEP_SIZE, Y ); z = Y; C.x=x; C.y=y; C.z=z; glVertex3i(x, y, z); L = A.x - B.x; a = Cam.mPos.x-A.x; b = Cam.mPos.z-A.z; fx = a / L; fy = b / L; h1 = A.y * fx + B.y * (1 - fx); h2 = C.y * fx + D.y * (1 - fx); hoehe[i] = h1 * fy + h2 * (1 - fy); i++; } glEnd(); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
C.x=x; C.y=y; C.z=z; glVertex3i(x, y, z); glTexCoord2f(1, 1); x = X + STEP_SIZE; y = Height(pHeightMap, X + STEP_SIZE, Y ); z = Y; C.x=x; //sollte D sein, oder ;) C.y=y; C.z=z; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
L = A.x - D.x; // bzw. L = STEP_SIZE; a = Cam.mPos.x - A.x; b = Cam.mPos.z - A.z; fx = a / L; fy = b / L; h1 = A.y * fx + B.y * (1 - fx); h2 = C.y * fx + D.y * (1 - fx); hoehe[i] = h1 * fy + h2 * (1 - fy); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
typedef struct tVector{ GLfloat x; GLfloat y; GLfloat z; }; |
Werbeanzeige