[英]Moving camera respectively to its location
我認為這將是簡單明了的,但事實並非如此。 我在openGL應用程序中有一個攝像頭,並將顯示的圖像分別轉換為攝像頭的“位置”。 位置由Up和Down更改。 可以使用向左和向右旋轉相機。 旋轉相機時,前進和后退運動應不同。 這是我組成的:
//Somewhere in event handler switch
else if (key == GLUT_KEY_UP|| key == GLUT_KEY_DOWN) {
char direction = key==GLUT_KEY_UP?1:-1; //Whether it is forward or backward movement
std::cout<<"Moving camera in direction "<<(int)direction<<" with angle "<<rotate_y<<'\n';
std::cout<<" - this means X is multiplied by "<<((sin((rotate_y/180)*M_PI)+1)/2)<<'\n';
camera_x += 0.5*((sin((rotate_y/180)*M_PI)+1)/2)*direction;
camera_z += 0.5*((cos((rotate_y/180)*M_PI)+1)/2)*direction;
}
原始旋轉單位為度,但是math.h
sin()
接受弧度。 我在結果中加1以得到0-2之間的結果。 然后將結果除以2,即可將sin
或cos
幅度從2更改為1。
這意味着-當攝像機以0、90、180、270或360度注視時,這些功能應返回0-1值。 我對嗎?
開頭的0.5只是運動速度。
我認為您不希望sin
/ cos
的輸出在sin
的范圍內。
如果要在特定方向上生成運動矢量,則需要在原點周圍的圓中生成點,這恰好是在應用比例和偏移之前所具有的點。 相反,您圍繞點0.5,0.5生成了一個圓,如果將其用作方向向量,則可能指向錯誤的方向:
Direction Angle Vector Your Vector Actual Direction N 0 0, 1 0.5, 1 ~NNE E 90 1, 0 1 , 0.5 ~ENE S 180 0, -1 0.5, 0 E W 270 -1, 0 0 , 0.5 N
請注意,您只能在一個象限中生成方向(因為您的結果始終為正),並且它們都不是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.