Cześć!
Nie mogę rozwiązać tego problemu więc zwracam się do was mądrzy ludzie:).
Od niedawna uczę się DirectX i doszedłem do wczytywania plików *.x plik się świetnie czytuje ale nie wiem dlaczego nie mogę wczytać textur model wychodzi czarny.
if (FAILED(D3DXCreateTextureFromFile(pDev,
(LPCWSTR)pMeshMaterials[i].pTextureFilename, &pMeshTex[i])))
pMeshTex[i] = NULL;
może to przez tą konwersie w tutorialu było bez tego, ale gdy to usunę visual sypie błąd że niepoprawny typ.
a tak na wszelki wypadek załączam cały kod.
A właśnie czy da się wyłączyć
L"model.x"
żeby przed słowami w cudzysłowu nie stawiać "L" używam visual c++ 2008.
#include <d3dx9.h>
IDirect3D9* pD3D;
IDirect3DDevice9* pDev;
HWND hWnd;
ID3DXEffect* pEffect;
D3DXMATRIX MatView;
D3DXMATRIX MatProj;
bool Run = true;
ID3DXMesh* pMesh;
IDirect3DTexture9** pMeshTex = NULL;
DWORD numMaterials;
void CreateMesh()
{
D3DVERTEXELEMENT9 VertexDecl[] =
{
{0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
{0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
D3DDECL_END()
};
LPD3DXBUFFER materialsBuffer;
D3DXLoadMeshFromX(L"model.x", D3DXMESH_MANAGED, pDev, NULL,
&materialsBuffer, NULL, &numMaterials, &pMesh);
pMesh->CloneMesh(D3DXMESH_MANAGED, VertexDecl, pDev, &pMesh);
D3DXMATERIAL* pMeshMaterials = (D3DXMATERIAL*)materialsBuffer->GetBufferPointer();
pMeshTex = new LPDIRECT3DTEXTURE9[numMaterials];
for( DWORD i = 0; i < numMaterials; i++ )
{
if (FAILED(D3DXCreateTextureFromFile(pDev,
(LPCWSTR)pMeshMaterials[i].pTextureFilename, &pMeshTex[i])))
pMeshTex[i] = NULL;
}
materialsBuffer->Release();
}
void InitWindow()
{
HINSTANCE hProg = GetModuleHandle(0);
WNDCLASS wc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hProg;
wc.lpfnWndProc = DefWindowProc;
wc.lpszClassName = L"WndClass";
wc.lpszMenuName = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wc.hIcon = LoadIcon(0, IDI_WINLOGO);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.hCursor = LoadCursor(0, IDC_ARROW);
RegisterClass(&wc);
hWnd = CreateWindowEx(0, L"WndClass", L"Lekcja 7", WS_OVERLAPPEDWINDOW,
0, 0, 800, 600, 0, 0, hProg, 0);
ShowWindow(hWnd, 5);
}
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
InitWindow();
pD3D = Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = true;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
// Zalaczanie zbuffora:
d3dpp.EnableAutoDepthStencil = true;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &pDev);
pDev->SetRenderState(D3DRS_ZENABLE, true);
pDev->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
ID3DXBuffer* pErrs;
D3DXCreateEffectFromFile(pDev, L"shader.fx", 0, 0, 0, 0, &pEffect, &pErrs);
if (pErrs)
{
MessageBox(hWnd, L"cos", L"zóo", 0);
pErrs->Release();
}
D3DXMatrixPerspectiveFovLH(&MatProj, D3DXToRadian(90), 4/3, 1, 100);
D3DXMatrixLookAtLH(&MatView,
&D3DXVECTOR3(0,0,-3), &D3DXVECTOR3(0,0,0), &D3DXVECTOR3(0,1,0));
CreateMesh();
MSG msg;
while(Run)
{
if (PeekMessage(&msg, 0, 0U, 0U, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
pDev->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
0xffaaaaaa, 1, 0);
pDev->BeginScene();
static float angle = 0.0f;
angle += 0.01f;
D3DXMATRIX matRot, matTrans, matWorld;
D3DXMatrixTranslation(&matTrans, 0,0,5);
D3DXMatrixRotationAxis(&matRot, &D3DXVECTOR3(1,1,0), angle);
matWorld = matRot * matTrans;
D3DXMATRIX mat_worldViewProj = matWorld * MatView * MatProj;
pEffect->SetMatrix("worldViewProj", &mat_worldViewProj);
UINT passes;
D3DXHANDLE tech;
pEffect->FindNextValidTechnique(0, &tech);
pEffect->SetTechnique(tech);
pEffect->Begin(&passes,0);
for (UINT passa = 0; passa < passes; passa++)
{
pEffect->BeginPass(passa);
for (DWORD i = 0; i < numMaterials; i++)
{
pEffect->SetTexture("tex0", pMeshTex[i]);
pEffect->CommitChanges();
pMesh->DrawSubset(i);
}
pEffect->EndPass();
}
pEffect->End();
pDev->EndScene();
pDev->Present(0, 0, 0, 0);
if (GetKeyState(VK_ESCAPE) & 0x0800)
{
Run = false;
}
}
}
pMesh->Release();
for (DWORD i=0; i<numMaterials; i++)
{
if (pMeshTex[i]) pMeshTex[i]->Release();
}
delete[] pMeshTex;
pEffect->Release();
pDev->Release();
pD3D->Release();
}