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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

21

25.12.2006, 18:43

wie ich ja erwähnt hab:

damit das mit dem interpolieren sinnvoll ist, müssen A, B, C und D die 4 vertices sein, die um die aktuelle position der kamera herum angeordnet sind. das kannst du in deinem code z.b. testen, indem du schaust ob a und b im bereich 0..1 liegen.

so kannst du dir die höhe an einer beliebigen stelle auf dem heightfield ausrechnen.
wie du jetzt die kamera drübergleiten lassen kannst, wirst du schon selber herausfinden ;)

das is jetzt nicht bös' gemeint, aber ich hab das gefühl du solltest dich einfach mal hinsetzen und versuchen zu verstehen wie das mit der interpolaion funktioniert. z.b. könntest du einfach mal google oder zumindest die wikipedia bemühen.
wenn du wirklich begriffen hast was es damit auf sich hat, wird es dich leichtfallen das ganze zu implementieren. wenn du einfach nur einbaust, was ich an formeln hier poste ohne wirklich darüber nachgedacht zu haben was eigentlich passiert, wird dir das net viel bringen.

22

25.12.2006, 19:10

Es ist zum Mäusemelken!!
Also hier nochmal mein kompletter Code:

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
123
124
125
126
127
#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];

struct tVector{
 
GLfloat x;
GLfloat y;
GLfloat z;
        
};

GLfloat hoehe;


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;                      // 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;
            
            D.x=x;
            D.y=y;
            D.z=z;
            
            glVertex3i(x, y, z);    
            
    
            L = STEP_SIZE;
            a = Cam.mPos.x-A.x;
            b = Cam.mPos.z-A.z;
            
            if (a>0 && a<1 && b>0 && b<1){
                    
            fx = a / L; 
            fy = b / L; 
            h1 = A.z * fx + B.z * (1 - fx); 
            h2 = C.z * fx + D.z * (1 - fx);
            hoehe = h1 * fy + h2 * (1 - fy);
          
            }
            
        }
    glEnd();


     
}

23

25.12.2006, 19:12

Die Werte sind so:

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Passt! Ein Rechteck wurde endlich gefunden!

49.4297

Passt! Ein Rechteck wurde endlich gefunden!

48.9688

Passt! Ein Rechteck wurde endlich gefunden!

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

48.4922

Passt! Ein Rechteck wurde endlich gefunden!

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

32.9766

...

Bei "Passt! Ein Rechteck wurde endlich gefunden!" war die bedingung erfüllt

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

24

25.12.2006, 19:20

sry mein fehler, es müssen natürlich fx und fy im 0..1 bereich sein und nicht a und b, wobei fx und fy >= 0.0 und <= 1.0 sein können.

nimm dir meinen vorigen post aber zu herzen, denn dann wär dir das gleich selber aufgefallen, noch bevor dus implementiert hast ;)

25

25.12.2006, 21:40

ok mach ich.
Also jetzt kommen gute zahlen an. Immer positiev, zwischen 1-104.977.
Wenn die zahlen richtig sind wie gehts dann weiter?
Cam.mPos.y ist dann die Kamera höhe.

Gruß Flo

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

26

25.12.2006, 21:43

Also mal ehrlich.
Du hast die Höhe der Kamera.
Du hast die Höhe des Terrains an der Stelle der Kamera.
Denk mal nach.

27

25.12.2006, 21:56

C-/C++-Quelltext

1
2
3
4
5
if ( hoehe>6 ){
Cam.mPos.y+=0.1f;            
}else{
Cam.mPos.y-=0.1f;      
}

Also das klappt nicht!

Sry

:( Gruß Flo

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

28

25.12.2006, 22:19

Was ist denn "hoehe"?
Mach dir mal klar, ob du mit absoluten Höhen (von y = 0 aus gesehen) oder mit relativen Höhen (vom Terrain aus gesehen) rechnest.
Und dann überleg mal ein bisschen ausführlicher, statt gleich wieder zu fragen. Selbstständiges Arbeiten ist beim Programmieren(lernen) das wichtigste überhaupt. Wenn man seine Probleme immer von anderen lösen lässt, lernt man selber nicht, wie man Probleme löst.

29

25.12.2006, 22:28

Also ich dachte was bei hoehe rauskommt wäre eine Zahl zwischen 0 bis unendlich.
Also das die höhe vom Terrain 0 ist und die kamera x (also variable hoehe).
Deswegen dachte ich mir das die Kamera 6 einheiten über dem Terrain schweben soll.
Doch ich kann es selber nicht herleiten weil ich diese ganze Rechnung nicht verstehe (8. Klasse). :?

Also alleine komm ich da leider nicht weiter. sry.

Gruß Flo

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

30

25.12.2006, 22:46

Dann solltest du vielleicht einen Schritt zurückgehen und mit was einfacherem anfangen. In der 8. Klasse fehlen dir mit Sicherheit noch sehr viele mathematische Kenntnisse, die man für 3D-Spiele auf jeden Fall braucht.

Werbeanzeige