DirectX pliki *.x

0

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();
}
0

a właśnie zapomniałem znacie jakieś dobre programy do konwersi *.3ds do *.x ?? jeśli tak to bardzo proszę o nazwę link cokolwiek i z góry dzięki:) [soczek]

0

Sprawdź ten programik do konwersji:
http://www.unit1.pl/87,txt

0

Patryk27 dzięki za konwerter:)
I można już zamknąć ten temat udało mi się to w SPACJA końcu wymyślić:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1