Я пишу программу, используя Qt5 и OpenGL. Это интерактивная 3D-среда, которая позволяет пользователю в любой момент импортировать несколько триангулированных сеток (помимо прочего). Изначально я использовал конвейер с фиксированными функциями, но узнал о шейдерах и хотел бы преобразовать их.
После того, как я преобразовал свой код для использования шейдеров, я столкнулся со странной проблемой, с которой мне пришлось столкнуться. не могу понять, что в приведенном здесь примере кода воспроизводится настолько минимально, насколько это возможно:
Приведенный выше код содержит класс сетки, который содержит данные вершин, нормалей и цветов, а также VBO и VAO, которые я использую для их рендеринга. Там есть функция, которая инициализирует эти объекты.
Существует класс виджетов OpenGL, который обрабатывает рендеринг, который наследуется от QOpenGLWidget и QOpenGLFunctions_3_3_Core. Код содержит два места с комментариями: местоположение 0 и местоположение 1. Они представляют собой разные места, которые инициализируют различные ресурсы сетки. Инициализация в позиции 1 дает ожидаемый результат. Вижу треугольник на экране и все хорошо. Проблема в том, что мне приходится инициализировать сетку внутри функции InitializeGL, которая вызывается в начале программы. Я хочу иметь возможность добавлять сетку в произвольный момент во время выполнения. Чтобы имитировать это, я добавил mousePressEvent, который инициализирует сетку (местоположение 0). Однако при инициализации таким образом я ничего не вижу на экране, а OpenGL выдает ошибку 1282 (недопустимая операция). Похоже, что при инициализации VAO после первого вызова отрисовки (или чего-то еще) VAO больше не действителен.
Для полноты, вот выходные данные терминала для каждого случая:
Место 1:
I AM INITIALIZING THE OPENGL
AAAA
I AM INITIALIZING THE MESH VBOS
drawing
src/main.cpp 64: OpenGL error code: 0
src/main.cpp 66: OpenGL error code: 1282
Я пишу программу, используя Qt5 и OpenGL. Это интерактивная 3D-среда, которая позволяет пользователю в любой момент импортировать несколько триангулированных сеток (помимо прочего). Изначально я использовал конвейер с фиксированными функциями, но узнал о шейдерах и хотел бы преобразовать их. После того, как я преобразовал свой код для использования шейдеров, я столкнулся со странной проблемой, с которой мне пришлось столкнуться. не могу понять, что в приведенном здесь примере кода воспроизводится настолько минимально, насколько это возможно: [code]#include #include #include #include #include #include #include #include
int main(int argc, char *argv[]) { QApplication app(argc, argv); OpenGLWidget widget; widget.setWindowTitle("Rotating Cube"); widget.resize(800, 600); widget.show(); return app.exec(); } [/code] Приведенный выше код содержит класс сетки, который содержит данные вершин, нормалей и цветов, а также VBO и VAO, которые я использую для их рендеринга. Там есть функция, которая инициализирует эти объекты. Существует класс виджетов OpenGL, который обрабатывает рендеринг, который наследуется от QOpenGLWidget и QOpenGLFunctions_3_3_Core. Код содержит два места с комментариями: местоположение 0 и местоположение 1. Они представляют собой разные места, которые инициализируют различные ресурсы сетки. Инициализация в позиции 1 дает ожидаемый результат. Вижу треугольник на экране и все хорошо. Проблема в том, что мне приходится инициализировать сетку внутри функции InitializeGL, которая вызывается в начале программы. Я хочу иметь возможность добавлять сетку в произвольный момент во время выполнения. Чтобы имитировать это, я добавил mousePressEvent, который инициализирует сетку (местоположение 0). Однако при инициализации таким образом я ничего не вижу на экране, а OpenGL выдает ошибку 1282 (недопустимая операция). Похоже, что при инициализации VAO после первого вызова отрисовки (или чего-то еще) VAO больше не действителен. Для полноты, вот выходные данные терминала для каждого случая: Место 1: [code]I AM INITIALIZING THE OPENGL I AM INITIALIZING THE MESH VBOS drawing src/main.cpp 64: OpenGL error code: 0 src/main.cpp 66: OpenGL error code: 0 drawing src/main.cpp 64: OpenGL error code: 0 src/main.cpp 66: OpenGL error code: 0 [/code] (треугольник отображается правильно) Местоположение 0: [code]I AM INITIALIZING THE OPENGL AAAA I AM INITIALIZING THE MESH VBOS drawing src/main.cpp 64: OpenGL error code: 0 src/main.cpp 66: OpenGL error code: 1282 [/code] (на экране ничего) Как это исправить?
Я пишу программу, используя Qt5 и OpenGL. Это интерактивная 3D-среда, которая позволяет пользователю в любой момент импортировать несколько триангулированных сеток (помимо прочего). Изначально я использовал конвейер с фиксированными функциями, но...
Я пытаюсь визуализировать несколько моделей, загруженных из файлов OBJ, с помощью одного VBO с использованием VAO. Помимо VBO у меня есть еще два буфера — CBO (цвета) и IBO (индексы).
import pygame
from pathlib import Path
from pygame.locals import...
Недавно я изучил концепцию шейдера, объекта массива вершин (VAO) и объекта буфера вершин (VBO). При реализации этих концепций в простой игре я столкнулся с проблемой, из-за которой игра вылетала, ничего не отображая.
Каждый прототип объекта имеет...
Я уже некоторое время пытаюсь заставить объект массива отображаться в окне. Похоже, функции GLEW не работают. Результатом должен быть треугольник, отображаемый в окне вывода. Возможно, функции устарели или какая-то функция отсутствует.