游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5640|回复: 8

请问一下在地面凹凸不平的时候行走,照相机y族怎么确

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2006-8-18 16:00:00 | 显示全部楼层 |阅读模式
各位大虾
我最近在学唐明理先生的<<学OpenGL编3D游戏_CAI>>的时候,在第5章的<<开天辟地>>中我老想不明白他的那个GetHeight()函数的原理,就是确定在凹凸不平的地面中移动照相机的时候,怎么确定照相机的y组坐标,使得在地面底的时候,照相机跟着下降,在地面高的时候照相机跟着上升,
谢谢各位的指点,谢谢

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-8-19 08:29:00 | 显示全部楼层

Re:请问一下在地面凹凸不平的时候行走,照相机y族怎么确

晕。getHeight就是得到地面高度吧?

42

主题

334

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
发表于 2006-8-19 09:25:00 | 显示全部楼层

Re:请问一下在地面凹凸不平的时候行走,照相机y族怎么确

学OpenGL编3D游戏书摘要
5-1-3 取地面高度
这里产生的地面高度是随机起伏,我们在此中漫游,势必要求视点高度随地形变化而变。否则在遇到地面高度大于视点高度时,我们就要钻入地下了。下面GetHeight(…)取地面高度的函数可以获得XZ面上的任一点的高度y,可用于我们在漫游时动态改变视点高度,形成爬坡过堑的视觉效果;也可以在后面章节中往场景加入其它物体时,在高度上的定位之用。
float baiscobj::GetHeight(float x, float z)   // 取地面高度
1{        float CameraX = x/MAP_SCALE;                    //计算在那一块
2  float CameraZ =-z/MAP_SCALE;                    //计算在那一块
3  int Col0 = int(CameraX);                          //块的列号
4  int Row0 = int(CameraZ);                          //块的行号
5  int Col1 = Col0 + 1;                               //相邻列
6  int Row1 = Row0 + 1;                             //相邻行
7  if (Col1 > MAP_W)Col1 = 0;                       //相邻列大于地块数,取首列
8  if (Row1 > MAP_W)Row1 = 0;                     //相邻行大于地块数,取首行
9        float h00=g_terrain[Col0 + Row0*MAP_W][1];        //获取块四角的高度
10        float h01=g_terrain[Col1 + Row0*MAP_W][1];
11        float h11=g_terrain[Col1 + Row1*MAP_W][1];
12        float h10=g_terrain[Col0 + Row1*MAP_W][1];
13        float tx =CameraX - int(CameraX);                  //求块内X偏移位置
14        float ty =CameraZ - int(CameraZ);                   //求块内Z偏移位置
15         float txty = tx * ty;                                //以下为双线性插值(内插)计算
16        return h00*(1.0f-ty-tx+txty)
             + h01*(tx-txty)
             + h11*txty
             + h10*(ty-txty);                         //返回插值计算值,为所求点的高度。
17}
程序注释,行号是为注释加的。
1~2行 计算所求点在那一地面块。
3~4行 得到块的行列号。
5~6行 块的对角行列号。
7~8行 对角行列号超界,取首块。
9~12行 分别获取点(x,z) 所在块四角的高度。         
图5-1-2 四角高度示意
13~14行 求点(x,z) 在块内的位置(tx,ty) 。
15~16行 现在块的四角高度已知,所求点(x,z)在块内的位置(tx,ty)也算出。要准确求出点(x,z) 的y值(高度) ,我们可以用双线性插值(内插)计算。有关双线性插值计算的原理、方法,请参考有关资料。16行就是进行双线性插值计算返回所求点(x,z)的高度y。

44

主题

248

帖子

274

积分

中级会员

Rank: 3Rank: 3

积分
274
发表于 2006-8-20 21:42:00 | 显示全部楼层

Re:请问一下在地面凹凸不平氖焙蛐凶撸?障嗷?族怎么确定?

唐先生的代码哪里得来的我不晓得,个人觉得应该不是自己写的吧

书上的注释写的莫名其妙,程度中变量命名完全是一个初学者的风格

关键代码一句不提,不是调用别人的库就是用别人现成的代码,书上也不解释

别的代码哪抄的我不知道,粒子系统的是 Opengl 游戏编程 里面的 一字不改

呵呵呵

0

主题

291

帖子

291

积分

中级会员

Rank: 3Rank: 3

积分
291
QQ
发表于 2006-11-12 20:17:00 | 显示全部楼层

Re:请问一下在地面凹凸不平的时候行走,照相机y族怎么确

2楼,,,我需要的就是TML先生的代码,,,,麻烦你给我一份???

5

主题

9

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2006-11-18 14:05:00 | 显示全部楼层

Re:请问一下在地面凹凸不平的时候行走,照相机y族怎么确

第4楼说的有理

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-3-9 11:35:00 | 显示全部楼层

Re:请问一下在地面凹凸不平的时候行走,照相机y族怎么确

那是《OPENGL游戏程序设计》中的代码。是一个老外写的书。
那个是在讲标志板时用的一个例子。那个例子里面的glulookat()函数视点方面讲的不是很清楚。
不过前面都讲的很清楚。
取某点的高度问题涉及到“高程地形”和“顶点数组”的知识如果理解那些方面的话就不难理解是怎么计算某点的高度了。

1

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2007-3-16 14:44:00 | 显示全部楼层

Re:请问一下在地面凹凸不平的时候行走,照相机y族怎么确

如果将一个3ds格式的建筑模型导入到游戏中后,如何让视角走上该建筑模型?比如一个在地面上的台阶?

1

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2007-3-16 15:45:00 | 显示全部楼层

Re:请问一下在地面凹凸不平的时候行走,照相机y族怎么确

也就是给3ds文件在高度上的定位
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 17:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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