![]() |
закраска треугольника (shading), с интерполяцией
Сейчас изучаю возможности Flash 8 по текстурированию и закраске треугольников. В перспективе - идея сделать несложный 3d engine с текстурами и нормальным (не flat, а Gouraud) светом (что отсутствует в большинстве даже продвинутых flash 3d engines).
Кому лениво читать, можно пропустить все кроме выделенного жирным. С текстурированием всё довольно просто, с помощью MovieClip.attachBitmap и MovieClip.transform.matrix а также mask по форме нужного треугольника все неплохо работает, и даже скорость вполне сносная. С освещением сложнее, быстрого и некривого решения пока не нашёл. Итак, сразу сформулирую вопрос: Имеется треугольник с вершинами A (0, 0); B (256, 0); C (0, 256). Для каждой вершины задан свой цвет, например A - красный, B - зелёный, C - синий. Нужно проинтерполировать цвет по всей площади треугольника. То есть закрасить его так чтобы в каждой его точке цвет определялся в зависимости от расстояния от каждой вершины. Другими словами, нужен градиент не linear, а с тремя вершинами. При этом важно чтобы это работало быстро. Какие есть идеи? Теперь варианты как это делал я: 1) Код:
Делается BitmapData(256, 256), присоединяется к нужному клипу. 2) Код:
Делается BitmapData(2, 2). Ещё думал, как бы это реализовать с помощью градиента(нескольких градиентов), но так и не придумал. Можно поиграться с моим кодом: http://heilong.oceanography.ru/flash/lab/ Для наглядности в нём можно закомментировать текстурирование (строка 22), преобразования на плоскости (строка 111) и произвольные цвета вершин (строки 51-59), тогда как раз будет заметно неидеальное качество. Чтобы было лучше видно, можно поставить посильнее увеличение (строка 44). Кто осилил мои "много букв", милости прошу к обсуждению/идеям. |
| Часовой пояс GMT +4, время: 20:03. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.