Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Lightmap [VC]


Страницы:   1 2

VolanD666 ©   (2006-03-24 16:40:00) 

Привет, мастера!
У меня проблема, связанная с не стыковкой карты освещенности на двух треугольниках: http://www.gamedev.ru/images/?id=10484.
Подскажите, плиз, как это исправить!


XProger   (2006-03-24 19:25:00) [21]

VolanD666, т.е. текстура лайтмэпа треугольника подобна самому треугольнику?


VolanD666   (2006-03-24 18:35:00) [22]

Нееет, у меня не трапеции! Эта картинка состоит из двух треугольников, на каждый из них наложена отдельная текстура, при этом текстурные координаты вычисляются правильно ( я проверял )...


XProger   (2006-03-24 17:52:00) [23]

Всмысле, может у тебя такая бяка
http://www.gamedev.ru/forum/?group=0&topic=11108


VolanD666   (2006-03-24 17:38:00) [24]

Сорри, за дубль...


VolanD666   (2006-03-24 17:37:00) [25]

Что- то я не совсем понял. Это же два разных треугольника сразными текстурами даже... :)

Builder must die...


VolanD666   (2006-03-24 17:37:00) [26]

Что- то я не совсем понял. Это же два разных треугольника сразными текстурами даже... :)


XProger   (2006-03-24 17:08:00) [27]

ах ты подлый сипиписьник ;)

Вообщем, эти 2 треугольника, должны образовывать прямоугольный многоугольник, а не трапецию ;)


VolanD666   (2006-03-24 16:43:00) [28]

Код для получения UV веторов такой:

D3DXVECTOR3 vec1, vec2, vec3;
float l1, l2, l3, mLenght, lV;
float Dot;

// Получаем нормаль
CreateNormal( &(*trInfo).Normal, (*tp0).XYZ, (*tp1).XYZ, (*tp2).XYZ );

// Получаем вектора-стороны треугольника
vec1=(*tp1).XYZ-(*tp0).XYZ;
vec2=(*tp2).XYZ-(*tp1).XYZ;
vec3=(*tp0).XYZ-(*tp2).XYZ;

// Получаем длины сторон треугольника
l1=D3DXVec3Length( &vec1 );
l2=D3DXVec3Length( &vec2 );
l3=D3DXVec3Length( &vec3 );

// Находим максимальную длину
mLenght=max( l1, max( l2, l3 ) );

// Если первая сторона самая длинная
if ( mLenght==l1 ){
 
 (*trInfo).StartPoint=(*tp0).XYZ;
 (*trInfo).U=vec1;

 D3DXVec3Normalize( &vec1, &vec1 );
 D3DXVec3Normalize( &vec3, &vec3 );

 Dot= D3DXVec3Dot( &vec1, &vec3 );
 lV= sqrt( 1-Dot*Dot )*l3;

 D3DXVec3Cross( &(*trInfo).V, &(*trInfo).Normal, &(*trInfo).U );
 D3DXVec3Normalize( &(*trInfo).V, &(*trInfo).V );

 (*trInfo).V*=lV;

 // Устанавливаем текстурные координаты
 (*tp0).Tex2=D3DXVECTOR2( 0.0f, 0.0f );
 (*tp1).Tex2=D3DXVECTOR2( 1.0f, 0.0f );
 (*tp2).Tex2=D3DXVECTOR2( fabs( Dot )*l3/l1 , 1.0f );
 
}


Может ошибка здесь?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо