Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.10.2010, 22:11
deamoK вне форума Посмотреть профиль Отправить личное сообщение для deamoK Найти все сообщения от deamoK
  № 1  
Ответить с цитированием
deamoK
[+1 16.12.11]
 
Аватар для deamoK

Регистрация: Sep 2010
Сообщений: 57
По умолчанию Вопросы по 3D: Освещение

Хочу сделать, для начала, псевдо освещение: имеется массив фейсов/полигонов/треугольников, все отсортированы и отобраны (culling негативный естессно). Так вот, как расчитать цвет заливки (типа тень) для каждого полигона, в зависимости как он повернут к обозревателю?
(для проецирования и рисования использую projectVectors и GraphicsTrianglePath).


Последний раз редактировалось deamoK; 23.10.2010 в 16:09.
Старый 22.10.2010, 23:26
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
через dotProduct от нормали фэйса и вектора от фэйса к источнику света.

Старый 23.10.2010, 16:09
deamoK вне форума Посмотреть профиль Отправить личное сообщение для deamoK Найти все сообщения от deamoK
  № 3  
Ответить с цитированием
deamoK
[+1 16.12.11]
 
Аватар для deamoK

Регистрация: Sep 2010
Сообщений: 57
поподробнее бы:
как находится нормаль фейса и вектор к источнику =\

Старый 23.10.2010, 17:34
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 4  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Нормаль треугольника ABC — это векторное произведение векторов AB и BC (или BC и CA, или CA и AB — главное соблюдать порядок вершин, иначе это будет нормаль к "затылку" треугольника).

Читаем про векторное произведение и, среди прочего, находим формулу:

Код:
[N] = [AB] x [BC] = [ Ay*Bz - Az*By, Az*Bx - Ax*Bz, Ax*By - Ay*Bx ]
Так ты находишь нормаль.
Следующая операция — найти косинус угла между нормалью и лучом света, падающим на треугольник. Для этого мы строим некий вектор L от любой из точек треугольника (у нас простая задача без интерполяций и без нахождения середины треугольника) до источника света (именно в этом направлении).

Итак у нас есть два вектора: N = [ AB ] x [ BC ] и L. Для нас будет показательным косинус угла между ними (нам нужна четная функция)

А косинус равен скалярному произведению векторов N и L деленному на произведение их длин:

Код AS3:
var Nd:Number = Math.sqrt( Nx*Nx + Ny*Ny + Nz*Nz );
var Ld:Number = Math.sqrt( Lx*Lx + Ly*Ly + Lz*Lz );
var NL:Number = Nx*Lx + Ny*Ly + Nz*Lz;
var COSINUS:Number = NL / Nd / Ld;
ну и просится очевидная оптимизация для самого общего случая:

Код AS3:
var Nd2:Number = Nx*Nx + Ny*Ny + Nz*Nz;
var Ld2:Number = Lx*Lx + Ly*Ly + Lz*Lz;
var NL:Number  = Nx*Lx + Ny*Ly + Nz*Lz;
var COSINUS:Number = Math.sqrt( NL*NL / Nd2 / Ld2 );
А уже косинус (точнее только его положительное значение) можно прямо использовать как степень освещенности треугольника. Хотя и отрицательное значение можно использовать для некоего фейка в плане ambient ligth =)
__________________
Поймай яблоко 2!

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:51.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.