簡體   English   中英

OpenGL第一人稱寫實鍵盤運動

[英]OpenGL first person realistic keyboard movement

所以我正在制作這款 FPS 游戲,我想通過鍵盤輸入向前、向后、向左和向右移動,並像在真正的 FPS 游戲(如戰地)中一樣用相機環顧四周。 相機移動與鍵盤輸入相結合效果很好,但現在我的相機可以飛來飛去。 而且我只是希望能夠留在“地面”上並向前,向后,向左和向右移動,同時向上或向下看,就像在戰場游戲中一樣,而不是飛來飛去(就像 no-clip 那樣)。 現在,如果我向下或向上看並在鍵盤上向前按,我可以“飛”,但我不希望這種情況發生。

我的一個朋友建議使用類似這樣的方式轉發到 go。

Position += glm::vec3(glm::cos(Yaw), glm::sin(Yaw), 0) * velocity

代替:

Position += Front * velocity;

但我不完全明白這將如何運作?

這是當前的鍵盤輸入代碼:

void Camera::ProcessKeyboard(Camera_Movement direction, float deltaTime)
{
float velocity = MovementSpeed * deltaTime;
if (direction == FORWARD)
    Position += Front * velocity;
if (direction == BACKWARD)
    Position -= Front * velocity;
if (direction == LEFT)
    Position -= Right * velocity;
if (direction == RIGHT)
    Position += Right * velocity;
}

提示或幫助將不勝感激。 是的,這段代碼來自 LearnOpenGL,com 我們在這里所做的是試圖通過反向移動場景中的所有對象來模擬運動。 給人一種我們正在移動的錯覺。

要使相機保持在地面上,只需不要上下移動它即可。

是的,相機上下移動的部分? 您是編寫該代碼的人。 刪除它。

你沒有說這個Front向量來自哪里。 它來自一個考慮俯仰和偏航的地方。 刪除音調部分。

你朋友的建議glm::vec3(glm::cos(Yaw), glm::sin(Yaw), 0)是一種僅使用偏航來計算Front的方法。

隨着您的游戲變得更高級,您還可以實現跳躍和重力,因此玩家可以在有限的范圍內上下移動 go。

我要感謝大家幫助我。 我現在更好地理解一切是如何工作的,我想在 xz 平面中移動並且 y 必須為零(是的,我選擇 Y 軸作為“向上”或“天空”)。 因為我不想讓相機上下移動。 所以當我 go 轉發時我只想改變 glm 向量的 x 和 z 參數!

void Camera::ProcessKeyboard(Camera_Movement direction, float deltaTime)
{
    float velocity = MovementSpeed * deltaTime;
    if (direction == FORWARD) {
        // glm::vec3(X,Y,Z)!!! we only want to change the X-Z position
        Position += glm::vec3(glm::cos(glm::radians(Yaw)), 0, glm::sin(glm::radians(Yaw))) * velocity; //Y is not affected, Y is looking up
    }
    if (direction == BACKWARD) {
        // glm::vec3(X,Y,Z)!!! we only want to change the X-Z position
        Position -= glm::vec3(glm::cos(glm::radians(Yaw)), 0, glm::sin(glm::radians(Yaw))) * velocity; //Y is not affected, Y is looking up
    }
    if (direction == LEFT) {
        Position -= Right * velocity;
    }
    if (direction == RIGHT) {
        Position += Right * velocity;
    }

}

現在一切正常!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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