2013-03-31 53 views
0

我認爲這將是簡單而直接的,但事實並非如此。我在openGL應用程序中有一個攝像頭,我將顯示的圖像分別轉換爲攝像頭「位置」。位置改變了向上向下。相機可使用左轉右轉。當相機旋轉時,前進和後退運動應該不同。這是我已經決定了:分別將相機移動到其位置

//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; 
    } 

原來的旋轉度,但sin()math.h接受弧度。我將結果加1以得到0-2之間的結果。然後,我將sincos幅度從2改爲1,當我將結果除以2時。
這意味着 - 當相機的視角爲0,90,180,270或360度時,函數應返回0-1值。我對嗎?
開頭的0.5就是移動速度。

回答

0

我不認爲你想要的sin/cos輸出是範圍爲0 - 1

如果你想生成特定方向的運動矢量,那麼你需要在原點周圍生成圓點,這正是您在應用比例和偏移量之前所擁有的點。相反,你會產生圍繞該點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 

請注意,您只能在一個象限中產生的方向(因爲你的結果是總是積極的),而且他們都不是你想要的。

+0

謝謝你讓我明白這一點。看起來OpenGL世界有點扭曲,所以我必須做'sin(360角)'才能得到理想的結果。 –

相關問題