簡體   English   中英

將相機分別移動到其位置

[英]Moving camera respectively to its location

我認為這將是簡單明了的,但事實並非如此。 我在openGL應用程序中有一個攝像頭,並將顯示的圖像分別轉換為攝像頭的“位置”。 位置由UpDown更改。 可以使用向左向右旋轉相機。 旋轉相機時,前進和后退運動應不同。 這是我組成的:

  //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,即可將sincos幅度從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM