游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3690|回复: 7

请教:人物模型在凹凸地形上行走时的高度定位

[复制链接]

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-8-12 10:08:00 | 显示全部楼层 |阅读模式
用opengl写了一个demo

发现人物在凹凸的地形上行走时很不平滑...

人物的高度是根据周围点的高度计算吗? 还是用碰撞来判断?

拜托各位指点~

69

主题

450

帖子

473

积分

中级会员

战魂缔造者

Rank: 3Rank: 3

积分
473
QQ
发表于 2005-8-12 10:26:00 | 显示全部楼层

Re:请教:人物模型在凹凸地形上行走时的高度定位

可以用一个物理引擎载入一个地形,人物就会自动根据地形变化而动.
不过自己写也很简单,分析任务质心所在的地形三角型内,根据3个顶点确定的平面,和人物重力线的交点,取交点的高度就是人物脚底的高度.这个东西很简单,自己可以尝试着写一下,不过OPENGL没有提供那么方便的函数,DX倒是很全

5

主题

12

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2005-8-12 11:57:00 | 显示全部楼层

Re:请教:人物模型在凹凸地形上行走时的高度定位

可以用双线性插值计算的原理计算。

9

主题

29

帖子

35

积分

注册会员

Rank: 2

积分
35
发表于 2005-8-13 08:54:00 | 显示全部楼层

Re:请教:人物模型在凹凸地形上行走时的高度定位

假设你的地形为terrain[][];用下面的函数求出地形上点(x,z);的y值,将人物的高度加上这个y值即可.
float GetHeight(GLfloat x, GLfloat z)
{        
float h=0;
float Xb,Yb;
int Xa,Ya;
Xa=(int)x;
Ya=(int)z;
Xb=x-Xa;
Yb=z-Ya;

float a=terrain[Xa][Ya].y;
float b=terrain[Xa+1][Ya].y;
float c=terrain[Xa][Ya+1].y;
float d=terrain[Xa+1][Ya+1].y;
h=(a*(1-Xb)+b*Xb)*(1-Yb)+(c*(1-Xb)+d*Xb)*Yb;
return h;
}

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2005-8-13 15:08:00 | 显示全部楼层

Re:请教:人物模型在凹凸地形上行走时的高度定位

谢谢各位了~~
用了alpswolf的方法已经解决了 比较平滑了
嗯 但是我想如果用三角形来判断才是最完美的..
就是sunicdavy所说的那种 但是貌似要用到空间解析几何...

6

主题

42

帖子

47

积分

注册会员

Rank: 2

积分
47
发表于 2005-8-14 16:54:00 | 显示全部楼层

Re:请教:人物模型在凹凸地形上行走时的高度定位

根据平面方程N.P=D,可是求出人物BoundingBox中心(Pb)垂直与地形三角形的距离,再根据N可以求出这条垂线的vector,人物的站立方向一般(0,1,0),所以可以得到站立方向和垂线的夹角,这样可以求出人物BoundingBox中心以站立方(V)向到地形三角形的距离(Vd)就是最终站立的高度,如果还想知道碰撞点(Pc),那么就是
Pc=Pb+Normalize(V)*Vd

6

主题

42

帖子

47

积分

注册会员

Rank: 2

积分
47
发表于 2005-8-14 17:03:00 | 显示全部楼层

Re:请教:人物模型在凹凸地形上行走时的高度定位

不过一般计算这个问题的难度不在如何计算与具体三角形的碰状,或者碰状距离,而是如何在在成千上万个三角形中快速找出与哪个三角形发生了碰状,为此一般会有很多空间切分方法来实现这个目标.

9

主题

29

帖子

35

积分

注册会员

Rank: 2

积分
35
发表于 2005-8-16 09:44:00 | 显示全部楼层

Re:请教:人物模型在凹凸地形上行走时的高度定位

Re:请教:人物模型在凹凸地形上行走时的高度定位

根据平面方程N.P=D,可是求出人物BoundingBox中心(Pb)垂直与地形三角形的距离,再根据N可以求出这条垂线的vector,人物的站立方向一般(0,1,0),所以可以得到站立方向和垂线的夹角,这样可以求出人物BoundingBox中心以站立方(V)向到地形三角形的距离(Vd)就是最终站立的高度,如果还想知道碰撞点(Pc),那么就是
Pc=Pb+Normalize(V)*Vd

如果按照这样的算法,那么CS里人物走到一个斜坡或台阶时,由于人物的高度是死的,是不是就认为与斜坡或台阶的三角形发生了碰撞,人物就不能走上去呢. 另外人物从高处跳到低处时是不是认为人与地面的三角形发生了碰撞,人物不能再走动呢.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-27 10:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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