opengl第十课 理解

昨天看了NeHe的教程的八、九、十章。最为激动人心的就是第十章,加载3D。我准备下次的时候,自己做一个3D的环境,然后通过左右转,上下转,前进,绝对移动(比如左右移动,不只是旋转,还有绝对的轴位移)。

对于旋转,让我觉得头昏眼花,所以决定好好的理一下头绪,好好地转一下。

相关代码段:

1.       全局定义:

float heading;

float xpos;

float zpos;

 

GLfloat yrot;

GLfloat walkbias = 0;

GLfloat lookupdown = 0.0f;

GLfloat z = 0.0f;

 

相关释义:

xpos、zpos 分别为游戏者(以后用A来指代)相对于房屋中心坐标系的x方向和z方向位移;yrot 为A相对于房屋坐标系的y轴正方向的旋转角度,逆时针方向为正;lookupdown则为房屋坐标系绕它的x 轴正方向相对于A逆时针旋转的角度。

 

2.       局部定义:

函数int DrawScene(GLvoid)中

GLfloat xtrans = -xpos; //房屋坐标系相对于A的x方向的位移

GLfloat ztrans = -zpos; //房屋坐标系相对于A的z方向的位移

GLfloat ytrans = -walkbias-0.25f; //房屋坐标系相对于A的y方向的位移

GLfloat sceneroty = 360.0f – yrot; //房屋坐标系绕y轴正方向相对于A的旋转角度

 

3.       键处理:

if (keys[VK_PRIOR])

z-=0.02f;

……

if (keys[VK_UP])

{

xpos -= (float)sin(heading*piover180) * 0.05f;

zpos -= (float)cos(heading*piover180) * 0.05f;

if (walkbiasangle >= 359.0f)

walkbiasangle = 0.0f;

    else

walkbiasangle+= 10;

    walkbias = (float)sin(walkbiasangle * piover180)/20.0f;

}

……

if (keys[VK_RIGHT])

{

heading -= 1.0f;

yrot = heading;

}

……

if (keys[VK_PRIOR])

lookupdown-= 1.0f;

……

上面键的处理都是对称的, 故只写出一半。

不解之处:

1)    虽然z在源代码中解释为进入屏幕的深度,但是z在DrawScene代码中没有用到,为什么还要键处理,而且还是用调整A的视线上下方向的键来处理。故我将其果断隐去,结果效果没有影响。

2)    Heading这个变量完全多余。直接用yrot代替就得了。

4.       图示:

 

按’->’键,后(左前右后):

OpenGL学习系列(九)

按前移箭头后(左前右后)

OpenGL学习系列(九)

按向上键(PgUp)后(左前右后):

OpenGL学习系列(九)

 

好了,Lesson10就写到这里。下次准备自己做一个3D的环境,当然应该不会太顺手,具体想法:

初步版:

1)除了前进、后退,左右转、上下转外,还有左移和右移;当然,原作者的上下跳动感不应该不考虑;

2)一个回字形的走廊,带一个入口;

3)使用墙壁和地板砖纹理;

改进版:

1)最好在某个地方放一盏灯。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值