HRESULT InitScene() { HRESULT hr; LPD3DXBUFFER errors = NULL; D3DVERTEXELEMENT9 decl[] = { { 0, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITIONT, 0 }, { 0, 16, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, D3DDECL_END() }; SetWindowText(hwnd, TITLE); MYVALID(CreateColorTex(device, 0xff77FF70, &texture)); MYVALID(D3DXLoadMeshFromXA("../media/meshes/knot.X", D3DXMESH_MANAGED, device, NULL, NULL, NULL, NULL, &mesh)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/intensity.png", &intensity)); MYVALID(device->CreateTexture(screenwidth, screenheight, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &colortarget, NULL)); MYVALID(device->CreateTexture(screenwidth, screenheight, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &normaltarget, NULL)); MYVALID(device->CreateTexture(screenwidth, screenheight, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &edgetarget, NULL)); MYVALID(device->CreateVertexDeclaration(decl, &vertexdecl)); edgetarget->GetSurfaceLevel(0, &edgesurface); colortarget->GetSurfaceLevel(0, &colorsurface); normaltarget->GetSurfaceLevel(0, &normalsurface); MYVALID(device->CreateTexture(512, 512, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &text, NULL)); MYVALID(DXCreateEffect("../media/shaders/celshading.fx", device, &effect)); DXRenderText(HELP_TEXT, text, 512, 512); D3DXVECTOR3 eye(0.5f, 0.5f, -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; }
HRESULT InitScene() { HRESULT hr; SetWindowText(hwnd, TITLE); MYVALID(D3DXLoadMeshFromX("../media/meshes/sky.X", D3DXMESH_MANAGED, device, NULL, NULL, NULL, NULL, &skymesh)); MYVALID(D3DXLoadMeshFromX("../media/meshes/box.X", D3DXMESH_MANAGED, device, NULL, NULL, NULL, NULL, &mesh)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/fire.png", &texture1)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/stones.jpg", &texture2)); MYVALID(D3DXCreateCubeTextureFromFileA(device, "../media/textures/sky4.dds", &skytex)); MYVALID(device->CreateTexture(512, 512, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &text, NULL)); MYVALID(DXCreateEffect("../media/shaders/skinning.fx", device, &effect)); MYVALID(DXCreateEffect("../media/shaders/sky.fx", device, &skyeffect)); system1.Initialize(device, 500); system1.ParticleTexture = texture1; // load dwarfs dwarfs[0].Effect = effect; dwarfs[0].Method = SM_Shader; dwarfs[0].Path = "../media/meshes/dwarf/"; MYVALID(dwarfs[0].Load(device, "../media/meshes/dwarf/dwarf.X")); dwarfs[0].Clone(dwarfs[1]); dwarfs[0].Clone(dwarfs[2]); dwarfs[0].Clone(dwarfs[3]); dwarfs[0].Clone(dwarfs[4]); dwarfs[0].Clone(dwarfs[5]); D3DXVECTOR3 scale(0.1f, 0.1f, 0.1f); D3DXVECTOR3 trans; D3DXQUATERNION rot; // dwarf 0 trans = D3DXVECTOR3(-1, 0, 1); D3DXQuaternionRotationYawPitchRoll(&rot, -0.785f, 0, 0); D3DXMatrixTransformation(&dwarfmatrices[0], NULL, NULL, &scale, NULL, &rot, &trans); // dwarf 1 trans = D3DXVECTOR3(-1, 0, -1); D3DXQuaternionRotationYawPitchRoll(&rot, -2.356f, 0, 0); D3DXMatrixTransformation(&dwarfmatrices[1], NULL, NULL, &scale, NULL, &rot, &trans); // dwarf 2 trans = D3DXVECTOR3(1, 0, -1); D3DXQuaternionRotationYawPitchRoll(&rot, 2.356f, 0, 0); D3DXMatrixTransformation(&dwarfmatrices[2], NULL, NULL, &scale, NULL, &rot, &trans); // dwarf 3 trans = D3DXVECTOR3(1, 0, 1); D3DXQuaternionRotationYawPitchRoll(&rot, 0.785f, 0, 0); D3DXMatrixTransformation(&dwarfmatrices[3], NULL, NULL, &scale, NULL, &rot, &trans); // dwarf 4 trans = D3DXVECTOR3(-0.2f, 0, -0.2f); D3DXQuaternionRotationYawPitchRoll(&rot, -1.57f, 0, 0); D3DXMatrixTransformation(&dwarfmatrices[4], NULL, NULL, &scale, NULL, &rot, &trans); // dwarf 5 trans = D3DXVECTOR3(0.2f, 0, 0); D3DXQuaternionRotationYawPitchRoll(&rot, -1.57f, 0, 0); D3DXMatrixTransformation(&dwarfmatrices[5], NULL, NULL, &scale, NULL, &rot, &trans); // skins DwarfSkin(0, 1, 1, 3, 1, 1, 3, 0); DwarfSkin(1, 2, 0, 1, 3, 3, 1, 1); DwarfSkin(2, 3, 2, 2, 2, 1, 2, 3); DwarfSkin(3, 1, 3, 2, 1, 3, 0, 2); DwarfSkin(4, 1, 1, 3, 3, 2, 2, 1); DwarfSkin(5, 0, 0, 1, 2, 3, 0, 1); // 0, 1, 2 - dead // 3, 5 - stand // 4 - jump // 6 - cheer with weapon // 7 - cheer with one hand // 8 - cheer with both hands dwarfs[0].SetAnimation(6); dwarfs[1].SetAnimation(8); dwarfs[2].SetAnimation(7); dwarfs[3].SetAnimation(4); dwarfs[4].SetAnimation(2); dwarfs[5].SetAnimation(1); // other device->SetRenderState(D3DRS_LIGHTING, false); device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); DXRenderText(HELP_TEXT, text, 512, 512); cameraangle = D3DXVECTOR2(0.785f, 0.785f); // sound if( SUCCEEDED(InitXAudio2()) ) { firesound = streamer.LoadSound(xaudio2, "../media/sound/fire.ogg"); // create streaming thread and load music worker.Attach<AudioStreamer>(&streamer, &AudioStreamer::Update); worker.Start(); music = streamer.LoadSoundStream(xaudio2, "../media/sound/painkiller.ogg"); } if( music ) { music->GetVoice()->SetVolume(4); music->Play(); } if( firesound ) { firesound->GetVoice()->SetVolume(0.7f); firesound->Play(); } return S_OK; }
HRESULT InitScene() { HRESULT hr; SetWindowText(hwnd, TITLE); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/marble.dds", &texture1)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/wood2.jpg", &texture2)); MYVALID(DXCreateEffect("../media/shaders/ambient.fx", device, &ambient)); MYVALID(DXCreateEffect("../media/shaders/blinnphong.fx", device, &specular)); MYVALID(DXCreateEffect("../media/shaders/extrude.fx", device, &extrude)); MYVALID(device->CreateTexture(512, 128, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &text, NULL)); MYVALID(DXCreateTexturedBox(device, D3DXMESH_MANAGED, &shadowreceiver)); // box MYVALID(DXCreateTexturedBox(device, D3DXMESH_MANAGED, &objects[0].object)); MYVALID(DXCreateCollisionBox(device, D3DXMESH_SYSTEMMEM, &objects[0].caster)); D3DXMatrixTranslation(&objects[0].world, -1.5f, 0.55f, 1.2f); MYVALID(device->CreateVertexBuffer(VOLUME_NUMVERTICES(objects[0].caster->GetNumVertices()) * sizeof(D3DXVECTOR4), D3DUSAGE_DYNAMIC, D3DFVF_XYZW, D3DPOOL_DEFAULT, &objects[0].vertices, NULL)); MYVALID(device->CreateIndexBuffer(VOLUME_NUMINDICES(objects[0].caster->GetNumFaces()) * sizeof(WORD), D3DUSAGE_DYNAMIC, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &objects[0].indices, NULL)); // sphere MYVALID(DXCreateTexturedSphere(device, 0.5f, 30, 30, D3DXMESH_SYSTEMMEM, &objects[1].object)); MYVALID(DXCreateCollisionSphere(device, 0.5f, 30, 30, D3DXMESH_SYSTEMMEM, &objects[1].caster)); D3DXMatrixTranslation(&objects[1].world, 1.0f, 0.55f, 0.7f); MYVALID(device->CreateVertexBuffer(VOLUME_NUMVERTICES(objects[1].caster->GetNumVertices()) * sizeof(D3DXVECTOR4), D3DUSAGE_DYNAMIC, D3DFVF_XYZW, D3DPOOL_DEFAULT, &objects[1].vertices, NULL)); MYVALID(device->CreateIndexBuffer(VOLUME_NUMINDICES(objects[1].caster->GetNumFaces()) * sizeof(WORD), D3DUSAGE_DYNAMIC, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &objects[1].indices, NULL)); // L shape MYVALID(DXCreateTexturedLShape(device, D3DXMESH_MANAGED, &objects[2].object)); MYVALID(DXCreateCollisionLShape(device, D3DXMESH_SYSTEMMEM, &objects[2].caster)); D3DXMatrixTranslation(&objects[2].world, 0, 0.55f, -1); MYVALID(device->CreateVertexBuffer(VOLUME_NUMVERTICES(objects[2].caster->GetNumVertices()) * sizeof(D3DXVECTOR4), D3DUSAGE_DYNAMIC, D3DFVF_XYZW, D3DPOOL_DEFAULT, &objects[2].vertices, NULL)); MYVALID(device->CreateIndexBuffer(VOLUME_NUMINDICES(objects[2].caster->GetNumFaces()) * sizeof(WORD), D3DUSAGE_DYNAMIC, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &objects[2].indices, NULL)); #if 0 D3DXMATERIAL defmat; defmat.pTextureFilename = 0; defmat.MatD3D.Ambient = D3DXCOLOR(1, 1, 1, 1); defmat.MatD3D.Diffuse = D3DXCOLOR(1, 1, 1, 1); defmat.MatD3D.Specular = D3DXCOLOR(1, 1, 1, 1); defmat.MatD3D.Emissive = D3DXCOLOR(0, 0, 0, 0); defmat.MatD3D.Power = 20; DXSaveMeshToQM("../media/meshes10/box.qm", objects[0].object, &defmat, 1); DXSaveMeshToQM("../media/meshes10/collisionbox.qm", objects[0].caster, &defmat, 1); DXSaveMeshToQM("../media/meshes10/sphere.qm", objects[1].object, &defmat, 1); DXSaveMeshToQM("../media/meshes10/collisionsphere.qm", objects[1].caster, &defmat, 1); DXSaveMeshToQM("../media/meshes10/lshape.qm", objects[2].object, &defmat, 1); DXSaveMeshToQM("../media/meshes10/collisionlshape.qm", objects[2].caster, &defmat, 1); #endif // generate edges std::cout << "Generating edge info...\n"; for( int i = 0; i < NUM_OBJECTS; ++i ) GenerateEdges(objects[i].edges, objects[i].caster); // shadow volume decl D3DVERTEXELEMENT9 elem[] = { { 0, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, D3DDECL_END() }; MYVALID(device->CreateVertexDeclaration(elem, &shadowdecl)); // effect specular->SetFloat("ambient", 0); cameraangle = D3DXVECTOR2(0.78f, 0.78f); lightangle = D3DXVECTOR2(2.8f, 0.78f); DXRenderText("Use mouse to rotate camera and light\n\n1: draw silhouette\n2: draw shadow volume", text, 512, 128); return S_OK; }
HRESULT InitScene() { HRESULT hr; D3DVERTEXELEMENT9 elem[] = { { 0, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITIONT, 0 }, { 0, 16, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, D3DDECL_END() }; SetWindowText(hwnd, TITLE); MYVALID(D3DXLoadMeshFromX("../media/meshes/box.X", D3DXMESH_MANAGED, device, NULL, NULL, NULL, NULL, &box)); MYVALID(D3DXLoadMeshFromX("../media/meshes/skullocc3.X", D3DXMESH_MANAGED, device, NULL, NULL, NULL, NULL, &skull)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/marble.dds", &texture1)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/wood2.jpg", &texture2)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/crate.jpg", &texture3)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/pcfnoise.bmp", &noise)); MYVALID(device->CreateTexture(SHADOWMAP_SIZE, SHADOWMAP_SIZE, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A32B32G32R32F, D3DPOOL_DEFAULT, &shadowmap, NULL)); MYVALID(device->CreateTexture(SHADOWMAP_SIZE, SHADOWMAP_SIZE, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A32B32G32R32F, D3DPOOL_DEFAULT, &blurRGBA32F, NULL)); MYVALID(device->CreateTexture(SHADOWMAP_SIZE, SHADOWMAP_SIZE, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &sincoeffs, NULL)); MYVALID(device->CreateTexture(SHADOWMAP_SIZE, SHADOWMAP_SIZE, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &coscoeffs, NULL)); MYVALID(device->CreateTexture(SHADOWMAP_SIZE, SHADOWMAP_SIZE, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &blurARGB8, NULL)); MYVALID(device->CreateTexture(800, 512, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &text, NULL)); MYVALID(device->CreateVertexDeclaration(elem, &vertexdecl)); MYVALID(DXCreateEffect("../media/shaders/exponentialshadow.fx", device, &exponential)); MYVALID(DXCreateEffect("../media/shaders/convolutionshadow.fx", device, &convolution)); MYVALID(DXCreateEffect("../media/shaders/varianceshadow.fx", device, &variance)); MYVALID(DXCreateEffect("../media/shaders/expvarianceshadow.fx", device, &expvariance)); MYVALID(DXCreateEffect("../media/shaders/boxblur5x5.fx", device, &boxblur5x5)); MYVALID(DXCreateEffect("../media/shaders/pcfshadow5x5.fx", device, &pcf5x5)); MYVALID(DXCreateEffect("../media/shaders/pcss.fx", device, &pcss)); MYVALID(DXCreateEffect("../media/shaders/irregularpcf.fx", device, &pcfirreg)); DXRenderText( "Use the mouse to rotate the camera and the light\n\n0 - Unfiltered\n1 - PCF (5x5)\n2 - Irregular PCF\n3 - Variance\n" "4 - Convolution\n5 - Exponential\n6 - Exponential variance\n7 - PCSS", text, 800, 512); cameraangle = D3DXVECTOR2(0.78f, 0.78f); lightangle = D3DXVECTOR2(3.2f, 0.85f); DXAABox boxbb; DXAABox skullbb; DXAABox tmpbb; D3DXMATRIX tmp1, tmp2, tmp3; D3DXVECTOR3* vdata; box->LockVertexBuffer(D3DLOCK_READONLY, (void**)&vdata); D3DXComputeBoundingBox(vdata, box->GetNumVertices(), box->GetNumBytesPerVertex(), &boxbb.Min, &boxbb.Max); box->UnlockVertexBuffer(); skull->LockVertexBuffer(D3DLOCK_READONLY, (void**)&vdata); D3DXComputeBoundingBox(vdata, skull->GetNumVertices(), skull->GetNumBytesPerVertex(), &skullbb.Min, &skullbb.Max); skull->UnlockVertexBuffer(); for( int i = 0; i < numobjects; ++i ) { SceneObject& obj = objects[i]; D3DXMatrixScaling(&tmp1, obj.scale.x, obj.scale.y, obj.scale.z); D3DXMatrixRotationYawPitchRoll(&tmp2, obj.angles.x, obj.angles.y, obj.angles.z); D3DXMatrixTranslation(&tmp3, obj.position.x, obj.position.y, obj.position.z); D3DXMatrixMultiply(&obj.world, &tmp1, &tmp2); D3DXMatrixMultiply(&obj.world, &obj.world, &tmp3); if( obj.type == SKULL ) tmpbb = skullbb; else tmpbb = boxbb; tmpbb.TransformAxisAligned(obj.world); scenebb.Add(tmpbb.Min); scenebb.Add(tmpbb.Max); } return S_OK; }
HRESULT InitScene() { HRESULT hr; D3DCAPS9 caps; SetWindowText(hwnd, TITLE); device->GetDeviceCaps(&caps); if( caps.VertexShaderVersion < D3DVS_VERSION(2, 0) || caps.PixelShaderVersion < D3DPS_VERSION(2, 0) ) { MYERROR("This demo requires Shader Model 2.0 capable video card"); return E_FAIL; } palm = new DXObject(device); sandplane = new DXObject(device); waterplane = new DXObject(device); if( !palm->Load("../media/meshes/palm.qm") ) { MYERROR("Could not load palm"); return E_FAIL; } if( !sandplane->CreatePlane(50, 50, 10, 10) ) { MYERROR("Could not create sand plane"); return E_FAIL; } if( !waterplane->CreatePlane(50, 50, 5, 5) ) { MYERROR("Could not create water plane"); return E_FAIL; } waterplane->GenerateTangentFrame(); MYVALID(D3DXLoadMeshFromXA("../media/meshes/sky.X", D3DXMESH_MANAGED, device, NULL, NULL, NULL, NULL, &skymesh)); MYVALID(D3DXCreateCubeTextureFromFileA(device, "../media/textures/sky7.dds", &skytex)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/bark.jpg", &bark)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/leaf.jpg", &leaves)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/sand.jpg", &sand)); MYVALID(D3DXCreateTextureFromFileA(device, "../media/textures/wave2.png", &waves)); MYVALID(DXCreateEffect("../media/shaders/ambient.fx", device, &ambient)); MYVALID(DXCreateEffect("../media/shaders/blinnphong.fx", device, &specular)); MYVALID(DXCreateEffect("../media/shaders/water.fx", device, &water)); MYVALID(DXCreateEffect("../media/shaders/simplebloom.fx", device, &bloom)); MYVALID(DXCreateEffect("../media/shaders/godray.fx", device, &godray)); MYVALID(DXCreateEffect("../media/shaders/sky.fx", device, &skyeffect)); MYVALID(device->CreateTexture(screenwidth, screenheight, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &refraction, NULL)); MYVALID(device->CreateTexture(screenwidth, screenheight, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &reflection, NULL)); MYVALID(device->CreateTexture(screenwidth, screenheight, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8, D3DPOOL_DEFAULT, &occluders, NULL)); MYVALID(device->CreateTexture(screenwidth, screenheight, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8, D3DPOOL_DEFAULT, &blurtex, NULL)); MYVALID(device->CreateTexture(screenwidth, screenheight, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &sceneldr, NULL)); MYVALID(device->CreateTexture(screenwidth / 2, screenheight / 2, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &bloomtex1, NULL)); MYVALID(device->CreateTexture(screenwidth / 2, screenheight / 2, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &bloomtex2, NULL)); refraction->GetSurfaceLevel(0, &refractsurf); reflection->GetSurfaceLevel(0, &reflectsurf); occluders->GetSurfaceLevel(0, &occludersurf); blurtex->GetSurfaceLevel(0, &blursurf); sceneldr->GetSurfaceLevel(0, &sceneldrsurf); bloomtex1->GetSurfaceLevel(0, &bloomsurf1); bloomtex2->GetSurfaceLevel(0, &bloomsurf2); D3DVERTEXELEMENT9 elem[] = { { 0, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITIONT, 0 }, { 0, 16, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, D3DDECL_END() }; MYVALID(device->CreateVertexDeclaration(elem, &quaddecl)); cameraangle = D3DXVECTOR2(-1.13f * D3DX_PI, 0.55f); return S_OK; }
HRESULT InitScene() { HRESULT hr; D3DDISPLAYMODE mode; if( FAILED(hr = direct3d->GetAdapterDisplayMode(0, &mode)) ) { MYERROR("Could not get adapter mode"); return hr; } if( FAILED(hr = direct3d->CheckDeviceFormat( 0, D3DDEVTYPE_HAL, mode.Format, D3DUSAGE_RENDERTARGET, D3DRTYPE_TEXTURE, D3DFMT_A16B16G16R16F)) ) { MYERROR("No floating point rendertarget support"); return hr; } // más depth/stencil-el még müködhet if( FAILED(hr = direct3d->CheckDepthStencilMatch( 0, D3DDEVTYPE_HAL, mode.Format, D3DFMT_A16B16G16R16F, D3DFMT_D24S8)) ) { MYERROR("D3DFMT_A16B16G16R16F does not support D3DFMT_D24S8"); return hr; } D3DVERTEXELEMENT9 elem[] = { { 0, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITIONT, 0 }, { 0, 16, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, D3DDECL_END() }; SetWindowText(hwnd, TITLE); MYVALID(D3DXLoadMeshFromX("../media/meshes/skullocc3.X", D3DXMESH_MANAGED, device, NULL, NULL, NULL, NULL, &mesh1)); MYVALID(D3DXLoadMeshFromX("../media/meshes//knot.X", D3DXMESH_MANAGED, device, NULL, NULL, NULL, NULL, &mesh2)); MYVALID(D3DXLoadMeshFromX("../media/meshes//teapot.X", D3DXMESH_MANAGED, device, NULL, NULL, NULL, NULL, &mesh3)); MYVALID(D3DXLoadMeshFromX("../media/meshes/sky.X", D3DXMESH_MANAGED, device, NULL, NULL, NULL, NULL, &skymesh)); mesh = mesh1; //MYVALID(D3DXCreateCubeTextureFromFile(device, "../media/textures/altar.dds", &skytexture)); //MYVALID(D3DXCreateCubeTextureFromFile(device, "../media/textures/altar_rough.dds", &roughspecular)); MYVALID(D3DXCreateCubeTextureFromFile(device, "../media/textures/grace.dds", &skytexture)); MYVALID(D3DXCreateCubeTextureFromFile(device, "../media/textures/grace_rough.dds", &roughspecular)); //MYVALID(D3DXCreateCubeTextureFromFile(device, "../media/textures/beach.dds", &skytexture)); //MYVALID(D3DXCreateCubeTextureFromFile(device, "../media/textures/beach_rough.dds", &roughspecular)); //MYVALID(D3DXCreateCubeTextureFromFile(device, "../media/textures/stpeters.dds", &skytexture)); //MYVALID(D3DXCreateCubeTextureFromFile(device, "../media/textures/stpeters_rough.dds", &roughspecular)); MYVALID(D3DXCreateTextureFromFile(device, "../media/textures/gold.jpg", &texture)); MYVALID(D3DXCreateTextureFromFile(device, "../media/textures/fresnel.png", &fresneltexture)); // downsample & blur textures for( int i = 0; i < 5; ++i ) { MYVALID(device->CreateTexture(screenwidth / (2 << i), screenheight / (2 << i), 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &dstargets[i], NULL)); MYVALID(device->CreateTexture(screenwidth / (2 << i), screenheight / (2 << i), 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &blurtargets[i], NULL)); MYVALID(blurtargets[i]->GetSurfaceLevel(0, &blursurfaces[i])); MYVALID(dstargets[i]->GetSurfaceLevel(0, &dssurfaces[i])); } // star textures (8x 1 MB @ 1080p) for( int i = 0; i < 4; ++i ) { for( int j = 0; j < 2; ++j ) { MYVALID(device->CreateTexture(screenwidth / 4, screenheight / 4, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &startargets[i][j], NULL)); MYVALID(startargets[i][j]->GetSurfaceLevel(0, &starsurfaces[i][j])); } } // lens flare textures (2x 4 MB @ 1080p) for( int i = 0; i < 2; ++i ) { MYVALID(device->CreateTexture(screenwidth / 2, screenheight / 2, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &ghosttargets[i], NULL)); MYVALID(ghosttargets[i]->GetSurfaceLevel(0, &ghostsurfaces[i])); } // luminance textures for( int i = 0; i < 4; ++i ) { UINT j = 256 / (4 << (2 * i)); MYVALID(device->CreateTexture(j, j, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, &avglumtargets[i], NULL)); MYVALID(avglumtargets[i]->GetSurfaceLevel(0, &avglumsurfaces[i])); } // adapted luminance textures MYVALID(device->CreateTexture(1, 1, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, &avglumtargets[4], NULL)); MYVALID(device->CreateTexture(1, 1, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, &avglumtargets[5], NULL)); MYVALID(avglumtargets[4]->GetSurfaceLevel(0, &avglumsurfaces[4])); MYVALID(avglumtargets[5]->GetSurfaceLevel(0, &avglumsurfaces[5])); // afterimage textures (2x 4 MB @ 1080p) MYVALID(device->CreateTexture(screenwidth / 2, screenheight / 2, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &afterimages[0], NULL)); MYVALID(device->CreateTexture(screenwidth / 2, screenheight / 2, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &afterimages[1], NULL)); MYVALID(afterimages[0]->GetSurfaceLevel(0, &aftersurfaces[0])); MYVALID(afterimages[1]->GetSurfaceLevel(0, &aftersurfaces[1])); // other MYVALID(device->CreateTexture(512, 512, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &text, NULL)); MYVALID(device->CreateTexture(screenwidth, screenheight, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &scenetarget, NULL)); MYVALID(device->CreateVertexDeclaration(elem, &vertexdecl)); // other MYVALID(scenetarget->GetSurfaceLevel(0, &scenesurface)); MYVALID(DXCreateEffect("../media/shaders/hdreffects.fx", device, &hdreffect)); MYVALID(DXCreateEffect("../media/shaders/hdrfresnel.fx", device, &fresnel)); MYVALID(DXCreateEffect("../media/shaders/sky.fx", device, &skyeffect)); device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE); device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP); device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP); device->SetSamplerState(1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); device->SetSamplerState(1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); device->SetSamplerState(1, D3DSAMP_MIPFILTER, D3DTEXF_NONE); device->SetSamplerState(1, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER); device->SetSamplerState(1, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER); device->SetSamplerState(2, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); device->SetSamplerState(2, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); device->SetSamplerState(2, D3DSAMP_MIPFILTER, D3DTEXF_NONE); device->SetSamplerState(2, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER); device->SetSamplerState(2, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER); device->SetSamplerState(3, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); device->SetSamplerState(3, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); device->SetSamplerState(3, D3DSAMP_MIPFILTER, D3DTEXF_NONE); device->SetSamplerState(4, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); device->SetSamplerState(4, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); device->SetSamplerState(4, D3DSAMP_MIPFILTER, D3DTEXF_NONE); device->SetSamplerState(5, D3DSAMP_MINFILTER, D3DTEXF_POINT); device->SetSamplerState(5, D3DSAMP_MAGFILTER, D3DTEXF_POINT); device->SetSamplerState(5, D3DSAMP_MIPFILTER, D3DTEXF_NONE); DXRenderText(HELP_TEXT, text, 512, 512); // setup camera D3DXMatrixPerspectiveFovLH(&proj, D3DX_PI / 3, (float)screenwidth / (float)screenheight, 1, 50); D3DXMatrixIdentity(&world); cameraangle = D3DXVECTOR2(0.6f, 0.1f); objectangle = D3DXVECTOR2(0, 0); exposurevelocity = 0; destexposurevelocity = 0; exposure = 0.05f; targetluminance = 0.03f; UpdateText(); return S_OK; }