Ортографическая 3D-обратная поверхность с использованием поверхностных нормалей
-
13-12-2019 - |
Вопрос
Я создаю HTML5 HONVAS 3D Renderer, и я бы сказал, что я получил довольно далеко без помощи, но я столкнулся с видами вида. Я пытаюсь реализовать обратно на куб на куб с помощью некоторых нормальных расчетов. Кроме того, я пометил это как WebGL, так как это имеет достаточный вопрос, который он мог бы применить к тому, как в случае моего использования, так и на 3D-ускоренном.
Во всяком случае, когда я вращаю кубик, я обнаружил, что неверные лица скрыты. Пример:
Я использую следующие вершины: https://developer.mozilla.org/en/webgl/creating_3d_objects_sing_webgl#define_the_positions_of_the_cube_the_positions_of_the_cube% 27s_vertices
Общая процедура, которую я использую:
-
Создайте матрицу преобразования, с помощью которого для преобразования вершин куба
-
Для каждого лица, и для каждой точки на каждом лицевере я преобразую их в VEC3S, и умножьте их на матрицу, сделанную на шаге 1.
-
Затем я получаю поверхность нормальной части лица, используя метод Newell, затем получить точечный продукт из этого нормального и некоторого состава VEC3, например, [-1, 1, 1], так как я не могу Я думаю о хорошей цене, чтобы поставить здесь. Я видел, что некоторые люди используют позицию камеры для этого, но ...
-
пропуская обычный шаг с использованием матрицы камеры, я вытягиваю значения x и y из полученных векторов, чтобы отправить на мою линию и образец лица, но только если у них есть точечный продукт выше 0. Я понимаю Это довольно произвольно, какие из них я натянув, правда.
Мне интересно две вещи; Если моя процедура на шаге 3 верна (скорее всего она не), и если порядок точек я рисую на лицах, неверно (очень вероятно). Если последнее верно, я не совсем уверен, как визуализировать проблему. Я видел, что люди говорят, что нормальные не относящиеся к тому, что это направление линии нарисовать линию, но ... мне трудно обернуть голову, или если это источник моей проблемы.
Это, вероятно, не имеет значения, но библиотека матрицы, которую я использую, это GL-Matrix:
https://github.com/toji/gl-matrix
Кроме того, конкретный файл в моем с открытым исходным кодовым базе, я использую здесь:
http://code.google.com /p/nanoblok/source/browse/nb11/app/render.js
Спасибо заранее!
Решение
Я не рассмотрел всю вашу систему, но «составленный VEC3» не должен быть произвольным; Это должен быть «вне экрана» вектор, который (поскольку ваша проекция - ⟨ x , y , z ⟩ → ⟨ x , y ⟩) - либо ⟨0, 0, -1⟩ или ⟨0, 0, 1⟩ в зависимости от души и осей экранов системы координат. У вас нет явной «матрицы камеры» (обычно называется матрицей представления), но ваша камера (просмотр и проекция) неявно определяется выступлением Shap 4!
Однако обратите внимание, что этот подход будет работать только для орфографических проекций, не перспективных (рассмотрим лицо на левой стороне экрана, обращенного к праву и параллельно направленному направлению; точечный продукт будет 0, но это должно быть видимый). Обычный подход, используемый в реальном трехмерном аппаратном обеспечении, должен сначала сделать все преобразование (включая проекцию), затем проверьте, является ли результирующий 2D треугольник против часовой стрелки или по часовой стрелке, и сохранить или выбросить на основе этого условия.