Haaf's Game EngineФорум

HGE и анимация ( MD2, MD3, MD5, .OBJ, .3DS, .X)

Страницы: 1 2 3 Следующая »
#0
21:09, 28 июля 2008

по сабжу - имеется реализация под HGE или глухо в этом вопросе всё и самому писать надо?

правка:

работы над написанием либы для HGE продолжаются.
Название: meshView.rar

Размер: 2.06 Мб

Доступен до: 2008-09-22 00:54:28

Ссылка для скачивания файла: http://ifolder.ru/7819387

работает со следующими форматами:
.X,
.MD2 (текстуру надо вручную грузить. из файла почему то не цепляет),
.MD3 (не проверял),
.3DS (глючит почемуто),
.OBJ (то же самое, текстуру надо вручную грузить. из файла почему то не цепляет)

#1
23:53, 28 июля 2008

Не припомню, чем раскадровка не устраивает?

#2
9:09, 29 июля 2008

__SaM__
>Не припомню, чем раскадровка не устраивает?
как чем? много памяти жрется если движения сложные.
а анимация это наше всё.

#3
12:34, 29 июля 2008

Скорее всего придется писать самому

#4
15:47, 29 июля 2008

ясн. как напишу - выложу либу.
думаю полезная фича будет.

#5
16:38, 29 июля 2008

Я как-то пытался делать 3д-рендер для HGE, но посколько в D3D лузер, то получилось совсем неюзабельно. Так что продолжть не стал.

#6
16:55, 29 июля 2008

elmortem
>Я как-то пытался делать 3д-рендер для HGE, но посколько в D3D лузер, то
>получилось совсем неюзабельно. Так что продолжть не стал.
3Д рендер примитивов я реализовал. перспективную проекцию тоже.
могу на лету переключаться из орто в перспективную и обратно и при этом рендерить 3Д примитивы.

сейчас смотрю в сторону иррлихта - думаю попробовать из него дернуть работу с мешами и анимацией.

#7
11:38, 30 июля 2008

можешь выложить версию с реализацией перспективной проекции?

#8
14:41, 30 июля 2008

сабж реализовал пока для 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);
}

}
#9
14:42, 30 июля 2008
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;
};
}
#10
15:59, 31 июля 2008

Подписался.

#11
15:16, 4 авг 2008

реализовал три: .x .MD2 и .MD3 ( .MD5 пока не нашел )

демо тут:
Название: build.rar
Размер: 2.36 Мб
Доступен до: 2008-09-03 15:06:13
Ссылка для скачивания файла: http://ifolder.ru/7582393

вот. пока напишу для своей гамы удобную обертку. выложу интерфейс с описаловом.
подожду фидбека и реализую доработки согласно фидбеку.

#12
12:06, 5 авг 2008

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

#13
13:40, 5 авг 2008

maxxant
пасиб, буду думать.

#14
17:36, 8 авг 2008

О, очень нужная штука. Нам в следующий проект как раз это надо :)

Тестирование:
На домашнем компе все отлично,
а вот на ноуте в демке sydney_md2.exe были поперепутаны нафик текстурные координаты (остальные демки норм)

Страницы: 1 2 3 Следующая »
Haaf's Game EngineФорум

Тема в архиве.