Показать сообщение отдельно
Старый 25.05.2006, 11:42
heilong вне форума Посмотреть профиль Отправить личное сообщение для heilong Посетить домашнюю страницу heilong Найти все сообщения от heilong
  № 4  
Ответить с цитированием
heilong
 
Аватар для heilong

Регистрация: Dec 2005
Адрес: Moscow
Сообщений: 84
Отправить сообщение для heilong с помощью ICQ
Уважаемая iLeon, давай на ты.
Я гляжу ты в теории понимаешь, поэтому о цвете скажу в двух словах. Цвет во flash-е, как и много где, это просто 24-битное число, необязательно его записывать в 16-ричной системе счисления. старшие 8 бит - r, средник - g, младшие - b.
Сделать цвет из компонентов:
color = (r << 16) + (g << 8) + b; // see docs on "<<". parentheses *REQUIRED*
Достать компоненты из цвета:
r = color >> 16;
g = (color >> 8) & 0xff; // "& 0xff" to filter out the remaining red component
b = color & 0xff; // "& 0xff" to filter out the remaining red & green

Твой код: сотри функцию Stringer и поменяй
Код:
		if (LightFace[i]>=0) {
			a = int(LightFace[i]*256);
			b = Stringer(a);
			faceColor = b+"FF"+b;
		} else {
			a = int((1+LightFace[i])*256);
			b = Stringer(a);
			faceColor = "00"+b+"00";
		}
		color = "0x"+faceColor;
		box.beginFill(color, 100);
на
Код:
    var faceColor;
		if (LightFace[i]>=0) {
			a = Math.round(LightFace[i]*255);
			faceColor = (a << 16) + 0xff00 + a;
		} else {
			a = Math.round((1+LightFace[i])*255);
			faceColor = a << 8;
		}
		box.beginFill(faceColor,100);
FPS это увеличивает несильно. Про скалярное произведение - это ведь просто косинус угла так считается удобно и быстро. Освещение - по закону Ламберта.
У тебя тип закраски - flat, т.е. вся грань красится в один цвет. Я интересуюсь gouraud (Гуро это фамилия автора) закраской, когда цвет свой у каждой вершины грани (треугольника) и плавные переходы на всей грани. Это выглядит много лучше. А работаю я пока вообще на плоскости, т.е. меня пока интересует заполнение конкретных треугольников. Смогу это сделать достаточно быстро работающим - тогда уже 3d engine можно мастерить. Такой у меня здесь bottom-up approach. А весь мой код (предпоследняя версии, сейчас есть ещё один вариант, но он работает даже помедленнее первого, пока не понял как это ускорить) лежит у меня на сайте:
http://heilong.oceanography.ru/flash/lab/texmap.fla.gz
Текстуру в коде лучше закомментировать чтобы лучше был видна закраска.

Не очень понятно, почему у тебя работает медленно, вроде закраска одним цветом во flash-е быстрая операция. Надо искать куда время уходит - с помощью функции getTimer посчитать, где больше всего времени тратится. Потом думать почему и как это исправить. Плохо, что нет во Flash-e profiler-а, придётся самому это делать.

Из книжек могу посоветать Шикина и Борескова "Компьютерная графика" (довольно старая, уже не достать, думаю) и их новую книгу "Компьютерная графика: полигональные модели", по-моему есть на ozon.ru
Очень хорошие книги с алгоритмами и их реализациями (на C).