Авторизация

Закрыть окно
Google ВКонтакте Facebook OpenID Яндекс Twitter


Регистрация     Сменить/востановить пароль


  • Украинский
  • Русский
СКИН JAMPO:ТемныйКрасно-зеленый с серым форумомСинийСалатовый
 Новости портала: Авария в датацентре 03.04.2012
[ 1 ]  2 
Тема: [q] Загрузка моделей в формате *.x (Прочитано 891 раз)
Зарегистрированные пользователи не просматривают эту тему.

малёк



Карма: +0/-0
Сообщений: 33

Офлайн Офлайн
[q] Загрузка моделей в формате *.x
Гружу меш кодом из СДК, основная часть которого приведена ниже, сообственно вопрос, почему при загрузке модели Dwarf из того же СДК, наблюдаеться катастрофическое падение ФПС с 2200 до 150 на довольно неслабой машине. Может кто укажет на пробленый участок кода? Ну и еще вопрос, имеет ли смысл не париться и использовать DXUT, или лучше все писать самому?

HRESULT Mesh::InitGeometry(LPCSTR models, LPDIRECT3DDEVICE9 pDevice)
{
//ResetWindow;
LPD3DXBUFFER pD3DXMtrlBuffer;

// Load the mesh from the specified file
if( FAILED( D3DXLoadMeshFromX(models, D3DXMESH_SYSTEMMEM,
pDevice, NULL,
&pD3DXMtrlBuffer, NULL, &g_dwNumMaterials,
&g_pMesh ) ) )
{
// If model is not in current folder, try parent folder
if( FAILED( D3DXLoadMeshFromX(models, D3DXMESH_SYSTEMMEM,
pDevice, NULL,
&pD3DXMtrlBuffer, NULL, &g_dwNumMaterials,
&g_pMesh ) ) )
{
MessageBox(NULL, «Не найдена модель», «TwinEngine», MB_OK);
return E_FAIL;
}
}

// We need to extract the material properties and texture names from the
// pD3DXMtrlBuffer
D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
g_pMeshMaterials = new D3DMATERIAL9[g_dwNumMaterials];
if( g_pMeshMaterials == NULL )
return E_OUTOFMEMORY;
g_pMeshTextures = new LPDIRECT3DTEXTURE9[g_dwNumMaterials];
if( g_pMeshTextures == NULL )
return E_OUTOFMEMORY;

for( DWORD i=0; i<g_dwNumMaterials; i++ )
{
// Copy the material
g_pMeshMaterials = d3dxMaterials.MatD3D;

// Set the ambient color for the material (D3DX does not do this)
g_pMeshMaterials.Ambient = g_pMeshMaterials.Diffuse;

g_pMeshTextures = NULL;
if( d3dxMaterials.pTextureFilename != NULL &&
lstrlenA(d3dxMaterials.pTextureFilename) > 0 )
{
// Create the texture
if( FAILED( D3DXCreateTextureFromFileA( pDevice,
d3dxMaterials.pTextureFilename,
&g_pMeshTextures ) ) )
{
// If texture is not in current folder, try parent folder
const CHAR* strPrefix = «textures/»;
CHAR strTexture[MAX_PATH];
StringCchCopyA( strTexture, MAX_PATH, strPrefix );
StringCchCatA( strTexture, MAX_PATH, d3dxMaterials.pTextureFilename );
// If texture is not in current folder, try parent folder
if( FAILED( D3DXCreateTextureFromFileA( pDevice,
strTexture,
&g_pMeshTextures ) ) )
{
MessageBox(NULL, «Не найдена текстура», «TwinEngine», MB_OK);
}
}
}
}

// Done with the material buffer
pD3DXMtrlBuffer->Release();

return S_OK;
}




12 февраля 2009, 18:52:57

селёдка


01010 01010
bubuntu u$ver

Карма: +1/-0
Сообщений: 93

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
а де ти, власне, використовуєш цю функцію??? її тре раз використати при завантеженні геометрії, а не в кожному кадрі




13 февраля 2009, 00:47:15

малёк



Карма: +0/-0
Сообщений: 33

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
if (AllInit())
{
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );

MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while( msg.message!=WM_QUIT)
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{

...
Render();
}
}
}

Вот кусок кода с обработкой сообщений и рендером, а использую функцию в AllInit()




13 февраля 2009, 09:46:16

селёдка



Карма: +0/-0
Сообщений: 63

Откуда: 127.0.0.1

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
на фпс влияет только то, что выполняется каждый кадр. ищи в цикле прорисовки а не в загрузке.




13 февраля 2009, 14:13:24

малёк



Карма: +0/-0
Сообщений: 33

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
Вот код из цикла прорисовки, но как на меня дело не в нем.

bool Mesh:rawMesh(LPDIRECT3DDEVICE9 pDevice)
{
for( DWORD i=0; i<g_dwNumMaterials; i++ )
{
// Set the material and texture for this subset
pDevice->SetMaterial( &g_pMeshMaterials );
pDevice->SetTexture( 0, g_pMeshTextures );


// Draw the mesh subset
g_pMesh->DrawSubset( i );

}
return true;
}




13 февраля 2009, 19:46:09

