我在我的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_mat4_identity(transform);
glm_translate(transform, (vec3){0.5f, -0.5f, 0.0f});
glm_rotate(transform, (float)glfwGetTime(), (vec3){0.0f, 0.0f, 1.0f});
// Get matrix's uniform location and set matrix
shaderUse(myShaderPtr);
GLint transformLoc = glGetUniformLocation(myShaderPtr->shaderID, "transform");
// mat4 transform;
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, (float*)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上。
程序的输出如下(正方形也旋转):
然而,该程序的预期输出是在顶部以20%不透明度显示的企鹅和在企鹅下面以100%不透明度显示的框。
2条答案
按热度按时间ldfqzlk81#
在顶点着色器中,纹理坐标的位置是1:
但是,当您指定顶点时,位置1用于颜色属性,位置2用于文字坐标:
移除颜色属性并使用位置1作为纹理坐标。例如:
cvxl0en22#
查看源代码,您将传入三个属性(位置、颜色和纹理坐标),但顶点着色器只接受两个属性。
移除颜色属性并将纹理坐标作为属性#1而不是#2传递,应该会使其看起来像预期的那样。