游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2280|回复: 3

双直线插值求高度问题

[复制链接]

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2010-5-10 17:45:00 | 显示全部楼层 |阅读模式
看了唐明理的游戏编程  第五章时  开天辟地
   
用双直线插值求高度  我困惑了好久资料也找不到  相关记载

部分代码如下:
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);         //求块内X偏移位置
        float ty =CameraZ - int(CameraZ);         //求块内Z偏移位置
        float txty = tx * ty;                     //以下为双线性插值(内插)计算
        return h00*(1.0f-ty-tx+txty)
                        + h01*(tx-txty)
                        + h11*txty
                        + h10*(ty-txty);                  //返回插值计算值,为所求点的高度。
}
这是什么意思啊?  哪位好心高手帮我解释一下,解救我与颓废之中!!不胜感激啊!!!1

1

主题

266

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
发表于 2010-5-11 00:39:00 | 显示全部楼层

Re:双直线插值求高度问题

注释写得比较清楚啊

还是说不懂双线性插值的计算部分,双线性插值就是在两个方向分别进行一次线性插值。
楼主可以参考相关的数学概念。

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2010-5-11 12:35:00 | 显示全部楼层

Re:双直线插值求高度问题

楼上的知道“双线性插值”这一概念那本书上解释的有吗?
  给我推荐一点资料 不胜感激啊!

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2010-5-11 21:31:00 | 显示全部楼层

Re:双直线插值求高度问题

哈哈··我终于想出来了  ,2楼的相当感谢!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-9 16:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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