OpenGL在打开窗口时导致问题

wwtsj6pe  于 2024-01-07  发布在  其他
关注(0)|答案(1)|浏览(219)

我的代码没有正确打开窗口,它只是向我显示空白页

  1. #include <iostream>
  2. #define GLEW_STATIC
  3. #include <GL/glew.h>
  4. #include <GLFW/glfw3.h>
  5. #include <glm/glm.hpp>
  6. #include <glm/gtc/matrix_transform.hpp>
  7. #include <glm/gtc/type_ptr.hpp>
  8. #include <glm/gtx/matrix_interpolation.hpp>
  9. #include <glm/gtc/constants.hpp>
  10. #include "shader.h"
  11. // Function to create a shader program
  12. GLuint createShaderProgram(const char* vertexShaderPath, const char* fragmentShaderPath) {
  13. return initShader(vertexShaderPath, fragmentShaderPath);
  14. }
  15. // Function to create a VAO and VBO for a shape
  16. GLuint createShapeVAO(const GLfloat* vertices, GLsizei vertexCount) {
  17. GLuint VAO, VBO;
  18. glGenVertexArrays(1, &VAO);
  19. glGenBuffers(1, &VBO);
  20. glBindVertexArray(VAO);
  21. glBindBuffer(GL_ARRAY_BUFFER, VBO);
  22. glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * vertexCount, vertices, GL_STATIC_DRAW);
  23. // Set up vertex attributes
  24. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);
  25. glEnableVertexAttribArray(0);
  26. glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
  27. glEnableVertexAttribArray(1);
  28. glBindVertexArray(0);
  29. return VAO;
  30. }
  31. // Function to render a shape
  32. void renderShape(GLuint shaderProgram, GLuint VAO, GLsizei vertexCount, const glm::mat4& transform) {
  33. glUseProgram(shaderProgram);
  34. GLint transformLoc = glGetUniformLocation(shaderProgram, "transform");
  35. glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(transform));
  36. glBindVertexArray(VAO);
  37. glDrawArrays(GL_TRIANGLES, 0, vertexCount);
  38. glBindVertexArray(0);
  39. }
  40. int main(void) {
  41. //++++create a glfw window+++++++++++++++++++++++++++++++++++++++
  42. GLFWwindow* window;
  43. if (!glfwInit()) //Initialize the library
  44. return -1;
  45. window = glfwCreateWindow(640, 640, "OpenGL Window", NULL, NULL);
  46. if (!window)
  47. {
  48. glfwTerminate();
  49. return -1;
  50. }
  51. glfwMakeContextCurrent(window);//Make the window's context current
  52. //++++Initialize GLEW to setup the OpenGL Function pointers+++++++
  53. glewExperimental = GL_TRUE;
  54. glewInit();
  55. //++++Define the viewport dimensions++++++++++++++++++++++++++++
  56. glViewport(0, 0, 640, 640);
  57. GLuint shaderProgram = createShaderProgram("vert.glsl", "frag.glsl");
  58. // Define vertices for the triangle and square
  59. GLfloat vertices_DarkPinktriangle[] = {
  60. -0.4f, 0.4f, 0.0f, 170.0f / 255.0f, 51.0f / 255.0f, 106.0f / 255.0f, // Left
  61. 0.4f, 0.4f, 0.0f, 170.0f / 255.0f, 51.0f / 255.0f, 106.0f / 255.0f, // Right
  62. 0.0f, 0.0f, 0.0f, 170.0f / 255.0f, 51.0f / 255.0f, 106.0f / 255.0f, // Top
  63. };
  64. // Create VAOs for the shapes
  65. GLuint VAO_DarkPinktriangle = createShapeVAO(vertices_DarkPinktriangle, 3);
  66. //GLuint VAO_Greensquare = createShapeVAO(vertices_Greensquare, 4);
  67. // Initialize transformation matrices
  68. glm::mat4 transform_DarkPinktriangle = glm::mat4(1.0f);
  69. //glm::mat4 transform_Greensquare = glm::mat4(1.0f);
  70. // Main rendering loop
  71. while (!glfwWindowShouldClose(window)) {
  72. glfwPollEvents();
  73. glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
  74. glClear(GL_COLOR_BUFFER_BIT);
  75. // Render the triangle
  76. transform_DarkPinktriangle = glm::translate(transform_DarkPinktriangle, glm::vec3(0.0f, 0.0f, 0.0f));
  77. renderShape(shaderProgram, VAO_DarkPinktriangle, 3, transform_DarkPinktriangle);
  78. }
  79. // Cleanup
  80. glDeleteVertexArrays(1, &VAO_DarkPinktriangle);
  81. //glDeleteVertexArrays(1, &VAO_Greensquare);
  82. glDeleteProgram(shaderProgram);
  83. glfwTerminate();
  84. return 0;
  85. }

字符串
我期待一个红色三角形将显示在屏幕上,但我看到的是一个空白的白色屏幕,Visual Studio显示没有错误,问题不在于我的着色器文件或任何其他文件,因为它与类似的代码,它只是这种格式,它使我头痛

2wnc66cl

2wnc66cl1#

永远不要交换帧缓冲区,在renderShape调用之后添加glfwSwapBuffers(window);

相关问题