OpenGL: треугольники не отображаются с добавленным цветовым массивом ⇐ C++
OpenGL: треугольники не отображаются с добавленным цветовым массивом
GLfloat vertices[] = { 0.0ф, 0.0ф, 0.0ф, 1.0ф, 0.0ф, 0.0ф, 0.0ф, 1.0ф, 0.0ф }; Цвета GLfloat[] = { 1.0ф, 1.0ф, 0.0ф, 1.0ф, 0.0ф, 0.0ф, 0.0ф, 0.0ф, 1.0ф }; void renderloop (GLuint vao, GLuint vbo, GLuint colorBuffer) { glBindBuffer (GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(вершины), вершины, GL_STATIC_DRAW); glBindBuffer (GL_ARRAY_BUFFER, colorBuffer); glBufferData (GL_ARRAY_BUFFER, sizeof (цвета), цвета, GL_STATIC_DRAW); // Цикл рендеринга // Очищаем экран glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Рисуем треугольник glDrawArrays (GL_TRIANGLES, 0, 3); глФиниш(); } недействительный рендер() { статическое число кадров = 0; printf("%d количество кадров\n", количество кадров); ГЛуинт вао; ГЛуинт вбо; GLuint colorBuffer; //можно поставить if для инициализации на основе первого выделения если (количество кадров == 0) { // Объект массива вершин glGenVertexArrays(1, &vao); glBindVertexArray (вао); // Объект буфера вершин glGenBuffers(1, &vbo); glBindBuffer (GL_ARRAY_BUFFER, vbo); // Указатели атрибутов вершин (позиции) glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL); // Указатели атрибутов вершин (цвета) glGenBuffers(1, &colorBuffer); glBindBuffer (GL_ARRAY_BUFFER, colorBuffer); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL); glEnableVertexAttribArray (0); // Местоположение атрибута вершины 0 (позиции) glEnableVertexAttribArray (1); // Местоположение атрибута вершины 1 (цвета) glBufferData(GL_ARRAY_BUFFER, sizeof(вершины), вершины, GL_STATIC_DRAW); glBufferData (GL_ARRAY_BUFFER, sizeof (цвета), цвета, GL_STATIC_DRAW); // Включаем массив атрибутов вершин для цвета // Отвязываем VAO, чтобы предотвратить случайные изменения //glBindVertexArray(0); } количество кадров+=1; renderloop (vao, vbo, colorBuffer); количество кадров++; } // Основная функция недействительный основной (недействительный) { // Инициализируем GLFW глфвинит(); // Создаем окно GLFWwindow *window = glfwCreateWindow(640, 480, «Треугольник OpenGL», NULL, NULL); если (окно == NULL) { glfwTerminate(); возвращаться; } // Делаем окно текущим контекстом glfwMakeContextCurrent (окно); for(int i=0;i
GLfloat vertices[] = { 0.0ф, 0.0ф, 0.0ф, 1.0ф, 0.0ф, 0.0ф, 0.0ф, 1.0ф, 0.0ф }; Цвета GLfloat[] = { 1.0ф, 1.0ф, 0.0ф, 1.0ф, 0.0ф, 0.0ф, 0.0ф, 0.0ф, 1.0ф }; void renderloop (GLuint vao, GLuint vbo, GLuint colorBuffer) { glBindBuffer (GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(вершины), вершины, GL_STATIC_DRAW); glBindBuffer (GL_ARRAY_BUFFER, colorBuffer); glBufferData (GL_ARRAY_BUFFER, sizeof (цвета), цвета, GL_STATIC_DRAW); // Цикл рендеринга // Очищаем экран glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Рисуем треугольник glDrawArrays (GL_TRIANGLES, 0, 3); глФиниш(); } недействительный рендер() { статическое число кадров = 0; printf("%d количество кадров\n", количество кадров); ГЛуинт вао; ГЛуинт вбо; GLuint colorBuffer; //можно поставить if для инициализации на основе первого выделения если (количество кадров == 0) { // Объект массива вершин glGenVertexArrays(1, &vao); glBindVertexArray (вао); // Объект буфера вершин glGenBuffers(1, &vbo); glBindBuffer (GL_ARRAY_BUFFER, vbo); // Указатели атрибутов вершин (позиции) glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL); // Указатели атрибутов вершин (цвета) glGenBuffers(1, &colorBuffer); glBindBuffer (GL_ARRAY_BUFFER, colorBuffer); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL); glEnableVertexAttribArray (0); // Местоположение атрибута вершины 0 (позиции) glEnableVertexAttribArray (1); // Местоположение атрибута вершины 1 (цвета) glBufferData(GL_ARRAY_BUFFER, sizeof(вершины), вершины, GL_STATIC_DRAW); glBufferData (GL_ARRAY_BUFFER, sizeof (цвета), цвета, GL_STATIC_DRAW); // Включаем массив атрибутов вершин для цвета // Отвязываем VAO, чтобы предотвратить случайные изменения //glBindVertexArray(0); } количество кадров+=1; renderloop (vao, vbo, colorBuffer); количество кадров++; } // Основная функция недействительный основной (недействительный) { // Инициализируем GLFW глфвинит(); // Создаем окно GLFWwindow *window = glfwCreateWindow(640, 480, «Треугольник OpenGL», NULL, NULL); если (окно == NULL) { glfwTerminate(); возвращаться; } // Делаем окно текущим контекстом glfwMakeContextCurrent (окно); for(int i=0;i
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Треугольники не отображаются должным образом из-за плохих индексов [закрыто]
Anonymous » » в форуме C++ - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-