Отбраковка задней поверхности с помощью 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()
То, какая сторона лицевая или обратная, зависит от входных данных вашей модели, поэтому пробная версия и ошибка - действительно лучший выбор. Есть только два варианта:)