импорт 3D объектов в С++
Еще такой вопрос: что за формат такой .Х и чем его создавать, редактировать?? 3д студия вроде его не понимает. Какие еще есть форматы 3д объектов и как их в директ иксах использовать???
.X - формат моделей для DirectX. Его макс по-идее должен понимать, это простейший формат, что-то вроде .bmp, только для трехмерного мира :)
За инфой сюда
Последнии два файла совсем простые, не содержат текстурных координат, так что загрузить их будет проще всего.
Можно информаицю поискать на
http://www.codesampler.com,
http://www.gamedev.ru
Либо воспользоваться библиотекой для загрузки файлов aselib, 3dslib (к сожалению не припомню ссылки, но если немного поискать, то наверняка найдешь).
в 3Dsmax 5 жму открыть файл, выбираю нужный .х, он пишет - не могу прочитать файл. неизвестный формат. кстати файл, который пытаюсь открыть - из 11го туториала по 8му диксу на xdev.ru . bigtree.x
покавырялся с директиксами и понял что знаний у меня маловато.
пытаюсь создать полноэкранный режим - постоянно эта херова CreateDevice возвращает ошибку :mad: :mad: :mad: хотя вроде всё делаю как в туториале на xdev.ru
Какую инфу почитать посоветуете?
Еще вопрос: где мне взять хелп файлы из сдк по диксам? ато весь сдк размером 440 МБ чёто влом качать.
Цитата: littlefrankie
... ато весь сдк размером 440 МБ чёто влом качать.
Вот lib'ы и header'ы из DX SDK:
http://www.cppguru.narod.ru/
И в догонку: http://forum.ru-board.com/topic.cgi?forum=5&topic=1422
А хелпов у тебя нигде нету?
Цитата: littlefrankie
Есть кто в 3д кодит? Как мне из 3D Studio Max импортировать модели в приложенье на Си?? Читал статейку с xdev.ru там объясняется как .Х формат импортировать.
Еще такой вопрос: что за формат такой .Х и чем его создавать, редактировать?? 3д студия вроде его не понимает. Какие еще есть форматы 3д объектов и как их в директ иксах использовать???
Еще такой вопрос: что за формат такой .Х и чем его создавать, редактировать?? 3д студия вроде его не понимает. Какие еще есть форматы 3д объектов и как их в директ иксах использовать???
В 3D Max сохраняешь модель как .3ds (помоему через экспорт делается, уже точно не помню). Потом программкой conv3ds конвертируешь в .X и используешь модель с помощью DirectX.
Цитата:
conv3ds
-------
conv3ds converts 3ds models produced by Autodesk 3D Studio and other
modelling packages into X Files. By default it produces binary X files
with no templates.
За прогу канеш спасибо, но может кто нибудь кинет мне хелп-файлы из сдк? или линк на них?
Цитата: littlefrankie
...но может кто нибудь кинет мне хелп-файлы из сдк? или линк на них?
Линков не знаю, а документация из DirectX v9.0 SDK у меня есть, только она весит 30Mb в архиве. И это еще без примеров.
Цитата: littlefrankie
За прогу канеш спасибо, но может кто нибудь кинет мне хелп-файлы из сдк? или линк на них?
Вот кусок из СДК с примером загрузки объектов из .Х файлов.
Цитата:
Step 1 - Loading a Mesh Object
A Direct3D application must first load a mesh before using it. The Meshes sample project loads the tiger mesh by calling InitGeometry>, an application-defined function, after loading the required Direct3D objects.
A mesh needs a material buffer that will store all the materials and textures that will be used. The function starts by declaring a material buffer as shown in the following code fragment.
LPD3DXBUFFER pD3DXMtrlBuffer;
The following code fragment loads the mesh.
// Load the mesh from the specified file
if( FAILED( D3DXLoadMeshFromX( "Tiger.x", D3DXMESH_SYSTEMMEM,
g_pd3dDevice, NULL, &pD3DXMtrlBuffer, NULL,
&g_dwNumMaterials, &g_pMesh ) ) )
{
// If model is not in current folder, try parent folder
if( FAILED( D3DXLoadMeshFromX( "..\\Tiger.x",
D3DXMESH_SYSTEMMEM, g_pd3dDevice, NULL,
&pD3DXMtrlBuffer, NULL, &g_dwNumMaterials,
&g_pMesh ) ) )
{
MessageBox(NULL, "Could not find tiger.x",
"Meshes.exe", MB_OK);
return E_FAIL;
}
}
The first parameter is a pointer to a string that tells the name of the DirectX file to load. This sample loads the tiger mesh from Tiger.x.
The second parameter specifies how to create the mesh. The sample uses the D3DXMESH_SYSTEMMEM flag, which is equivalent to specifying both D3DXMESH_VB_SYSTEMMEM and D3DXMESH_IB_SYSTEMMEM. Both of these flags put the index buffer and vertex buffer for the mesh in system memory.
The third parameter is a pointer to a device that will be used to render the mesh.
The fourth parameter is a pointer to an ID3DXBuffer object. This object will be filled with information about neighbors for each face. This information is not required for this sample, so this parameter is set to NULL.
The fifth parameter also takes a pointer to an ID3DXBuffer object. After this method is finished, this object will be filled with D3DXMATERIAL structures for the mesh.
The sixth parameter is a pointer to the number of D3DXMATERIAL structures placed into the ppMaterials array after the method returns.
The seventh parameter is the address of a pointer to a mesh object, representing the loaded mesh.
After loading the mesh object and material information, you need to extract the material properties and texture names from the material buffer.
The Meshes sample project does this by first getting the pointer to the material buffer. The following code fragment uses the GetBufferPointer method to get this pointer.
D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
The following code fragment creates new mesh and texture objects based on the total number of materials for the mesh.
g_pMeshMaterials = new D3DMATERIAL9[g_dwNumMaterials];
g_pMeshTextures = new LPDIRECT3DTEXTURE9[g_dwNumMaterials];
For each material in the mesh the following steps occur.
The first step is to copy the material, as shown in the following code fragment.
g_pMeshMaterials = d3dxMaterials.MatD3D;
The second step is to set the ambient color for the material, as shown in the following code fragment.
g_pMeshMaterials.Ambient = g_pMeshMaterials.Diffuse;
The final step is to create the texture for the material, as shown in the following code fragment.
// Create the texture.
if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice,
d3dxMaterials.pTextureFilename, &g_pMeshTextures ) ) )
g_pMeshTextures = NULL;
}
After loading each material, you are finished with the material buffer and need to release it by calling IUnknown.
pD3DXMtrlBuffer->Release();
The mesh, along with the corresponding materials and textures are loaded. The mesh is ready to be rendered to the display, as described in Step 2 - Rendering a Mesh Object.