游戏开发论坛

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

想知道这样写的数学原理

[复制链接]

13

主题

46

帖子

46

积分

注册会员

Rank: 2

积分
46
发表于 2007-8-7 16:17:00 | 显示全部楼层 |阅读模式
//这是原代码,问题在最后
BOOL baiscobj:isplayScene()
{
float speed=0.2f;
if (KEY_DOWN(VK_SHIFT)) speed = speed * 4;
if (KEY_DOWN(VK_LEFT)) g_Angle -= speed * 2;
if (KEY_DOWN(VK_RIGHT)) g_Angle += speed * 2;
rad_xz = float (3.13149 * g_Angle/180.0f);
if (KEY_DOWN(33)) g_elev += 0.2f;
if (KEY_DOWN(34)) g_elev -= 0.2f;
if (g_elev < -100) g_elev = -100;
if (g_elev > 100) g_elev = 100;
if (KEY_DOWN(VK_UP))
{ g_eye[2] += sin(rad_xz) * speed;
g_eye[0] += cos(rad_xz) * speed;
}
if (KEY_DOWN(VK_DOWN))
{ g_eye[2] -= sin(rad_xz) * speed;
g_eye[0] -= cos(rad_xz) * speed;
}
if (g_eye[0]<-(MAP*2-20)) g_eye[0]= -(MAP*2-20);
if (g_eye[0]> (MAP*2-20)) g_eye[0]= (MAP*2-20);
if (g_eye[2]<-(MAP*2-20)) g_eye[2]= -(MAP*2-20);
if (g_eye[2]> (MAP*2-20)) g_eye[2]= (MAP*2-20);
g_eye[1] =1.8;

g_look[0] = float(g_eye[0] + 100*cos(rad_xz));
g_look[2] = float(g_eye[2] + 100*sin(rad_xz));
g_look[1] = g_eye[1];

gluLookAt(g_eye[0],g_eye[1],g_eye[2],g_look[0],g_look[1]+g_elev,g_look[2],0.0,1.0,0.0);
return TRUE;
}
GLvoid baiscobj::DrawGround()
{
glPushAttrib(GL_CURRENT_BIT);
glPushMatrix();

glColor3f(0.5f, 0.7f, 1.0f);
glTranslatef(0,0,0);
int size0=(int)(MAP*2);
glBegin(GL_LINES);
for (int x = -size0; x < size0;x+=4)
{glVertex3i(x, 0, -size0); glVertex3i(x, 0, size0);}
for (int z = -size0; z < size0;z+=4)
{glVertex3i(-size0, 0, z); glVertex3i( size0, 0, z);}
glEnd();

glPopMatrix();
glDisable(GL_BLEND);
glPopAttrib();
}
_____________________________________________________________
1,KEY_DOWN(33)//这个检测那个键?




if (KEY_DOWN(33)) g_elev += 0.2f;
if (KEY_DOWN(34)) g_elev -= 0.2f;
if (g_elev < -100) g_elev = -100;
if (g_elev > 100) g_elev = 100;
if (KEY_DOWN(VK_UP))
{ g_eye[2] += sin(rad_xz) * speed;
g_eye[0] += cos(rad_xz) * speed;
}
if (KEY_DOWN(VK_DOWN))
{ g_eye[2] -= sin(rad_xz) * speed;
g_eye[0] -= cos(rad_xz) * speed;
}
if (g_eye[0]<-(MAP*2-20)) g_eye[0]= -(MAP*2-20);
if (g_eye[0]> (MAP*2-20)) g_eye[0]= (MAP*2-20);
if (g_eye[2]<-(MAP*2-20)) g_eye[2]= -(MAP*2-20);
if (g_eye[2]> (MAP*2-20)) g_eye[2]= (MAP*2-20);

______________________________________________________
2,这一段的代码不用解释,想知道这样写的数学原理,,,,,,

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-8-8 13:06:00 | 显示全部楼层

Re:想知道这样写的数学原理

晕,直接写数字。。。这个。。。msdn好像也没给出对应的数值啊,
从代码看是调整观察点的y坐标的,上仰,下仰,那么猜测也许是pageup,pagedown,
呵呵,你试试都按一遍算了。


rad_ 表示弧度

// 上仰,下仰
if (KEY_DOWN(33)) g_elev += 0.2f;
if (KEY_DOWN(34)) g_elev -= 0.2f;
// 限制,避免仰角过大
if (g_elev < -100) g_elev = -100;
if (g_elev > 100) g_elev = 100;
//绕y轴正向旋转
if (KEY_DOWN(VK_UP))
{ g_eye[2] += sin(rad_xz) * speed;
g_eye[0] += cos(rad_xz) * speed;
}
//绕y轴反向旋转
if (KEY_DOWN(VK_DOWN))
{ g_eye[2] -= sin(rad_xz) * speed;
g_eye[0] -= cos(rad_xz) * speed;
}
// 限制视点范围
if (g_eye[0]<-(MAP*2-20)) g_eye[0]= -(MAP*2-20);
if (g_eye[0]> (MAP*2-20)) g_eye[0]= (MAP*2-20);
if (g_eye[2]<-(MAP*2-20)) g_eye[2]= -(MAP*2-20);
if (g_eye[2]> (MAP*2-20)) g_eye[2]= (MAP*2-20);

这样就清楚用了什么数学原理了吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 13:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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