Отбраковка задней поверхности с помощью Molehill

Используя Flash 11 RC1 с новым API Molehill, я хотел бы включить отсечение задней поверхности. Документация по бета-версии довольно расплывчата, но пример подразумевает, что Molehill хочет, чтобы треугольники, обращенные вперед, вращались против часовой стрелки, что вполне нормально.

Но когда мои многоугольники закручиваются против часовой стрелки, я получаю прямо противоположное поведение — другими словами, как будто вопреки своим собственным примерам Molehill ожидает, что обращенные вперед треугольники закручиваются по часовой стрелке. Поскольку в документации никогда прямо не указывается, какая обмотка правильная, я в тупике.

Я не хочу просто переворачивать все свои треугольники, пока они не будут выглядеть правильно, прежде чем я на 100% узнаю, чего на самом деле хочет Кротовина, поскольку это имеет хорошие шансы скрыть фундаментальное недоразумение.

Я использую простую перспективную проекцию (примечание относительно .transpose() ниже: поскольку copyRawDataFrom ожидает данные в порядке столбцов, и мне не нравилось, как это выглядит в коде, я решил просто ввести его в порядке строк и впоследствии транспонировать матрицу - так подайте на меня в суд :P):

        var y:Number = 1.0 / Math.tan(pFOV / 2.0);
        var x:Number = y / pAspectRatio;
        _projectionMatrix.copyRawDataFrom(new<Number>[
                x       , 0        , 0                       , 0,
                0       , y        , 0                       , 0,
                0       , 0        , pFar/(pNear-pFar)       , pFar*pNear/(pNear-pFar),
                0       , 0        , -1                      , 0
            ]);
        _projectionMatrix.transpose();

Любые подсказки?


person pjohansson    schedule 02.10.2011    source источник


Ответы (1)


Вы можете использовать Context3D.setCulling, чтобы изменить отсечение задней поверхности в кротовине. См.: http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/display3D/Context3D.html#setCulling()

Какая сторона передняя или задняя, ​​зависит от входных данных вашей модели, поэтому метод проб и ошибок действительно лучший выбор. Вариантов всего два :)

person starmole    schedule 08.11.2011