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

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

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

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

Я использую простую перспективную проекцию (примечание, касающееся.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();

Есть какие-нибудь подсказки?

1 ответ

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

То, какая сторона лицевая или обратная, зависит от входных данных вашей модели, поэтому пробная версия и ошибка - действительно лучший выбор. Есть только два варианта:)

Другие вопросы по тегам