![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Lightmap [VC]
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 );
}
Может ошибка здесь?