多年后我又回到了c ++编程,无论如何在大学只有几个模块我的经验..所以请耐心等待。
我尝试使用以下功能围绕中心运行观察点:
void Orbit(Mundo* m)
{
float d = sqrt((m->camposx * m->camposx) + (m->camposz * m->camposz));
float theta = ((atan2(m->camposx, m->camposz)) * 180) / PI;
theta += 1;
float thetarad = theta * 3.14159 / 180;
m->camposx = d*cos(thetarad);
m->camposz = d*sin(thetarad);
}
但不是那样,原始点和第一个增量之间的振荡。那个操作系统应该移动,但后来又回来了。
我很确定我在使用该函数时遇到了一些错误,但我在此处粘贴代码的相关位以防万一。
以前我已声明:
struct Mundo
{
float camposx;
float camposy;
float camposz;
};
和instanced:
Mundo mundo = {50, 50, 50};
并回忆:
void OnDraw(void){
.....
gluLookAt ( mundo.camposx, mundo.camposy, mundo.camposz, // posicion del ojo
0.0, 0, 0.0, // hacia que punto mira (0,0,0)
0.0, 1.0, 0.0);
.....
}
void OnTimer(int value)
{
.....
Orbit(&mundo);
.....
}
我知道我还没有上课,我正在学习本教程,这是最初的课程之一。下一章将介绍Clases。此外,有些条款可以更直接地进行,但我现在只是把事情弄清楚了。
任何帮助非常感谢。谢谢!
PS:我试过调试但是当涉及到以下几行时它会停止并询问.dll文件的某个位置而不知道该怎么办..
void OnTimer(int value)
{
....
glutTimerFunc(1000,OnTimer,0);
glutPostRedisplay();
....
}
答案 0 :(得分:0)
当我切换atan2的参数时,它不会振荡。所以你的数学有点错误。
如果P =(x = 10,y = 1),则在XY平面上,角度应为几度。你的atan2(x,y)给出了arctan(10)= 84deg。 atan2(y,x)= arctan(1/10)= 5度