Ортографическая 3D-обратная поверхность с использованием поверхностных нормалей

StackOverflow https://stackoverflow.com//questions/11705572

Вопрос

Я создаю 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

Общая процедура, которую я использую:

  1. Создайте матрицу преобразования, с помощью которого для преобразования вершин куба

  2. Для каждого лица, и для каждой точки на каждом лицевере я преобразую их в VEC3S, и умножьте их на матрицу, сделанную на шаге 1.

  3. Затем я получаю поверхность нормальной части лица, используя метод Newell, затем получить точечный продукт из этого нормального и некоторого состава VEC3, например, [-1, 1, 1], так как я не могу Я думаю о хорошей цене, чтобы поставить здесь. Я видел, что некоторые люди используют позицию камеры для этого, но ...

  4. пропуская обычный шаг с использованием матрицы камеры, я вытягиваю значения x и y из полученных векторов, чтобы отправить на мою линию и образец лица, но только если у них есть точечный продукт выше 0. Я понимаю Это довольно произвольно, какие из них я натянув, правда.

  5. Мне интересно две вещи; Если моя процедура на шаге 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 треугольник против часовой стрелки или по часовой стрелке, и сохранить или выбросить на основе этого условия.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top