TextureManager::TextureManager() { memset(&_viewport, 0, sizeof(_viewport)); CreateChecker(); }
HRESULT InitScene() { HRESULT hr; LPD3DXBUFFER errors = NULL; SetWindowText(hwnd, TITLE); if( FAILED(hr = D3DXLoadMeshFromXA("../media/meshes/sphere.X", D3DXMESH_MANAGED, device, NULL, NULL, NULL, NULL, &mesh)) ) { MYERROR("Could not load sphere"); return hr; } // generate tangent frame LPD3DXMESH newmesh = NULL; D3DVERTEXELEMENT9 decl[] = { { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, { 0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, { 0, 20, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 }, { 0, 32, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0 }, { 0, 44, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BINORMAL, 0 }, D3DDECL_END() }; if( FAILED(hr = mesh->CloneMesh(D3DXMESH_MANAGED, decl, device, &newmesh)) ) { MYERROR("Could not clone mesh"); return hr; } mesh->Release(); mesh = NULL; hr = D3DXComputeTangentFrameEx(newmesh, D3DDECLUSAGE_TEXCOORD, 0, D3DDECLUSAGE_TANGENT, 0, D3DDECLUSAGE_BINORMAL, 0, D3DDECLUSAGE_NORMAL, 0, 0, NULL, 0.01f, 0.25f, 0.01f, &mesh, NULL); newmesh->Release(); if( FAILED(hr) ) { MYERROR("Could not compute tangent frame"); return hr; } if( FAILED(hr = CreateChecker(device, 10, 10, 0xff7557a8, 0xffd8d8d8, &tex)) ) { MYERROR("Could not create texture"); return hr; } if( FAILED(hr = D3DXCreateTextureFromFileA(device, "../media/textures/brick_nh.dds", &normalmap)) ) { MYERROR("Could not load normalmap"); return hr; } hr = D3DXCreateEffectFromFileA(device, "../media/shaders/normal.fx", NULL, NULL, D3DXSHADER_DEBUG, NULL, &effect, &errors); if( FAILED(hr) ) { if( errors ) { char* str = (char*)errors->GetBufferPointer(); std::cout << str << "\n\n"; errors->Release(); } MYERROR("Could not create effect"); return hr; } D3DXVECTOR4 uv(3, 1, 0, 1); effect->SetVector("normuv", &uv); D3DXVECTOR3 eye(0, 0, -1.5f); D3DXVECTOR3 look(0, 0, 0); D3DXVECTOR3 up(0, 1, 0); D3DXMatrixPerspectiveFovLH(&proj, D3DX_PI / 3, (float)screenwidth / (float)screenheight, 0.1f, 10); D3DXMatrixLookAtLH(&view, &eye, &look, &up); D3DXMatrixIdentity(&world); return S_OK; }