по сабжу - имеется реализация под HGE или глухо в этом вопросе всё и самому писать надо?
правка:
работы над написанием либы для HGE продолжаются.
Название: meshView.rar
Размер: 2.06 Мб
Доступен до: 2008-09-22 00:54:28
Ссылка для скачивания файла: http://ifolder.ru/7819387
работает со следующими форматами:
.X,
.MD2 (текстуру надо вручную грузить. из файла почему то не цепляет),
.MD3 (не проверял),
.3DS (глючит почемуто),
.OBJ (то же самое, текстуру надо вручную грузить. из файла почему то не цепляет)
Не припомню, чем раскадровка не устраивает?
__SaM__
>Не припомню, чем раскадровка не устраивает?
как чем? много памяти жрется если движения сложные.
а анимация это наше всё.
Скорее всего придется писать самому
ясн. как напишу - выложу либу.
думаю полезная фича будет.
Я как-то пытался делать 3д-рендер для HGE, но посколько в D3D лузер, то получилось совсем неюзабельно. Так что продолжть не стал.
elmortem
>Я как-то пытался делать 3д-рендер для HGE, но посколько в D3D лузер, то
>получилось совсем неюзабельно. Так что продолжть не стал.
3Д рендер примитивов я реализовал. перспективную проекцию тоже.
могу на лету переключаться из орто в перспективную и обратно и при этом рендерить 3Д примитивы.
сейчас смотрю в сторону иррлихта - думаю попробовать из него дернуть работу с мешами и анимацией.
можешь выложить версию с реализацией перспективной проекции?
сабж реализовал пока для DX анимации ( *.x формат )
на очереди MD2 и MD3, как все будет красиво - выложу либу.
elmortem
>можешь выложить версию с реализацией перспективной проекции?
версию нет, а класс включающий/выключающий сабж могу
void HGEImpl::Gfx_SetProjectionMatrix(int width, int height ) { _render_batch( ); mCamera.setProjectionMatrix( width, height ); } void HGEImpl::Gfx_SetOrthoMatrix( int width, int height ) { _render_batch( ); mCamera.setOrthoMatrix( width, height ); }
namespace camera { hgeCamera::hgeCamera(float zMin, float zMax) { this->zMin = zMin; this->zMax = zMax; } void hgeCamera::setDefault( ) { if( !HGEImpl::instance( )->Gfx_GetDevice( ) ) return; transform( 0, 0, static_cast<float>( HGEImpl::instance( )->System_GetStateInt( HGE_SCREENWIDTH) ), static_cast<float>( HGEImpl::instance( )->System_GetStateInt( HGE_SCREENHEIGHT) ) ); } void hgeCamera::setViewport( D3DVIEWPORT8 vp ) { if( !HGEImpl::instance( )->Gfx_GetDevice( ) ) return; m_vp = vp; HGEImpl::instance( )->Gfx_GetDevice( )->SetViewport( &m_vp ); } void hgeCamera::setTransform( ) { if( !HGEImpl::instance( )->Gfx_GetDevice( ) ) return; HGEImpl::instance( )->Gfx_GetDevice( )->SetTransform( D3DTS_PROJECTION, &matProj); D3DXMatrixIdentity( &matView); HGEImpl::instance( )->Gfx_GetDevice( )->SetTransform( D3DTS_VIEW, &matView); } void hgeCamera::setProjectionMatrix( int width, int height) { if( !HGEImpl::instance( )->Gfx_GetDevice( ) ) return; D3DXMatrixIdentity( &matProj); float fAspect = ( ( float)width) / ( ( float)height); D3DXMatrixPerspectiveFovRH( &matProj, D3DX_PI/4, fAspect, 1.0f, 1000.0f ); HGEImpl::instance( )->Gfx_GetDevice( )->SetTransform( D3DTS_PROJECTION, &matProj ); D3DXMatrixIdentity( &matView); } void hgeCamera::transform( float x, float y, float width, float height) { if( !HGEImpl::instance( )->Gfx_GetDevice( ) ) return; m_vp.MinZ = 0.0f; m_vp.MaxZ = 1.0f; m_vp.X = static_cast<DWORD>( x ); m_vp.Y = static_cast<DWORD>( y ); m_vp.Width = static_cast<DWORD>( width ); m_vp.Height = static_cast<DWORD>( height ); D3DXMatrixIdentity( &matProj); D3DXMATRIX tmp; D3DXMatrixScaling( &matProj, 1.0f, -1.0f, 1.0f); D3DXMatrixTranslation( &tmp, -0.5f, +0.5f, 0.0f); D3DXMatrixMultiply( &matProj, &matProj, &tmp); D3DXMatrixOrthoOffCenterLH( &tmp, ( float)x, ( float)( x + m_vp.Width), -( ( float)( y + m_vp.Height)), -( ( float)y), zMin, zMax); D3DXMatrixMultiply( &matProj, &matProj, &tmp); HGEImpl::instance( )->Gfx_GetDevice( )->SetTransform( D3DTS_PROJECTION, &matProj); } void hgeCamera::setOrthoMatrix( int width, int height) { if( !HGEImpl::instance( )->Gfx_GetDevice( ) ) return; transform( 0, 0, static_cast<float>( width ), static_cast<float>( height ) ); } void hgeCamera::transform( float x, float y, float dx, float dy, float rot, float hscale, float vscale) { if( !HGEImpl::instance( )->Gfx_GetDevice( ) ) return; if( vscale==0.0f) { D3DXMatrixIdentity( &matView); } else { D3DXMATRIX tmp; D3DXMatrixTranslation( &matView, -x, -y, 0.0f ); D3DXMatrixScaling( &tmp, hscale, vscale, 1.0f ); D3DXMatrixMultiply( &matView, &matView, &tmp ); D3DXMatrixRotationZ( &tmp, -rot ); D3DXMatrixMultiply( &matView, &matView, &tmp ); D3DXMatrixTranslation( &tmp, x+dx, y+dy, 0.0f ); D3DXMatrixMultiply( &matView, &matView, &tmp ); } HGEImpl::instance( )->Gfx_GetDevice( )->SetTransform( D3DTS_VIEW, &matView); } }
namespace camera { class hgeCamera { public: hgeCamera(float zMin = -2000.0f, float zMax = 2000.0f); void setDefault( ); void transform( float x, float y, float width, float height); void transform( float x, float y, float dx, float dy, float rot, float hscale, float vscale); void setTransform( ); void setProjectionMatrix( int width, int height); void setOrthoMatrix( int width, int height); void setViewport( D3DVIEWPORT8 vp ); D3DVIEWPORT8 m_vp; private: float zMin; float zMax; D3DXMATRIX matView; D3DXMATRIX matProj; }; }
Подписался.
реализовал три: .x .MD2 и .MD3 ( .MD5 пока не нашел )
демо тут:
Название: build.rar
Размер: 2.36 Мб
Доступен до: 2008-09-03 15:06:13
Ссылка для скачивания файла: http://ifolder.ru/7582393
вот. пока напишу для своей гамы удобную обертку. выложу интерфейс с описаловом.
подожду фидбека и реализую доработки согласно фидбеку.
progman
>Ссылка для скачивания файла: http://ifolder.ru/7582393
Хотел глянуть, но к сожалению, у меня не запускаются все 3 приложения - почему-то, вылетают.
===
dwarf_x.exe caused an EXCEPTION_ACCESS_VIOLATION in module ntdll.dll at 001B:7C911EC3
EAX=001213A1 EBX=00B90000 ECX=000013A1 EDX=00000025 ESI=00B93BD0
EDI=00B93BD0 EBP=0012F934 ESP=0012F928 EIP=7C911EC3 FLG=00090246
CS=001B DS=0023 SS=0023 ES=0023 FS=003B GS=0000
001B:7C911EC3 ntdll.dll
001B:7C910D5C ntdll.dll
001B:00487D76 dwarf_x.exe
001B:00419523 dwarf_x.exe
===
sydney_md2.exe caused an EXCEPTION_ACCESS_VIOLATION in module ntdll.dll at 001B:7C911EC3
EAX=001213A1 EBX=00B90000 ECX=000013A1 EDX=00000025 ESI=00B93BD0
EDI=00B93BD0 EBP=0012F934 ESP=0012F928 EIP=7C911EC3 FLG=00090246
CS=001B DS=0023 SS=0023 ES=0023 FS=003B GS=0000
001B:7C911EC3 ntdll.dll
001B:7C910D5C ntdll.dll
001B:00487D76 sydney_md2.exe
001B:00419533 sydney_md2.exe
maxxant
пасиб, буду думать.
О, очень нужная штука. Нам в следующий проект как раз это надо :)
Тестирование:
На домашнем компе все отлично,
а вот на ноуте в демке sydney_md2.exe были поперепутаны нафик текстурные координаты (остальные демки норм)
Тема в архиве.