WPF 3D прозрачные текстуры - отсечение? - PullRequest
4 голосов
/ 02 января 2012

http://www.youtube.com/watch?v=gZNdfVwkttM - вы можете увидеть все проблемы, описанные в этом видео, если вы не видите картинки.

Все стены на всех изображениях ниже имеют полупрозрачную текстуру PNG. Каждая квадратная стена, пол и потолок - это отдельная GeometryModel3D (я знаю, что это плохо для производительности, но ...). Пол и потолок центрального куба не имеют никакой геометрии и текстур - поэтому они имеют такой же цвет, как и Window.Background (черный). Но рассматриваемый эффект проявляется любым способом получения прозрачности: текстура для ImageBrush с прозрачностью, Material.Color (например, DiffuseMAterial.Color), где у Color есть альфа-канал, ImageBrush как материал, где у ImageBrush есть Opacity - у меня все та же проблема .

Вся стена состоит из двух треугольников. Там, где нет явных нормалей, потому что я определяю индексы треугольников, чтобы нормали автоматически вычислялись WPF.

http://imagepost.ru/images/i/ma/image00001.png

У него также нет никакого материала для спины или лишних треугольников с обратной стороны.

Как видите, нет проблем, если вы смотрите только от + Z до -Z (стоя на синем квадрате и глядя на красный квадрат - это вторая картинка).

Но если вы посмотрите назад (с красного на синий - первое изображение), прозрачности не будет!

Ну, я решил посмотреть с желтого квадрата (третье изображение).

И тогда я подошел ближе - вы можете видеть, что происходит (снимки с 4 по 6).

Нет ошибок построения геометрии, ошибок отображения текстуры или освещения! Это какая-то вырезка, как я догадался! Кроме того, есть несколько интересных фотографий 7 и 8, которые подтверждают мою догадку.

На последнем рисунке показан белый фон окна, в котором размещался Viewport3D (предыдущий был черным), и мое предположение об отсечении подтвердилось - WPF просто не закрасил эту часть сцены, и мы можем видеть фон окна!

НО! Если это происходит с разных взглядов, то почему вид от + Z до -Z (вторая картинка) выглядит хорошо?!

1 Ответ

3 голосов
/ 02 января 2012

Вам необходимо отсортировать треугольники по их расстоянию от точки обзора. Только тогда wpf сможет смешивать прозрачные текстуры. DirectX может смешивать треугольники друг с другом, но только при рисовании темы назад

http://www.ericsink.com/wpf3d/2_Transparency.html

...