селёдка



Карма: +0/-0
Сообщений: 63

Откуда: 127.0.0.1

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
посмотри чему равняется g_dwNumMaterials. закомментируй построчно код в цикле и выяви какая строка сильней всго давит на фпс




13 февраля 2009, 20:44:55

малёк



Карма: +0/-0
Сообщений: 33

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
g_dwNumMaterials равняеться 9, и получаеться что

D3DXLoadMeshFromX(models, D3DXMESH_SYSTEMMEM,
pDevice, NULL,
&pD3DXMtrlBuffer, NULL, &g_dwNumMaterials,
&g_pMesh )

именно функция загрузки меша являеться тем самым тормозом, ну и следовательно вопрос какой формат моделей оптимально использовать и где об этом можно почитать доку?




13 февраля 2009, 22:11:19

селёдка



Карма: +0/-0
Сообщений: 63

Откуда: 127.0.0.1

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
убери код загрузки модели из цикла и напиши её перед ним.




14 февраля 2009, 00:14:29

малёк



Карма: +0/-0
Сообщений: 33

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
Так кода загрузки модели и нету в цикле, модель грузиться один раз.




14 февраля 2009, 00:21:22

селёдка



Карма: +0/-0
Сообщений: 63

Откуда: 127.0.0.1

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
тогда D3DXLoadMeshFromX не может влиять на фпс.
2200 это при пустой сцене? отрисуй модель 10 раз за кадр и посмотри как фпс изменится. возможно, 150 фпс это нормально.




14 февраля 2009, 01:14:54

селёдка


01010 01010
bubuntu u$ver

Карма: +1/-0
Сообщений: 93

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
подивись скільки видає DirectxViwer, чи як його там (утилітка є в стандартному наборі СДК), можливо двоя модель сильно деталізована




« Последний раз изменено: 14 февраля 2009, 03:39:23 BrucE »

14 февраля 2009, 03:37:33

малёк



Карма: +0/-0
Сообщений: 33

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
2200 при пустой сцене, если выводит Torus из стандартного набора с детализацией 16к полигонов то такого проседания нет, а тут есть, причем модель не особо детализирована, как на меня не больше 2к полигонов. А если вывести 10 таких моделей то фпс падает до 15. Хотя в другом примере «ShadowVolume» из СДК при точно такой самой модели около 400 ФПС, хотя там рисуеться еще и тень, правда там все делаеться через DXUT.




14 февраля 2009, 11:52:21

селёдка


01010 01010
bubuntu u$ver

Карма: +1/-0
Сообщений: 93

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
приатач тоді в файл повний код, бум розбиратись




14 февраля 2009, 12:35:07

малёк



Карма: +0/-0
Сообщений: 33

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
Выложил emusic.net.ua/tw.exe




14 февраля 2009, 15:21:36

селёдка


01010 01010
bubuntu u$ver

Карма: +1/-0
Сообщений: 93

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
void Render()
{
AltTab(); //спробуй закоментувати цю перевірку, можливо вона все тормозить

if(pDevice)
{
// Очистим область вывода темно-синим цветом
pDevice->Clear( 0, NULL,
D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
D3DCOLOR_XRGB(0,0,12, 1.0f, 0 );

// Рисуем сцену
if( SUCCEEDED( pDevice->BeginScene() ) )
{//доцільніше створювати освічення в іншій ф-ції, а не в кожному кадрі
// создаем источник света
D3DLIGHT9 light=
{ D3DLIGHT_DIRECTIONAL, // бесконечно удаленный источник
{1,1,0,0}, // диффузное освещение: желтый цвет
{0,0,0,0},
{0.1f,0.1f,0.1f,1}, // рассеянный свет: тусклый белый
{0,0,0},
{7,-2,1} // вектор направления
} ;

//pDevice->SetLight( 1, &light ) ;
pDevice->LightEnable( 1, TRUE ) ;
//аналогічно з матеріалом
// создаем материал
D3DMATERIAL9 mtrl;

//Инициализируем его
mtrl.Ambient = WHITE;
mtrl.Diffuse = WHITE;
mtrl.Specular = WHITE;
mtrl.Emissive = WHITE;
mtrl.Power = 0.0f;

//pDevice->SetMaterial( &mtrl ) ;// тим більше що він тут і не ініціалюзується

//SetupMatrices();

CMesh.DrawMesh(pDevice);

DrawMyText(pDevice, hFont, FPS, 10, 10, 500, 700, D3DCOLOR_ARGB(250, 250, 250, 50));

поки все що замітив, ще щось знайду відпишу
З.І. за чим ти вивчаєш Дірект? можу дещо порадити(скинути з своєї інфи)





14 февраля 2009, 17:08:26

малёк



Карма: +0/-0
Сообщений: 33

Офлайн Офлайн

Re: [q] Загрузка моделей в формате *.x
Пробывал коментировать AltTab(), но дело не в нем

ДиректХ пытаюсь изучать разбираясь в СДК плюс роюсь в интернете.




14 февраля 2009, 17:24:52
[ 1 ]  2 

Перейти к

Комментировать могут только авторизированные пользователи. Пожалуйста, войдите или зарегистрируйтесь!