Я пытаюсь реализовать однородные координаты в своем средстве 3D-рендеринга после того, как смог визуализировать ортогональную проекцию 3D-куба, используя только матрицы 3x3. Но теперь все пошло не так. В Интернете не так много учебных пособий по этому поводу, но я хочу иметь возможность использовать трехмерные векторы и однородные матрицы для отображения трехмерного куба в окне SFML с использованием перспективной проекции.
Репозиторий GitHub
Что конкретно не так с моим кодом, так это то, что я получаю большие числа для своих вершин (как показано в журнале консоли) и в конечном итоге не вижу куба!
Куб .cpp: функция-конструктор, в которой вершины проекции равны вершинам (функции перемещения и вращения вершин выполняются вне функции проекции экрана и вызываются только один раз перед игровым циклом)
Cube.cpp: функция Screen Projection, которая обрабатывает все умножения трехмерных векторных матриц. Здесь вершины изменяются, а затем в конечном итоге отправляются в p_cube_vertbuff, который представляет собой линейную полосу массива вершин SFML, которая должна отображать 3D-куб.
Я пытался использовать структуры для векторов, создать функцию умножения матриц на вектор и использовать матрицы 4x4 для перспективной проекции, модели для просмотра, преобразований камеры и преобразований куба, которые я нашел. онлайн, но они, похоже, несовместимы с моим кодом, возможно, из-за того, что они произошли от OpenGL или Vulkan, но я не хочу использовать ни один из них, только чистый C++ и SFML (я знаю, что SFML использует OpenGl)
Я пытаюсь реализовать однородные координаты в своем средстве 3D-рендеринга после того, как смог визуализировать ортогональную проекцию 3D-куба, используя только матрицы 3x3. Но теперь все пошло не так. В Интернете не так много учебных пособий по этому поводу, но я хочу иметь возможность использовать трехмерные векторы и однородные матрицы для отображения трехмерного куба в окне SFML с использованием перспективной проекции. Репозиторий GitHub Что конкретно не так с моим кодом, так это то, что я получаю большие числа для своих вершин (как показано в журнале консоли) и в конечном итоге не вижу куба! Куб .cpp: функция-конструктор, в которой вершины проекции равны вершинам (функции перемещения и вращения вершин выполняются вне функции проекции экрана и вызываются только один раз перед игровым циклом) [code]Cube::Cube() { vertices = {{0, 0, 0}, {0, 1, 0}, {1, 1, 0}, {1, 0, 0}, {0, 0, 1}, {0, 1, 1}, {1, 1, 1}, {1, 0, 1}}; projection_vertices = vertices; modified_vertices = {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}; p_cube_vertbuff = new sf::VertexArray(sf::LineStrip, 8); [/code] Cube.cpp: функция Screen Projection, которая обрабатывает все умножения трехмерных векторных матриц. Здесь вершины изменяются, а затем в конечном итоге отправляются в p_cube_vertbuff, который представляет собой линейную полосу массива вершин SFML, которая должна отображать 3D-куб. [code]void Cube::screen_projection(Camera* camera, Projection* projection, sf::RenderWindow& wind) { printf("Cube\n"); for (int i = 0; i < projection_vertices.size(); i++) { printf("%f, %f, %f\n", projection_vertices[i].x, projection_vertices[i].y, projection_vertices[i].z); projection_vertices[i] = vec3_mat_mul(projection_vertices[i], camera->camera_matrix()); // printf("%f, %f, %f\n", vertices[i].x, vertices[i].y, vertices[i].z); projection_vertices[i] = vec3_mat_mul(projection_vertices[i], projection->projection_matrix); // printf("%f, %f, %f\n", vertices[i].x, vertices[i].y, vertices[i].z); projection_vertices[i] = vec3_mat_mul(projection_vertices[i], projection->to_screen_matrix); // printf("%f, %f, %f\n", vertices[i].x, vertices[i].y, vertices[i].z); modified_vertices[i] = vec3_to_vec2(projection_vertices[i]); }
for (int i = 0; i < modified_vertices.size(); i++) { // printf("%f, %f\n", modified_vertices[i].x, modified_vertices[i].y); (*(p_cube_vertbuff))[i].position = sf::Vector2f(modified_vertices[i].x, modified_vertices[i].y); (*(p_cube_vertbuff))[0].color = sf::Color(255, 0, 0); }
wind.draw(*p_cube_vertbuff); } [/code] РЕДАКТИРОВАТЬ: я добавил вершины, равные функции вершин проекции, которую я вызываю после функции проекции экрана в игровом цикле: [code]void Cube::vertices_to_projection() { vertices = projection_vertices;} [/code] Я пытался использовать структуры для векторов, создать функцию умножения матриц на вектор и использовать матрицы 4x4 для перспективной проекции, модели для просмотра, преобразований камеры и преобразований куба, которые я нашел. онлайн, но они, похоже, несовместимы с моим кодом, возможно, из-за того, что они произошли от OpenGL или Vulkan, но я не хочу использовать ни один из них, только чистый C++ и SFML (я знаю, что SFML использует OpenGl)
Я использую код Visual Studio для рендеринга игры с использованием Python, pygame и openGL. Расположение файлов правильное, и объект с текстурой правильно загрузился в блендер, но при экспорте объекта возникло сообщение об ошибке. Могу предоставить...
Я разрабатываю игровой движок, используя SFML для управления окнами и OpenGL для рендеринга с помощью C++. Моя цель — визуализировать 3D-изображение. модель, но части модели кажутся прозрачными. Я попробовал несколько подходов, чтобы гарантировать,...
У меня есть два класса BglPanel и BglPanel11, полученные из WxglCanvas и Bpane и Bpane1, являются экземпляром обоих классов, соответственно, я хочу непрерывно отображаться на обоих wxglcanvas (через два отдельных потока) или альтернативно рендеринг....
В настоящее время я работаю над программой на C++, используя OpenXR и OpenGL. Мне удалось визуализировать в VR все, что я хотел.
У меня есть один фреймбуфер на каждый глаз, а затем еще 3 для слоев (перекрестие/меню), которые отображаются при разных...