游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1591|回复: 1

有高手能给一个terrain的例子吗?

[复制链接]

24

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
发表于 2005-4-22 20:51:00 | 显示全部楼层 |阅读模式
看了OpenGL编3D游戏_CAI,里面的那个A05_开天辟地的例子不大明白,

地图的那个部分
void baiscobj::InitTerrain(float h)
{ int index = 0;
  int Vertex;
  for (int z = 0; z < MAP_W; z++)
   for (int x = 0; x < MAP_W; x++)
    { Vertex = z * MAP_W + x;
      g_terrain [Vertex][0] = float(x)*MAP_SCALE;
      g_terrain [Vertex][1] = (float)(g_imageData[(z*MAP_W+x)*3]/3);
      g_terrain [Vertex][2] = -float(z)*MAP_SCALE;
      g_texcoord[Vertex][0] = (float) x;
     g_texcoord[Vertex][1] = (float) z;       
     g_index [index++] = Vertex;
     g_index [index++] = Vertex+ MAP_W;
   }
  glEnableClientState(GL_VERTEX_ARRAY);       
  glVertexPointer    (3,GL_FLOAT,0,g_terrain);
  glEnableClientState(GL_TEXTURE_COORD_ARRAY);
  glTexCoordPointer  (2,GL_FLOAT,0,g_texcoord);
}
void baiscobj:rawSand()
{ glBindTexture(GL_TEXTURE_2D, g_cactus[0]);
  glTexEnvf    (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
  for (int z = 0; z < MAP_W-1; z++)
    glDrawElements(GL_TRIANGLE_STRIP,MAP_W*2,GL_UNSIGNED_INT,&g_index[z*MAP_W*2]);
}
float baiscobj::GetHeight(float x, float z)
{         float CameraX = x/MAP_SCALE;
        float CameraZ =-z/MAP_SCALE;  
        int Col0 = int(CameraX);  
        int Row0 = int(CameraZ);
        int Col1 = Col0 + 1;
        int Row1 = Row0 + 1;
        if (Col1 > MAP_W)        Col1 = 0;
        if (Row1 > MAP_W)        Row1 = 0;
        float h00=g_terrain[Col0 + Row0*MAP_W][1];
        float h01=g_terrain[Col1 + Row0*MAP_W][1];
        float h11=g_terrain[Col1 + Row1*MAP_W][1];
        float h10=g_terrain[Col0 + Row1*MAP_W][1];
        float tx =CameraX - int(CameraX);
        float ty =CameraZ - int(CameraZ);
        float txty = tx * ty;
        return h00*(1.0f-ty-tx+txty)
                        + h01*(tx-txty)
                        + h11*txty
                        + h10*(ty-txty);
}


有人能解释一下吗,看了一天,不大明白,

0

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2005-4-23 16:25:00 | 显示全部楼层

Re:有高手能给一个terrain的例子吗?

你可以和scu_biology@sohu.com联系。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 10:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表