Quad Object не отображается на экране ⇐ C++
-
Anonymous
Quad Object не отображается на экране
#include #include #include #include #include #include const char* vertexShaderSource = "ядро #версия 330\n" "макет (расположение = 0) в vec3 aPos;\n" "макет (расположение = 1) в vec3 aColor;" "out vec3 vertexColour;\n" "void main()\n" "{\n" "gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n" "vertexColour = aColor;\n" "}\0"; const char* фрагментShaderSource = "ядро #версия 330\n" "out vec4 FragColor;\n" "в vec3 vertexColour;\n" "void main()\n" "{\n" " FragColor = vec4(vertexColour,1.0f);\n" "}\n\0"; // отображаемые классы класс Рендеринг { }; класс Quad: public Render { публика: беззнаковое целое число ВАО; беззнаковое целое число VBO; беззнаковое целое число IBO; вершины с плавающей запятой[24] = { -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 0.0f, // нижний левый индекс -- 0 0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 0.0f, // нижний правый индекс -- 1 -0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, // верхний левый индекс -- 2 0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, // верхний правый индекс -- 3 }; беззнаковые целочисленные индексы[6] = { 0,1,2, 1,3,2 }; недействительный конструктивВАО () { glGenVertexArrays(1, &VAO); glBindVertexArray (0); конструкцияВБО(); // Привязываем VBO конструктИБО(); // Привязываем IBO // позиция ВАО glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0); glEnableVertexAttribArray (0); // цвет ВАО glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float))); glEnableVertexAttribArray (1); }; недействительный конструктивVBO () { glGenBuffers(1, &VBO); glBindBuffer (GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(вершины), вершины, GL_STATIC_DRAW); }; недействительный конструктивIBO () { glGenBuffers(1, &IBO); glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, IBO); glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (индексы), индексы, GL_STATIC_DRAW); } недействительный quadForge() { конструкцияВБО(); конструктИБО(); построитьВАО(); } }; интервал основной() { глфвинит(); glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); Окно GLFWwindow* = glfwCreateWindow(1920, 1080, "тест", NULL, NULL); glfwMakeContextCurrent (окно); радLoadGL(); glViewport (0, 0, 1920, 1080); glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear (GL_COLOR_BUFFER_BIT); беззнаковый int vertexShader; vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); glCompileShader(vertexShader); беззнаковый int фрагментШейдер; фрагментШадер = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource (fragmentShader, 1, &fragmentShaderSource, NULL); glCompileShader (fragmentShader); беззнаковое целое число шейдерной программы; ShaderProgram = glCreateProgram(); glAttachShader (shaderProgram, vertexShader); glAttachShader (shaderProgram, фрагментШадер); glLinkProgram (шейдерная программа); Четверной квадро1; quad1.quadForge(); glfwSwapBuffers (окно); while (!glfwWindowShouldClose(окно)) { glfwPollEvents(); glClear (GL_COLOR_BUFFER_BIT); glUseProgram (шейдерная программа); glDrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glfwSwapBuffers (окно); } glfwDestroyWindow (окно); glfwTerminate(); } Я создал класс Quad и инициализировал объект для рендеринга. Однако он просто ничего не отображает на экране, но это было до помещения этого в объект.
У меня есть эти предупреждения
Код серьезности Описание Состояние подавления строки файла проекта Предупреждение C26495 Переменная Quad::IBO не инициализирована. Всегда инициализируйте переменную-член (тип.6). OpenGLProject C:\\Users\\intel\\source\\repos\\OpenGLProject\\main.cpp 79 Предупреждение C26495 Переменная Quad::VAO не инициализирована. Всегда инициализируйте переменную-член (тип.6). OpenGLProject C:\\Users\\intel\\source\\repos\\OpenGLProject\\main.cpp 79 Предупреждение C26495 Переменная Quad::VBO не инициализирована. Всегда инициализируйте переменную-член (тип.6). OpenGLProject C:\\Users\\intel\\source\\repos\\OpenGLProject\\main.cpp 79 (хотя переменные инициализированы)
Я пытался сначала вернуть VAO из функции, а затем назначить их, но все это не дало результатов.
#include #include #include #include #include #include const char* vertexShaderSource = "ядро #версия 330\n" "макет (расположение = 0) в vec3 aPos;\n" "макет (расположение = 1) в vec3 aColor;" "out vec3 vertexColour;\n" "void main()\n" "{\n" "gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n" "vertexColour = aColor;\n" "}\0"; const char* фрагментShaderSource = "ядро #версия 330\n" "out vec4 FragColor;\n" "в vec3 vertexColour;\n" "void main()\n" "{\n" " FragColor = vec4(vertexColour,1.0f);\n" "}\n\0"; // отображаемые классы класс Рендеринг { }; класс Quad: public Render { публика: беззнаковое целое число ВАО; беззнаковое целое число VBO; беззнаковое целое число IBO; вершины с плавающей запятой[24] = { -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 0.0f, // нижний левый индекс -- 0 0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 0.0f, // нижний правый индекс -- 1 -0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, // верхний левый индекс -- 2 0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, // верхний правый индекс -- 3 }; беззнаковые целочисленные индексы[6] = { 0,1,2, 1,3,2 }; недействительный конструктивВАО () { glGenVertexArrays(1, &VAO); glBindVertexArray (0); конструкцияВБО(); // Привязываем VBO конструктИБО(); // Привязываем IBO // позиция ВАО glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0); glEnableVertexAttribArray (0); // цвет ВАО glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float))); glEnableVertexAttribArray (1); }; недействительный конструктивVBO () { glGenBuffers(1, &VBO); glBindBuffer (GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(вершины), вершины, GL_STATIC_DRAW); }; недействительный конструктивIBO () { glGenBuffers(1, &IBO); glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, IBO); glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (индексы), индексы, GL_STATIC_DRAW); } недействительный quadForge() { конструкцияВБО(); конструктИБО(); построитьВАО(); } }; интервал основной() { глфвинит(); glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); Окно GLFWwindow* = glfwCreateWindow(1920, 1080, "тест", NULL, NULL); glfwMakeContextCurrent (окно); радLoadGL(); glViewport (0, 0, 1920, 1080); glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear (GL_COLOR_BUFFER_BIT); беззнаковый int vertexShader; vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); glCompileShader(vertexShader); беззнаковый int фрагментШейдер; фрагментШадер = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource (fragmentShader, 1, &fragmentShaderSource, NULL); glCompileShader (fragmentShader); беззнаковое целое число шейдерной программы; ShaderProgram = glCreateProgram(); glAttachShader (shaderProgram, vertexShader); glAttachShader (shaderProgram, фрагментШадер); glLinkProgram (шейдерная программа); Четверной квадро1; quad1.quadForge(); glfwSwapBuffers (окно); while (!glfwWindowShouldClose(окно)) { glfwPollEvents(); glClear (GL_COLOR_BUFFER_BIT); glUseProgram (шейдерная программа); glDrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glfwSwapBuffers (окно); } glfwDestroyWindow (окно); glfwTerminate(); } Я создал класс Quad и инициализировал объект для рендеринга. Однако он просто ничего не отображает на экране, но это было до помещения этого в объект.
У меня есть эти предупреждения
Код серьезности Описание Состояние подавления строки файла проекта Предупреждение C26495 Переменная Quad::IBO не инициализирована. Всегда инициализируйте переменную-член (тип.6). OpenGLProject C:\\Users\\intel\\source\\repos\\OpenGLProject\\main.cpp 79 Предупреждение C26495 Переменная Quad::VAO не инициализирована. Всегда инициализируйте переменную-член (тип.6). OpenGLProject C:\\Users\\intel\\source\\repos\\OpenGLProject\\main.cpp 79 Предупреждение C26495 Переменная Quad::VBO не инициализирована. Всегда инициализируйте переменную-член (тип.6). OpenGLProject C:\\Users\\intel\\source\\repos\\OpenGLProject\\main.cpp 79 (хотя переменные инициализированы)
Я пытался сначала вернуть VAO из функции, а затем назначить их, но все это не дало результатов.
Мобильная версия