我在我的C OpenGL程序中添加变换。我使用CGLM作为我的数学库。程序没有警告或错误。然而,当我编译和运行程序时,我只是得到了一个用我的透明色着色的窗口。下面是我的程序的主循环
// Initialize variables for framerate counting
double lastTime = glfwGetTime();
int frameCount = 0;
// Program loop
while (!glfwWindowShouldClose(window)) {
// Calculate framerate
double thisTime = glfwGetTime();
frameCount++;
// If a second has passed.
if (thisTime - lastTime >= 1.0) {
printf("%i FPS\n", frameCount);
frameCount = 0;
lastTime = thisTime;
}
processInput(window);
// Clear the window
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// Bind textures on texture units
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
// Create transformations
mat4 transform = {{1.0f}};
glm_translate(transform, (vec3){0.5f, -0.5f, 0.0f});
glm_rotate(transform, (float)glfwGetTime(), (vec3){0.0f, 0.0f, 1.0f});
printf("%i\n", transform);
// Get matrix's uniform location and set matrix
shaderUse(myShaderPtr);
GLint transformLoc = glGetUniformLocation(myShaderPtr->shaderID, "transform");
printf("%i\n", transformLoc);
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, *transform);
glBindVertexArray(VAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glfwSwapBuffers(window); // Swap the front and back buffers
glfwPollEvents(); // Check for events (mouse movement, mouse click, keyboard press, keyboard release etc.)
}
如果你想查看完整的代码,这个程序在github here上。
此程序的输出为
但是,预期的输出是一个旋转框,上面有我的个人资料图片。
1条答案
按热度按时间dgiusagp1#
mat4 transform = {{1.0f}};
不会执行您所期望的操作。C没有像C那样的构造函数。C版本的构造函数使用Identity matrix初始化矩阵。您必须使用glm_mat4_identity
使用单位矩阵进行初始化:第一个
此外,还需要指定并添加一个orthographic projection矩阵,以补偿视口的纵横比:
第一个