我正在嘗試使四邊形圍繞其中心旋轉。我正在使用glm::rotate()并設定四邊形在 z 軸上旋轉。但是,當我這樣做時,它會產生這種奇怪的效果。四邊形拉伸和扭曲。它看起來幾乎是 3d 的,但是因為我圍繞 z 軸旋轉它不應該發生對嗎?
這是背景關系的相關代碼:
float rotation = 0.0f;
double prevTime = glfwGetTime();
while (!glfwWindowShouldClose(window))
{
GLCall(glClearColor(0.0f, 0.0f, 0.0f, 1.0f));
GLCall(glClear(GL_COLOR_BUFFER_BIT));
updateInput(window);
shader.Use();
glUniform1f(xMov, x);
glUniform1f(yMov, y);
test.Bind();
double crntTime = glfwGetTime();
if (crntTime - prevTime >= 1 / 60)
{
rotation = 0.5f;
prevTime = crntTime;
}
glm::mat4 model = glm::mat4(1.0f);
model = glm::rotate(model, glm::radians(rotation), glm::vec3(0.0f, 0.0f, 1.0f));
int modelLoc = glGetUniformLocation(shader.id, "model");
glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
vao.Bind();
vBuffer1.Bind();
iBuffer1.Bind();
GLCall(glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0));
glfwSwapBuffers(window);
glfwPollEvents();
}
著色器:
#version 440 core
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec3 aColor;
layout(location = 2) in vec2 aTex;
out vec3 color;
out vec2 texCoord;
uniform float xMove;
uniform float yMove;
uniform mat4 model;
void main()
{
gl_Position = model * vec4(aPos.x xMove, aPos.y yMove, aPos.z, 1.0);
color = aColor;
texCoord = aTex;
}
uj5u.com熱心網友回復:
如果沒有您顯示圖形輸出,就很難說。
您的第一個問題是,您不是圍繞中心旋轉,要通過中心旋轉,您必須偏移四邊形,使其中心位于 0,0。然后旋轉,然后偏移回原來的位置,但你有這條線:
gl_Position = model * vec4(aPos.x xMove, aPos.y yMove, aPos.z, 1.0);
假設四邊形作為原點開始,您正在圍繞點(-xMove,-yMove)旋轉它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/382474.html
