簡體   English   中英

在OpenGL中移動相機

[英]Moving Camera in OpenGL

我正在用OpenGL渲染地形。 我的代碼如下:

void Render_Terrain(int k)
{
    GLfloat angle = (GLfloat) (k/40 % 360);

    //PROJECTION
    glm::mat4 Projection = glm::perspective(45.0f, 1.0f, 0.1f, 100.0f);

    //VIEW
    glm::mat4 View = glm::mat4(1.);

    //ROTATION
    //View = glm::rotate(View, angle * -0.1f, glm::vec3(1.f, 0.f, 0.f));
    //View = glm::rotate(View, angle * 0.2f, glm::vec3(0.f, 1.f, 0.f));
    //View = glm::rotate(View, angle * 0.9f, glm::vec3(0.f, 0.f, 1.f));

    View = glm::translate(View, glm::vec3(0.f,0.f, -4.0f)); // x, y, z position ? 

    //MODEL
    glm::mat4 Model = glm::mat4(1.0);

    glm::mat4 MVP = Projection * View * Model;
    glUniformMatrix4fv(glGetUniformLocation(shaderprogram, "MVP_matrix"), 1, GL_FALSE, glm::value_ptr(MVP));

    //Transfer additional information to the vertex shader 
    glm::mat4 MV = Model * View;
    glUniformMatrix4fv(glGetUniformLocation(shaderprogram, "MV_matrix"), 1, GL_FALSE, glm::value_ptr(MV));

    glClearColor(0.0, 0.0, 0.0, 1.0);

    glDrawArrays(GL_LINE_STRIP, terrain_start, terrain_end );

}

我可以繞X,Y,Z軸旋轉,縮放地形,但是找不到移動相機的方法。 我正在使用OpenGL 3+,對圖形有點陌生。

最好的移動照相機的方法是使用gluLookAt(),它可以模擬照相機的移動,因為照相機無法移動。 該函數有9個參數。 前3個是相機准確定位的眼睛的XYZ坐標。 后三個參數是中心的XYZ坐標,即相機從眼睛看到的點。 它始終將成為屏幕的中心。 第三個參數是UP向量的XYZ坐標,該向量從眼睛垂直向上指向。 通過操縱這3個XYZ坐標,您可以模擬所需的任何相機運動。

查看此鏈接

更多詳情:

-例如,如果要圍繞對象旋轉,則將眼睛圍繞上矢量旋轉。 -如果要向前或向后移動,請在眼睛上加上或減去中心點。 -如果要向左或向右傾斜相機,請在外觀向量為中心-眼睛的情況下圍繞外觀向量旋轉上向量。

gluLookAt在不贊成使用的固定功能管道上運行,因此應改用glm :: lookAt。

您當前正在使用常量向量進行翻譯。 在注釋掉的代碼(我假設您用來測試旋轉)中,您使用angle來調整旋轉。 您應該有一個類似的變量進行翻譯。 然后,您可以將glm::translate調用更改為:

View = glm::translate(View, glm::vec3(x_transform, y_transform, z_transform)); // x, y, z position ?  

並獲得翻譯。

您可能應該將多個參數傳遞到Render_Terrain ,因為平移和旋轉至少需要六個參數。

在OpenGL中,相機始終處於(0,0,0)。 您需要將矩陣模式設置為GL_MODELVIEW,然后使用glTranslate,glRotate,glLoadMatrix等修改或設置模型/視圖矩陣,以使攝像機看起來已經移動了。 如果您使用的是GLU,則可以使用gluLookAt將相機指向特定的方向。

暫無
暫無

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

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