簡體   English   中英

如何應用位置轉換

[英]How to apply position transformation

如何通過着色器在世界中應用繪圖位置?

我的頂點着色器看起來像這樣:

in vec2 position;

uniform mat4x4 model;
uniform mat4x4 view;
uniform mat4x4 projection;

void main() {
    gl_Position = projection * view * model * vec4(position, 0.0, 1.0);
}

其中position是三角形頂點的位置。

我按如下方式綁定矩陣。

觀點

glm::mat4x4 view = glm::lookAt(
                    glm::vec3(0.0f, 1.2f, 1.2f),    // camera position
                    glm::vec3(0.0f, 0.0f, 0.0f),    // camera target
                    glm::vec3(0.0f, 0.0f, 1.0f));   // camera up axis
GLint view_uniform = glGetUniformLocation(shader, "view");
glUniformMatrix4fv(view_uniform, 1, GL_FALSE, glm::value_ptr(view));

投影

glm::mat4x4 projection = glm::perspective(80.0f, 640.0f/480.0f, 0.1f, 100.0f);
GLint projection_uniform = glGetUniformLocation(shader, "projection");
glUniformMatrix4fv(projection_uniform, 1, GL_FALSE, glm::value_ptr(projection));

模型轉換

glm::mat4x4 model;
model = glm::translate(model, glm::vec3(1.0f, 0.0f, 0.0f));
model = glm::rotate(model, static_cast<float>((glm::sin(currenttime)) * 360.0), glm::vec3(0.0, 0.0, 1.0));
GLint trans_uniform = glGetUniformLocation(shader, "model");
glUniformMatrix4fv(trans_uniform, 1, GL_FALSE, glm::value_ptr(model));

所以這種方式我必須計算CPU上每幀的位置變換。 這是推薦的方式還是有更好的方式?

所以這種方式我必須計算CPU上每幀的位置變換。 這是推薦的方式還是有更好的方式?

是。 為CPU上的網格計算一次新變換,然后將其應用於頂點着色器內網格內的所有頂點,這不會是一個非常慢的操作,需要在每一幀完成。

render()方法中,您通常會執行以下操作

  • 為相機創建矩陣(通常每幀一次)
  • 對於場景中的每個對象:
    • 創建轉換(位置)矩陣
    • 畫對象

每個windowResize可以創建一次投影矩陣,或者為相機創建矩陣時。

答: 您的代碼很好 ,它是繪制/更新對象的基本方法。

您可以進入一些自動管理它的框架/系統。 你不應該(現在)關注那些矩陣創建程序的性能......它非常快。 繪圖更成問題。

正如jozxyqk在一篇評論中所寫,你可以創建ModelViewProjMatrix並發送一個組合矩陣而不是三個不同的矩陣。

暫無
暫無

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

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