XFileDemo::XFileDemo(HINSTANCE hInstance, std::wstring winCaption) : D3DApp(hInstance, winCaption) { InitAllVertexDeclarations(); mGfxStats = new GfxStats(); mCameraRadius = 12.0f; mCameraRotationY = 1.2f * D3DX_PI; mCameraHeight = 6.0f; mLight.dirW = D3DXVECTOR3(0.0f, 1.0f, 2.0f); D3DXVec3Normalize(&mLight.dirW, &mLight.dirW); mLight.ambient = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f); mLight.diffuse = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f); mLight.spec = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f); LoadXFile(L"../src/chap14/XFileDemo/Dwarf.x", &mMesh, mMtrl, mTex); D3DXMatrixIdentity(&mWorld); HR(D3DXCreateTextureFromFile(gd3dDevice, L"../src/chap14/XFileDemo/whitetex.dds", &mWhiteTex)); mGfxStats->addVertices(mMesh->GetNumVertices()); mGfxStats->addTriangles(mMesh->GetNumFaces()); buildFX(); onResetDevice(); }
DiffuseCubeDemo::DiffuseCubeDemo(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } mGfxStats = new GfxStats(); mCameraRadius = 10.0f; mCameraRotationY = 1.2 * D3DX_PI; mCameraHeight = 5.0f; mLightVecW = D3DXVECTOR3(-0.5, 0.75f, -2.0f); D3DXVec3Normalize(&mLightVecW, &mLightVecW); mDiffuseMtrl = D3DXCOLOR(0.0f, 0.0f, 1.0f, 1.0f); mDiffuseLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); D3DXMatrixIdentity(&mWorld); buildVertexBuffer(); buildIndexBuffer(); buildFX(); onResetDevice(); InitAllVertexDeclarations(); }
AmbientDiffuseDemo::AmbientDiffuseDemo(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } mGfxStats = new GfxStats(); mCameraRadius = 10.0f; mCameraRotationY = 1.2 * D3DX_PI; mCameraHeight = 5.0f; mLightVecW = D3DXVECTOR3(0.0, 0.0f, -1.0f); mDiffuseMtrl = D3DXCOLOR(0.0f, 0.0f, 1.0f, 1.0f); mDiffuseLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mAmbientMtrl = D3DXCOLOR(0.0f, 0.0f, 1.0f, 1.0f); mAmbientLight = D3DXCOLOR(0.4f, 0.4f, 0.4f, 1.0f); D3DXMatrixIdentity(&mWorld); HR(D3DXCreateTeapot(gd3dDevice, &mTeapot, 0)); buildFX(); onResetDevice(); InitAllVertexDeclarations(); }
ProjTexDemo::ProjTexDemo(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } InitAllVertexDeclarations(); mGfxStats = new GfxStats(); mSky = new Sky("grassenvmap1024.dds", 10000.0f); LoadXFile("shapes.x", &mSceneMesh, mSceneMtrls, mSceneTextures); D3DXMatrixIdentity(&mSceneWorld); HR(D3DXCreateTextureFromFile(gd3dDevice, "whitetex.dds", &mWhiteTex)); HR(D3DXCreateTextureFromFile(gd3dDevice, "skull.dds", &mSkullTex)); // Build light projective texture matrix. D3DXMATRIX lightView; D3DXVECTOR3 lightPosW(60.0f, 90.0f, 0.0f); D3DXVECTOR3 lightTargetW(0.0f, 0.0f, 0.0f); D3DXVECTOR3 lightUpW(0.0f, 1.0f, 0.0f); D3DXMatrixLookAtLH(&lightView, &lightPosW, &lightTargetW, &lightUpW); D3DXMATRIX lightLens; float lightFOV = D3DX_PI*0.30f; D3DXMatrixPerspectiveFovLH(&lightLens, lightFOV, 1.0f, 1.0f, 200.0f); mLightWVP = mSceneWorld*lightView*lightLens; // Setup a spotlight corresponding to the projector. D3DXVECTOR3 lightDirW = lightTargetW - lightPosW; D3DXVec3Normalize(&lightDirW, &lightDirW); mLight.posW = lightPosW; mLight.dirW = lightDirW; mLight.ambient = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f); mLight.diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mLight.spec = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f); mLight.spotPower = 8.0f; // Initialize camera. gCamera->pos().y = 100.0f; gCamera->pos().z = -100.0f; gCamera->setSpeed(50.0f); mGfxStats->addVertices(mSceneMesh->GetNumVertices()); mGfxStats->addTriangles(mSceneMesh->GetNumFaces()); mGfxStats->addVertices(mSky->getNumVertices()); mGfxStats->addTriangles(mSky->getNumTriangles()); buildFX(); onResetDevice(); }
void PeaksAndValleysApp::initApp() { D3DApp::initApp(); mLand.init(md3dDevice, 129, 129, 1.0f); buildFX(); buildVertexLayouts(); }
MirrorDemo::MirrorDemo(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } InitAllVertexDeclarations(); mGfxStats = new GfxStats(); mCameraRadius = 15.0f; mCameraRotationY = 1.4f * D3DX_PI; mCameraHeight = 5.0f; mLightVecW = D3DXVECTOR3(0.0, 0.707f, -0.707f); mDiffuseLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mAmbientLight = D3DXCOLOR(0.6f, 0.6f, 0.6f, 1.0f); mSpecularLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mWhiteMtrl.ambient = WHITE; mWhiteMtrl.diffuse = WHITE; mWhiteMtrl.spec = WHITE * 0.8f; mWhiteMtrl.specPower = 16.0f; D3DXMatrixIdentity(&mRoomWorld); D3DXMatrixTranslation(&mTeapotWorld, 0.0f, 3.0f, -6.0f); HR(D3DXCreateTextureFromFile(gd3dDevice, "checkboard.dds", &mFloorTex)); HR(D3DXCreateTextureFromFile(gd3dDevice, "brick2.dds", &mWallTex)); HR(D3DXCreateTextureFromFile(gd3dDevice, "ice.dds", &mMirrorTex)); HR(D3DXCreateTextureFromFile(gd3dDevice, "brick1.dds", &mTeapotTex)); HR(D3DXCreateTeapot(gd3dDevice, &mTeapot, 0)); // Generate texture coordinates for the teapot. genSphericalTexCoords(); // Room geometry count. mGfxStats->addVertices(24); mGfxStats->addTriangles(8); // We draw the teapot twice--once normal and once reflected. mGfxStats->addVertices(mTeapot->GetNumVertices() * 2); mGfxStats->addTriangles(mTeapot->GetNumFaces() * 2); buildRoomGeometry(); buildFX(); onResetDevice(); }
SphereCylDemo::SphereCylDemo(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } InitAllVertexDeclarations(); mGfxStats = new GfxStats(); mCameraRadius = 50.0f; mCameraRotationY = 1.2 * D3DX_PI; mCameraHeight = 20.0f; mAmbientLight = WHITE; mDiffuseLight = WHITE; mSpecLight = WHITE; mLightVecW = D3DXVECTOR3(0.0, 0.0f, -1.0f); mGridMtrl = Mtrl(WHITE*0.7f, WHITE, WHITE*0.5f, 16.0f); mCylinderMtrl = Mtrl(WHITE*0.4f, WHITE, WHITE*0.8f, 8.0f); mSphereMtrl = Mtrl(WHITE*0.4f, WHITE, WHITE*0.8f, 8.0f); HR(D3DXCreateCylinder(gd3dDevice, 1.0f, 1.0f, 6.0f, 20, 20, &mCylinder, 0)); HR(D3DXCreateSphere(gd3dDevice, 1.0f, 20, 20, &mSphere, 0)); genSphericalTexCoords(); genCylTexCoords(Z_AXIS); HR(D3DXCreateTextureFromFile(gd3dDevice, "marble.bmp", &mSphereTex)); HR(D3DXCreateTextureFromFile(gd3dDevice, "stone2.dds", &mCylTex)); HR(D3DXCreateTextureFromFile(gd3dDevice, "ground0.dds", &mGridTex)); buildGeoBuffers(); buildFX(); // If you look at the drawCylinders and drawSpheres functions, you see // that we draw 14 cylinders and 14 spheres. int numCylVerts = mCylinder->GetNumVertices() * 14; int numSphereVerts = mSphere->GetNumVertices() * 14; int numCylTris = mCylinder->GetNumFaces() * 14; int numSphereTris = mSphere->GetNumFaces() * 14; mGfxStats->addVertices(mNumGridVertices); mGfxStats->addVertices(numCylVerts); mGfxStats->addVertices(numSphereVerts); mGfxStats->addTriangles(mNumGridTriangles); mGfxStats->addTriangles(numCylTris); mGfxStats->addTriangles(numSphereTris); onResetDevice(); }
void ColoredCubeApp::initApp() { D3DApp::initApp(); mBox.init(md3dDevice, 1.0f); mLine1.init(md3dDevice, 1.0f); mLine2.init(md3dDevice, 1.0f); mLine3.init(md3dDevice, 1.0f); buildFX(); buildVertexLayouts(); }
bool App::init( void ) { if ( !D3DApp::init() ) { return false; } buildGeometryBuffers(); buildFX(); buildVertexLayout(); return true; }
void ColoredCubeApp::initApp() { D3DApp::initApp(); line1.init(md3dDevice, 10.0f, GREEN); line2.init(md3dDevice, 10.0f, BLUE); line3.init(md3dDevice, 10.0f, RED); xLine.init(&line1, Vector3(0,0,0), 5); xLine.setPosition(Vector3(0,0,0)); yLine.init(&line2, Vector3(0,0,0), 5); yLine.setPosition(Vector3(0,0,0)); yLine.setRotationZ(ToRadian(90)); zLine.init(&line3, Vector3(0,0,0), 5); zLine.setPosition(Vector3(0,0,0)); zLine.setRotationY(ToRadian(90)); quad1.init(md3dDevice, 50, CYAN); quad1.setPosition(Vector3(0,-5,0)); quad2.init(md3dDevice, 50, RED); quad2.setPosition(Vector3(0,5,0)); quad3.init(md3dDevice, 50, BEACH_SAND); quad3.setPosition(Vector3(5,5,0)); quad3.setRotXAngle(ToRadian(90)); quad3.setRotYAngle(ToRadian(90)); quad4.init(md3dDevice, 50, BEACH_SAND); quad4.setPosition(Vector3(-5,5,0)); quad4.setRotXAngle(ToRadian(90)); quad4.setRotYAngle(ToRadian(90)); quad4.init(md3dDevice, 50, BEACH_SAND); quad4.setPosition(Vector3(-5,5,0)); quad4.setRotXAngle(ToRadian(90)); quad5.init(md3dDevice, 50, DARKBROWN); quad5.setPosition(Vector3(0,0,-7)); quad5.setRotXAngle(ToRadian(90)); for(int i = 0; i < WALL_SIZE; ++i) { wall[i].init(md3dDevice, 1, GREEN); wall[i].setPosition(Vector3((rand() % MAX_RADIUS) - (MAX_RADIUS / 2), (rand() % MAX_RADIUS) - (MAX_RADIUS / 2), -6)); wall[i].setRotXAngle(ToRadian(90)); wall[i].setRotZAngle(ToRadian(45)); } buildFX(); buildVertexLayouts(); }
GateDemo::GateDemo(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } mGfxStats = new GfxStats(); mCameraRadius = 6.0f; mCameraRotationY = 1.2 * D3DX_PI; mCameraHeight = 3.0f; mLightVecW = D3DXVECTOR3(0.0, 0.707f, -0.707f); mDiffuseLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mAmbientLight = D3DXCOLOR(0.6f, 0.6f, 0.6f, 1.0f); mSpecularLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mGroundMtrl.ambient = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mGroundMtrl.diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mGroundMtrl.spec = D3DXCOLOR(0.4f, 0.4f, 0.4f, 1.0f); mGroundMtrl.specPower = 8.0f; mGateMtrl.ambient = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mGateMtrl.diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mGateMtrl.spec = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f); mGateMtrl.specPower = 8.0f; D3DXMatrixIdentity(&mGroundWorld); D3DXMatrixIdentity(&mGateWorld); HR(D3DXCreateTextureFromFile(gd3dDevice, "ground0.dds", &mGroundTex)); HR(D3DXCreateTextureFromFile(gd3dDevice, "gatea.dds", &mGateTex)); buildGridGeometry(); buildGateGeometry(); mGfxStats->addVertices(mNumGridVertices); mGfxStats->addTriangles(mNumGridTriangles); // Add gate quad vertices. mGfxStats->addVertices(4); mGfxStats->addTriangles(2); buildFX(); onResetDevice(); InitAllVertexDeclarations(); }
SpotlightDemo::SpotlightDemo(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } mGfxStats = new GfxStats(); mCameraRadius = 50.0f; mCameraRotationY = 1.2 * D3DX_PI; mCameraHeight = 20.0f; mAmbientLight = 0.4f*WHITE; mDiffuseLight = WHITE; mSpecLight = WHITE; mAttenuation012 = D3DXVECTOR3(1.0f, 0.0f, 0.0f); mSpotPower = 16.0f; mGridMtrl = Mtrl(BLUE, BLUE, WHITE, 16.0f); mCylinderMtrl = Mtrl(RED, RED, WHITE, 8.0f); mSphereMtrl = Mtrl(GREEN, GREEN, WHITE, 8.0f); HR(D3DXCreateCylinder(gd3dDevice, 1.0f, 1.0f, 6.0f, 20, 20, &mCylinder, 0)); HR(D3DXCreateSphere(gd3dDevice, 1.0f, 20, 20, &mSphere, 0)); buildGeoBuffers(); buildFX(); // If you look at the drawCylinders and drawSpheres functions, you see // that we draw 14 cylinders and 14 spheres. int numCylVerts = mCylinder->GetNumVertices() * 14; int numSphereVerts = mSphere->GetNumVertices() * 14; int numCylTris = mCylinder->GetNumFaces() * 14; int numSphereTris = mSphere->GetNumFaces() * 14; mGfxStats->addVertices(mNumGridVertices); mGfxStats->addVertices(numCylVerts); mGfxStats->addVertices(numSphereVerts); mGfxStats->addTriangles(mNumGridTriangles); mGfxStats->addTriangles(numCylTris); mGfxStats->addTriangles(numSphereTris); onResetDevice(); InitAllVertexDeclarations(); }
TriGridDemo::TriGridDemo(HINSTANCE hInstance, std::wstring winCaption) : D3DApp(hInstance, winCaption) { mGfxStats = new GfxStats(); mCameraRadius = 10.0f; mCameraRotationY = 1.2 * D3DX_PI; mCameraHeight = 5.0f; buildGeoBuffers(); buildFX(); onResetDevice(); InitAllVertexDeclarations(); }
void Pyramid::init(ID3D10Device* pDevice) { md3dDevice = pDevice; mPosition = D3DXVECTOR3(10.0f, -8.0f, -8.0f); D3DXVECTOR3 mOrigin = D3DXVECTOR3(0, 0, 0); mScale = 4.0f; buildFX(); buildVertexLayouts(); D3DXVECTOR3 baseVerts[4]; int iCount = 0; for (int x = -1; x < 2; x += 2) { for (int z = -1; z < 2; z += 2) { D3DXVECTOR3 base = mOrigin - D3DXVECTOR3(0, mScale, 0); baseVerts[iCount++] = base + D3DXVECTOR3( x * mScale * 0.5f, 0, z * mScale * 0.5f); } } mTriangles[0] = Triangle(mOrigin, baseVerts[0], baseVerts[1]); mTriangles[1] = Triangle(mOrigin, baseVerts[1], baseVerts[3]); mTriangles[2] = Triangle(mOrigin, baseVerts[3], baseVerts[2]); mTriangles[3] = Triangle(mOrigin, baseVerts[2], baseVerts[0]); mTriangles[4] = Triangle(baseVerts[1], baseVerts[0], baseVerts[2]); mTriangles[5] = Triangle(baseVerts[1], baseVerts[2], baseVerts[3]); calcNorm(&mNormals[0], mTriangles[0]); calcNorm(&mNormals[1], mTriangles[1]); calcNorm(&mNormals[2], mTriangles[2]); calcNorm(&mNormals[3], mTriangles[3]); D3D10_BUFFER_DESC vbd; vbd.Usage = D3D10_USAGE_IMMUTABLE; vbd.ByteWidth = 6 * sizeof(Triangle); vbd.BindFlags = D3D10_BIND_VERTEX_BUFFER; vbd.CPUAccessFlags = 0; vbd.MiscFlags = 0; D3D10_SUBRESOURCE_DATA vinitData; vinitData.pSysMem = mTriangles; HR(md3dDevice->CreateBuffer(&vbd, &vinitData, &mVB)); mNumVertices = 18; }
StencilMirrorDemo::StencilMirrorDemo(HINSTANCE hInstance, std::wstring winCaption) : D3DApp(hInstance, winCaption) { InitAllVertexDeclarations(); mGfxStats = new GfxStats(); mCameraRadius = 15.0f; mCameraRotationY = 1.4f * D3DX_PI; mCameraHeight = 5.0f; mLightVecW = D3DXVECTOR3(0.0f, 0.707f, -0.707f); mDiffuseLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mAmbientLight = D3DXCOLOR(0.6f, 0.6f, 0.6f, 1.0f); mSpecularLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mWhiteMtrl.ambient = WHITE; mWhiteMtrl.diffuse = WHITE; mWhiteMtrl.spec = WHITE * 0.8f; mWhiteMtrl.specPower = 16.0f; D3DXMatrixIdentity(&mRoomWorld); D3DXMatrixTranslation(&mTeapotWorld, 0.0f, 3.0f, -6.0f); HR(D3DXCreateTextureFromFile(gd3dDevice, L"../src/chap13/StencilMirror/checkboard.dds", &mFloorTex)); HR(D3DXCreateTextureFromFile(gd3dDevice, L"../src/chap13/StencilMirror/brick2.dds", &mWallTex)); HR(D3DXCreateTextureFromFile(gd3dDevice, L"../src/chap13/StencilMirror/ice.dds", &mMirrorTex)); HR(D3DXCreateTextureFromFile(gd3dDevice, L"../src/chap13/StencilMirror/brick1.dds", &mTeapotTex)); HR(D3DXCreateTeapot(gd3dDevice, &mTeapot, 0)); genSphericalTexCoords(); mGfxStats->addVertices(24); mGfxStats->addTriangles(8); mGfxStats->addVertices(mTeapot->GetNumVertices()*2); mGfxStats->addTriangles(mTeapot->GetNumFaces()*2); buildRoomGeometry(); buildFX(); onResetDevice(); }
MultiTexDemo::MultiTexDemo(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } mGfxStats = new GfxStats(); mCameraRadius = 6.0f; mCameraRotationY = 1.2 * D3DX_PI; mCameraHeight = 3.0f; mLightVecW = D3DXVECTOR3(0.0, 0.707f, -0.707f); mDiffuseMtrl = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mDiffuseLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mAmbientMtrl = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mAmbientLight = D3DXCOLOR(0.6f, 0.6f, 0.6f, 1.0f); mSpecularMtrl = D3DXCOLOR(0.4f, 0.4f, 0.4f, 1.0f); mSpecularLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mSpecularPower = 8.0f; D3DXMatrixIdentity(&mWorld); // Load textures from file. HR(D3DXCreateTextureFromFile(gd3dDevice, "grass0.dds", &mTex0)); HR(D3DXCreateTextureFromFile(gd3dDevice, "stone2.dds", &mTex1)); HR(D3DXCreateTextureFromFile(gd3dDevice, "ground0.dds", &mTex2)); HR(D3DXCreateTextureFromFile(gd3dDevice, "blendmap.jpg", &mBlendMap)); buildGridGeometry(); mGfxStats->addVertices(mNumGridVertices); mGfxStats->addTriangles(mNumGridTriangles); buildFX(); onResetDevice(); InitAllVertexDeclarations(); }
void ColoredTriangleApp::initApp() { D3DApp::initApp(); DWORD mNumVertices = 3; DWORD mNumFaces = 1; // 2 per quad scale=2.0f; // Create vertex buffer Vertex vertices[] = { {D3DXVECTOR3(-1.0f, -1.0f, 0.0f)}, {D3DXVECTOR3(-1.0f, +1.0f, 0.0f)}, {D3DXVECTOR3(+1.0f, +1.0f, 0.0f)}, }; // Scale the geometry. /*for(DWORD i = 0; i < mNumVertices; ++i){ vertices[i].pos *= scale; }*/ obj1.init(md3dDevice,mNumVertices,mNumFaces); obj1.scale = D3DXVECTOR3(scale,scale,scale); obj1.theta = D3DXVECTOR3(0,0.005f,0); //declare vertex buffer D3D10_BUFFER_DESC vbd; vbd.Usage = D3D10_USAGE_IMMUTABLE; vbd.ByteWidth = sizeof(Vertex) * mNumVertices; vbd.BindFlags = D3D10_BIND_VERTEX_BUFFER; vbd.CPUAccessFlags = 0; vbd.MiscFlags = 0; D3D10_SUBRESOURCE_DATA vinitData; vinitData.pSysMem = vertices; HR(md3dDevice->CreateBuffer(&vbd, &vinitData, &mVB)); buildRasterizer(); buildFX(); buildVertexLayouts(); }
Game::Game(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } gMyGameWorld = new MyGameWorld(); gMyGameWorld->Initialize(); mFPS = 0.0f; mMilliSecPerFrame = 0.0f; D3DXFONT_DESC fontDesc; fontDesc.Height = 18; fontDesc.Width = 0; fontDesc.Weight = 0; fontDesc.MipLevels = 1; fontDesc.Italic = false; fontDesc.CharSet = DEFAULT_CHARSET; fontDesc.OutputPrecision = OUT_DEFAULT_PRECIS; fontDesc.Quality = DEFAULT_QUALITY; fontDesc.PitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; strcpy_s(fontDesc.FaceName, _T("Times New Roman")); HR(D3DXCreateFontIndirect(gd3dDevice, &fontDesc, &mFont)); if(!SUCCEEDED(D3DXCreateSprite(gd3dDevice, &mSprite))) { MessageBox(0, "Sprite Creation Failed", "Uh Oh", MB_ICONEXCLAMATION); } buildFX(); onResetDevice(); InitAllVertexDeclarations(); }
void CrateApp::initApp() { D3DApp::initApp(); mClearColor = D3DXCOLOR(0.9f, 0.9f, 0.9f, 1.0f); buildFX(); buildVertexLayouts(); mCrateMesh.init(md3dDevice, 1.0f); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"10.jpg", 0, 0, &mDiffuseMapRV, 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"defaultspec.dds", 0, 0, &mSpecMapRV, 0 )); mParallelLight.dir = D3DXVECTOR3(0.57735f, -0.57735f, 0.57735f); mParallelLight.ambient = D3DXCOLOR(0.4f, 0.4f, 0.4f, 1.0f); mParallelLight.diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mParallelLight.specular = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); }
AmbientDiffuseDemo::AmbientDiffuseDemo(HINSTANCE hInstance, std::wstring winCaption) : D3DApp(hInstance, winCaption) { mGfxStats = new GfxStats(); mCameraRadius = 10.0f; mCameraRotationY = 1.2 * D3DX_PI; mCameraHeight = 5.0f; mLightVecW = D3DXVECTOR3(0.0f, 0.0f, -1.0f); mDiffuseMtrl = D3DXCOLOR(0.0f, 1.0f, 0.0f, 1.0f); mDiffuseLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mAmbientMtrl = D3DXCOLOR(0.0f, 0.0f, 1.0f, 1.0f); mAmbientLight = D3DXCOLOR(0.4f, 0.4f, 0.4f, 1.0f); D3DXMatrixIdentity(&mWorld); HR(D3DXCreateTeapot(gd3dDevice, &mTeapot, 0)); buildFX(); onResetDevice(); InitAllVertexDeclarations(); }
bool MyApp::initialise(HINSTANCE hInstance, int cmdShow) { if (!DxApp::initialise(hInstance, cmdShow, 1024, 768)) return false; // Build FXs if (FAILED(buildFX())) { MessageBox(hWnd(), L"Cannot create effects", L"Error", MB_OK|MB_ICONERROR); return false; } // Build Geometry if (FAILED(buildGeometry())) { MessageBox(hWnd(), L"Cannot create geometry", L"Error", MB_OK|MB_ICONERROR); return false; } // Textures HRESULT hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("noise_texture.jpg")).c_str(), 0, 0, &m_srvRandom, 0); if (FAILED(hr)) { MessageBoxA(0, "Error loading random texture", 0, 0); return false; } // flags for heightmap texture D3DX11_IMAGE_LOAD_INFO loadInfo; loadInfo.Width = D3DX11_DEFAULT; loadInfo.Height = D3DX11_DEFAULT; loadInfo.Depth = D3DX11_DEFAULT; loadInfo.FirstMipLevel = D3DX11_DEFAULT; loadInfo.MipLevels = D3DX11_DEFAULT; loadInfo.Usage = (D3D11_USAGE)D3DX11_DEFAULT; loadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; //D3DX11_DEFAULT; loadInfo.CpuAccessFlags = loadInfo.MiscFlags = D3DX11_DEFAULT; loadInfo.Format = DXGI_FORMAT_R32G32B32A32_FLOAT ; loadInfo.Filter = D3DX11_DEFAULT; loadInfo.MipFilter = D3DX11_DEFAULT; loadInfo.pSrcInfo = NULL; hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("heightmap.jpg")).c_str(), &loadInfo, 0, &m_srvTerrainHmap, 0); if (FAILED(hr)) { MessageBoxA(0, "Error loading terrain heightmap", 0, 0); return false; } hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("normalmap.bmp")).c_str(), 0, 0, &m_srvTerrainNmap, 0); if (FAILED(hr)) { MessageBoxA(0, "Error loading terrain normalmap", 0, 0); return false; } hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("space_ship.jpg")).c_str(), 0, 0, &m_srvSpaceship, 0); if (FAILED(hr)) { MessageBoxA(0, "Error loading spaceship texture", 0, 0); return false; } // Dynamic terrain ID3D11Resource* resHmap = 0; m_srvTerrainHmap->GetResource(&resHmap); D3D11_RENDER_TARGET_VIEW_DESC rtd; rtd.Format = DXGI_FORMAT_R32G32B32A32_FLOAT ; rtd.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; rtd.Texture2D.MipSlice = 0; hr = _dxDev->CreateRenderTargetView(resHmap, &rtd, &m_rtvDynamicHmap); if (FAILED(hr)) { MessageBoxA(0, "Error creating hmap rtv", 0, 0); return false; } //////////////////////////////////// //rs_Wireframe D3D11_RASTERIZER_DESC rsd; ZeroMemory(&rsd, sizeof(rsd)); rsd.FillMode = D3D11_FILL_WIREFRAME; rsd.CullMode = D3D11_CULL_BACK; rsd.DepthClipEnable = true; hr = _dxDev->CreateRasterizerState(&rsd, &rs_Wireframe); if (FAILED(hr)) MessageBoxA(0, "error creating rs Wireframe", 0, 0); // Camera m_camera.setProjection(0.7f, width()/(float)height(), 1.0f, 500.0f); m_camera.setPosVector(0.0f, 30.0f, 0.0f); m_camera.setRightVector(1.0f, 0.0f, 0.0f); m_camera.setUpVector(0.0f, 1.0f, 0.0f); m_camera.setLookVector(0.0f, 0.0f, 1.0f); // myAlien myAlien.setPos(0,5,0); myAlien.type = AlienTypes::GS_ALIEN; myAlien.mesh = alienMesh; // Textures/Views for Implicit surfaces if (!createImplicitResources()) return false; // Tessellation - control point(s) buffer //____ check for DX11 support__ if (dx11Support()) { // Single control point vertex buffer D3D11_BUFFER_DESC bdsc; bdsc.BindFlags = D3D11_BIND_VERTEX_BUFFER; bdsc.CPUAccessFlags = 0; bdsc.MiscFlags = 0; bdsc.StructureByteStride = 0; bdsc.Usage = D3D11_USAGE_IMMUTABLE; #ifdef _TESS_INDEX_BUFFER // Version 2 : 6 vertices - W/ Index Buffer const int numVertices = 6; Vertex ctrl_point[numVertices]; bdsc.ByteWidth = sizeof(Vertex)*numVertices; ZeroMemory(ctrl_point, sizeof(Vertex)*numVertices); ctrl_point[0].position = XMFLOAT3( 0.0f, 1.0f, 0.0f); // top ctrl_point[1].position = XMFLOAT3(-1.0f, 0.0f, 1.0f); // 1 ------> 2 (+,+) ctrl_point[2].position = XMFLOAT3( 1.0f, 0.0f, 1.0f); // ctrl_point[3].position = XMFLOAT3(-1.0f, 0.0f, -1.0f); // ctrl_point[4].position = XMFLOAT3( 1.0f, 0.0f, -1.0f); // (-,-) 3 ------> 4 ctrl_point[5].position = XMFLOAT3( 0.0f, -1.0f, 0.0f); // bottom UINT indices[24]; // top-front indices[0] = 0; indices[1] = 4; indices[2] = 3; // top-right indices[3] = 0; indices[4] = 2; indices[5] = 4; // top-left indices[6] = 0; indices[7] = 3; indices[8] = 1; // top-back indices[9] = 0; indices[10] = 1; indices[11] = 2; // bottom-front indices[12] = 5; indices[13] = 3; indices[14] = 4; // bottom-right indices[15] = 5; indices[16] = 4; indices[17] = 2; // bottom-left indices[18] = 5; indices[19] = 1; indices[20] = 3; // bottom-back indices[21] = 5; indices[22] = 2; indices[23] = 1; D3D11_BUFFER_DESC idsc; idsc.BindFlags = D3D11_BIND_INDEX_BUFFER; idsc.CPUAccessFlags = 0; idsc.MiscFlags = 0; idsc.StructureByteStride = 0; idsc.Usage = D3D11_USAGE_IMMUTABLE; idsc.ByteWidth = sizeof(UINT) * 24; D3D11_SUBRESOURCE_DATA ibdata; ibdata.pSysMem = indices; ibdata.SysMemPitch = ibdata.SysMemSlicePitch = 0; // create index buffer hr = _dxDev->CreateBuffer(&idsc, &ibdata, &m_ibControlPoints); #else // Version 1 : 24 vertices - No Index Buffer const int numVertices = 3*8; // triangle list - 8 triangles Vertex ctrl_point[numVertices]; bdsc.ByteWidth = sizeof(Vertex) * numVertices; // three control points ZeroMemory(ctrl_point, sizeof(Vertex)*numVertices); // octahedron // CW // top - front ctrl_point[0].position = XMFLOAT3( 0.0f, 1.0f, 0.0f); ctrl_point[1].position = XMFLOAT3( 1.0f, 0.0f, -1.0f); ctrl_point[2].position = XMFLOAT3(-1.0f, 0.0f, -1.0f); // top - right ctrl_point[3].position = XMFLOAT3( 0.0f, 1.0f, 0.0f); ctrl_point[4].position = XMFLOAT3( 1.0f, 0.0f, 1.0f); ctrl_point[5].position = XMFLOAT3( 1.0f, 0.0f, -1.0f); // top - left ctrl_point[6].position = XMFLOAT3( 0.0f, 1.0f, 0.0f); ctrl_point[7].position = XMFLOAT3(-1.0f, 0.0f, -1.0f); ctrl_point[8].position = XMFLOAT3( -1.0f, 0.0f, 1.0f); // top - back ctrl_point[9].position = XMFLOAT3( 0.0f, 1.0f, 0.0f); ctrl_point[10].position = XMFLOAT3(-1.0f, 0.0f, 1.0f); ctrl_point[11].position = XMFLOAT3( 1.0f, 0.0f, 1.0f); // bottom - front ctrl_point[12].position = XMFLOAT3( 0.0f, -1.0f, 0.0f); ctrl_point[13].position = XMFLOAT3(-1.0f, 0.0f, -1.0f); ctrl_point[14].position = XMFLOAT3( 1.0f, 0.0f, -1.0f); // bottom - right ctrl_point[15].position = XMFLOAT3( 0.0f, -1.0f, 0.0f); ctrl_point[16].position = XMFLOAT3( 1.0f, 0.0f, -1.0f); ctrl_point[17].position = XMFLOAT3( 1.0f, 0.0f, 1.0f); // bottom - left ctrl_point[18].position = XMFLOAT3( 0.0f, -1.0f, 0.0f); ctrl_point[19].position = XMFLOAT3(-1.0f, 0.0f, 1.0f); ctrl_point[20].position = XMFLOAT3(-1.0f, 0.0f, -1.0f); // bottom - back ctrl_point[21].position = XMFLOAT3( 0.0f, -1.0f, 0.0f); ctrl_point[22].position = XMFLOAT3( 1.0f, 0.0f, 1.0f); ctrl_point[23].position = XMFLOAT3(-1.0f, 0.0f, 1.0f); #endif D3D11_SUBRESOURCE_DATA bdata; bdata.pSysMem = ctrl_point; bdata.SysMemPitch = bdata.SysMemSlicePitch = 0; hr = _dxDev->CreateBuffer(&bdsc, &bdata, &m_vbControlPoints); if (FAILED(hr)) { MessageBoxA(0, "Error creating control points buffer", 0, 0); return false; } // Bezier surface effect if (!createEffect((PATH_SHADERS+string("tessBezierSurface.fxo")).c_str(), &m_fxTessBezierSurface)) MessageBoxA(0, "Error creating bezSurface effect", 0, 0); // PSP surface effect if (!createEffect((PATH_SHADERS+string("tessPSPSurface.fxo")).c_str(), &m_fxTessPSPSurface)) MessageBoxA(0, "Error creating pspSurface effect", 0, 0); // Sphere effect if (!createEffect((PATH_SHADERS+string("tessSphere.fxo")).c_str(), &m_fxTessSphere)) MessageBoxA(0, "Error creating tessSphere effect", 0, 0); // Mesh effect if (!createEffect((PATH_SHADERS+string("tessMesh.fxo")).c_str(), &m_fxTessMesh)) MessageBoxA(0, "Error creating tessMesh effect", 0, 0); // Terrain effect if (!createEffect((PATH_SHADERS+string("tessTerrain.fxo")).c_str(), &m_fxTessTerrain)) MessageBoxA(0, "Error creating tessMesh effect", 0, 0); ///____SINGLE_________ ZeroMemory(&bdsc, sizeof(bdsc)); bdsc.BindFlags = D3D11_BIND_VERTEX_BUFFER; bdsc.ByteWidth = sizeof(Vertex); bdsc.Usage = D3D11_USAGE_IMMUTABLE; Vertex vSingle[1]; ZeroMemory(&vSingle, sizeof(vSingle)); ZeroMemory(&bdata, sizeof(bdata)); bdata.pSysMem = vSingle; hr = _dxDev->CreateBuffer(&bdsc, &bdata, &m_vbSingle); if (FAILED(hr)) MessageBoxA(0, "Error creating single VB", 0, 0); if (!createEffect((PATH_SHADERS+string("tessSingle.fxo")).c_str(), &m_fxTessSingle)) MessageBoxA(0, "Error creating tessSingle effect", 0, 0); //_____________________ } mySphere.tessFactor = 5; mySphere.radius = 10.0f; setupScene(); // GUI TwInit(TW_DIRECT3D11, _dxDev); TwWindowSize(width(), height()); TwBar* myBar; myBar = TwNewBar("myBar"); TwAddButton(myBar, "Play", callback_Play, (void*)this, 0); TwAddButton(myBar, "Explode", callback_Explode, (void*)this, 0); // __________GS Alien TwAddVarRW(myBar, "Thorn length", TW_TYPE_FLOAT, &glb_fThornLength, "group=GS_Alien min=0.0 max=1.0 step=0.05"); // __________Selected Tessellated Object // Partitioning TwEnumVal twTessPartitioning[] = { { TessPartitioning::FRAC_EVEN, "Frac. Even" }, { TessPartitioning::FRAC_ODD, "Frac. Odd" }, { TessPartitioning::INTEGER, "Integer" }, { TessPartitioning::POW2 , "Pow2" } }; TwType twTessPartition; twTessPartition = TwDefineEnum("TessPartitioning", twTessPartitioning, 4); TwAddVarRW(myBar, "Partitioning Method", twTessPartition, &glb_selectedTessPartitioning, "group=Tessellated_Objects"); // Wireframe TwAddVarRW(myBar, "Wireframe", TW_TYPE_BOOL8, &glb_tessWireframe, "group=Tessellated_Objects"); // Inside Factor TwAddVarRW(myBar, "Inside Factor", TW_TYPE_FLOAT, &glb_insideTess, "group=Tessellated_Objects min=1 max=64 step=1"); // Edge Factor TwAddVarRW(myBar, "Edge Factor", TW_TYPE_FLOAT, &glb_edgeTess, "group=Tessellated_Objects min=1 max=64 step=1"); // Common inside/edge factor TwAddVarRW(myBar, "Common Factor", TW_TYPE_FLOAT, &glb_SingleTessFactor, "group=Tessellated_Objects min=1 max=64 step=1"); TwAddVarRW(myBar, "Single Factor", TW_TYPE_BOOL8, &glb_bSingleTessFactor, ""); ///////////////////// TwAddVarRW(myBar, "Terrain Height", TW_TYPE_FLOAT, &glb_terrainHeight, "group=Terrain min=0.0 max=1.0 step=0.05"); TwAddVarRW(myBar, "Patches Dimension", TW_TYPE_INT32, &glb_terrainPatchDim, "group=Terrain min=1 max=10 step=1"); TwAddVarRW(myBar, "Min Tess. Factor", TW_TYPE_FLOAT, &glb_terrainMinTessFactor, "group=Terrain min=1 max=63 step=1"); TwAddVarRW(myBar, "Max Tess. Factor", TW_TYPE_FLOAT, &glb_terrainMaxTessFactor, "group=Terrain min=1 max=63 step=1"); TwAddVarRW(myBar, "Min View Dist", TW_TYPE_FLOAT, &glb_terrainMinViewDist, "group=Terrain min=0.0 max=300.0 step=1.05"); TwAddVarRW(myBar, "Max View Dist", TW_TYPE_FLOAT, &glb_terrainMaxViewDist, "group=Terrain min=0.0 max=300.0 step=1.05"); TwAddVarRW(myBar, "Debug View", TW_TYPE_BOOL8, &glb_bTerrainDebugView, "group=Terrain"); // Terrain Editing TwAddVarRW(myBar, "Power", TW_TYPE_BOOL8, &glb_bOn, "group=Terrain_Edit"); TwAddVarRW(myBar, "Additive", TW_TYPE_BOOL8, &glb_bAdditive, "group=Terrain_Edit"); TwAddVarRW(myBar, "Range", TW_TYPE_FLOAT, &glb_Range, "group=Terrain_Edit min=0.0 max=1.0 step=0.05"); // Light TwAddVarRW(myBar, "Light Direction", TW_TYPE_DIR3F, &glb_lightDir, ""); TwAddVarRW(myBar, "Light Color", TW_TYPE_COLOR4F, &glb_lightColor, ""); // Implicit Depth TwAddVarRW(myBar, "Implicit Depth", TW_TYPE_INT32, &glb_iImplicitDepth, "group=Implicit min=1 max=3"); TwAddVarRW(myBar, "Wireframe Mode", TW_TYPE_BOOL8, &glb_bWireframe, ""); TwAddVarRW(myBar, "Sphere From Mesh", TW_TYPE_BOOL8, &glb_bSphereMesh, ""); return true; }
void ColoredCubeApp::initApp() { D3DApp::initApp(); buildFX(); buildVertexLayouts(); mBox.init(md3dDevice, 1.0f, D3DXCOLOR(0.5,0.5,0.5,1)); redBox.init(md3dDevice, 1.0f, DARKBROWN); greenBox.init(md3dDevice, 1.0f, D3DXCOLOR(0.1,0.1,0.8,1)); shootBox.init(md3dDevice, 1.0f, BEACH_SAND); line.init(md3dDevice, 1.0f, DARKBROWN); line2.init(md3dDevice, 1.0f, RED); line3.init(md3dDevice, 1.0f, GREEN); /*xLine.init(&line, mfxWVPVar, Vector3(0,0,0), 1); xLine.setPosition(Vector3(0,0,0)); yLine.init(&line, mfxWVPVar, Vector3(0,0,0), 1); yLine.setPosition(Vector3(0,0,0)); yLine.setRotationZ(ToRadian(90)); zLine.init(&line, mfxWVPVar, Vector3(0,0,0), 1); zLine.setPosition(Vector3(0,0,0)); zLine.setRotationY(ToRadian(90));*/ shootCube.init(&shootBox,mfxWVPVar,sqrt(2.0f),Vector3(10,0,10),Vector3(0,0,0),0,Vector3(1,1,1)); //shootCube.setRotation(Vector3(ToRadian(-20),ToRadian(45),0)); leftWall.init(&redBox,mfxWVPVar,sqrt(2.0f),Vector3(20,0,0),Vector3(0,0,0),0,Vector3(0.5,20,100)); //leftWall.setRotation(Vector3(ToRadian(-20),ToRadian(45),0)); floor.init(&redBox,mfxWVPVar,sqrt(2.0f),Vector3(0,-5,0),Vector3(0,0,0),0,Vector3(20,0.2,20)); //floor.setRotation(Vector3(ToRadian(-26),ToRadian(45),0)); ceiling.init(&mBox,mfxWVPVar,sqrt(2.0f),Vector3(0,20,0),Vector3(0,0,0),0,Vector3(20,0.2,100)); ceiling.setRotation(Vector3(ToRadian(-20),ToRadian(45),0)); rightWall.init(&redBox,mfxWVPVar,sqrt(2.0f),Vector3(-20,0,0),Vector3(0,0,0),0,Vector3(0.5,20,100)); //rightWall.setRotation(Vector3(ToRadian(-20),ToRadian(45),0)); //srand(time(0)); for(int i = 0; i < 20; i++) { tiles[i].init(&greenBox,mfxWVPVar,sqrt(2.0f),Vector3((-5+rand()%10)*3,-100,(-5+rand()%10)*3),Vector3(0,0,0),0,Vector3(1,1,1)); } origin.init(&line,&line2,&line3,mfxWVPVar,10); quad1.init(md3dDevice, 10, CYAN); quad1.setPosition(Vector3(0,0,0)); spinAmount = 0; // init sound system audio = new Audio(); if (*WAVE_BANK != '\0' && *SOUND_BANK != '\0') // if sound files defined { if( FAILED( hr = audio->initialize() ) ) { exit(1); //if( hr == HRESULT_FROM_WIN32( ERROR_FILE_NOT_FOUND ) ) // throw(GameError(gameErrorNS::FATAL_ERROR, "Failed to initialize sound system because media file not found.")); //else // throw(GameError(gameErrorNS::FATAL_ERROR, "Failed to initialize sound system.")); } } hitCubes = new CubeHoard(100,10,5,5,1,-15,15,-15,15,-100,40); hitCubes->init(&redBox,mfxWVPVar,sqrt(4.0f),Vector3(0,0,0),Vector3(0,100,0),70,Vector3(2,2,2)); avoidCubes = new CubeHoard(100,20,10,10,1,-20,20,-20,20,-100,50); avoidCubes->init(&greenBox,mfxWVPVar,sqrt(4.0f),Vector3(0,0,0),Vector3(0,100,0),70,Vector3(2,2,2)); audio->playCue(MUSIC); //input->initialize(this->getMainWnd(), false); }
Evolution::Evolution(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD reqVertPrcs) : D3DApp(hInstance, winCaption, devType, reqVertPrcs) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } if ( D3DXCreateTextureFromFile(gd3dDevice, "Lifeform.bmp", &mLifeformTex) ) { MessageBox(0, "Lifeform.bmp not found! D:", 0, 0); PostQuitMessage(0); } if ( D3DXCreateTextureFromFile(gd3dDevice, "CarnParts.bmp", &mCarnTex) ) { MessageBox(0, "CarnParts.bmp not found! D:", 0, 0); PostQuitMessage(0); } if ( D3DXCreateTextureFromFile(gd3dDevice, "SightParts.bmp", &mSightTex) ) { MessageBox(0, "SightParts.bmp not found! D:", 0, 0); PostQuitMessage(0); } if ( D3DXCreateTextureFromFile(gd3dDevice, "Food.bmp", &mFoodTex) ) { MessageBox(0, "Food.bmp not found! D:", 0, 0); PostQuitMessage(0); } if ( D3DXCreateTextureFromFile(gd3dDevice, "Egg.bmp", &mEggTex) ) { MessageBox(0, "Egg.bmp not found! D:", 0, 0); PostQuitMessage(0); } D3DXFONT_DESC fontDesc; fontDesc.Height = 18; fontDesc.Width = 0; fontDesc.Weight = FW_SEMIBOLD; fontDesc.MipLevels = 1; fontDesc.Italic = false; fontDesc.CharSet = DEFAULT_CHARSET; fontDesc.OutputPrecision = OUT_DEFAULT_PRECIS; fontDesc.Quality = DEFAULT_QUALITY; fontDesc.PitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; _tcscpy(fontDesc.FaceName, _T("Times New Roman")); HR(D3DXCreateFontIndirect(gd3dDevice, &fontDesc, &mFont)); mGfxStats = new GfxStats(); mCameraPos = D3DXVECTOR3(0.0f, 0.0f, -800.0f); mTimeSpeed = 1.0f; mTrueTime = 0.0f; mCoolTime = 0.0f; mbFollow = false; mFollowNumber = 0.0f; mFollowPos = D3DXVECTOR3(0.0f, 0.0f, 0.0f); mbLStart = true; mbEFStart = true; mbDrawInfo = false; buildBuffers(); buildFX(); onResetDevice(); InitAllVertexDeclarations(); }
void ColoredCubeApp::initApp() { D3DApp::initApp(); myOutFile.open("debug.txt"); fx::InitAll(md3dDevice); mBox.init(md3dDevice, 1.0f); mPlane.init(md3dDevice, 1.0f); //we send scale of 1.0f what does that mean?? mTree.initObject(md3dDevice); std::string treeFileName = "MediumPolyTree.3ds"; mTree.load(md3dDevice, treeFileName); mTree.createTexturesAll(L"LeafCol.jpg", L"LeafAlpha.jpg", L"mySpec.jpg", L"LeafnormalX_normals.PNG"); mTree.setCubeMap(Object::createCubeTex(md3dDevice, L"grassenvmap1024.dds")); mTree.rotate(-1.5f,0.0f,0.0f); mTree.translate(3.0f,-3.0f,-2.6f); mObjBox.initObject(md3dDevice); std::string boxFileName = "man2.fbx"; mObjBox.load(md3dDevice, boxFileName); mObjBox.createTexturesAll( L"manD.jpg", L"defaultAlpha.jpg", L"defaultspec.dds", L"manN.jpg"); mObjBox.createTexturesAt(0, L"bricks.dds", L"defaultAlpha.jpg", L"spec.dds", L"womanHairN.jpg"); mObjBox.setCubeMap(Object::createCubeTex(md3dDevice, L"grassenvmap1024.dds")); mObjBox.rotate(0.0f,0.0f,3.14f); mObjBox.translate(-3.0f,0.0f,2.5f); mObjBox.scale(2.0f,2.0f,2.0f); buildFX(); buildVertexLayouts(); //mLights[0].dir = D3DXVECTOR3(0.57735f, -0.57735f, 0.57735f); mLights[0].dir = D3DXVECTOR3(0.576f, -0.576f, -0.576f); mLights[0].ambient = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f); mLights[0].diffuse = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f); mLights[0].specular = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f); // Pointlight--position is changed every frame to animate. mLights[1].pos = D3DXVECTOR3(2.0f,2.0f,2.0f); mLights[1].ambient = D3DXCOLOR(0.8f, 0.8f, 0.0f, 1.0f); mLights[1].diffuse = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f); mLights[1].specular = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f); mLights[1].att.x = 0.0f; mLights[1].att.y = 1.0f; mLights[1].att.z = 0.0f; mLights[1].range = 120.0f; animationTimeElapsed = 0.0f; animationTimePrev = mTimer.getGameTime(); for(int i = 0; i < fireFrameCount; i++) { std::wostringstream fileName; fileName << L"FireAnim\\Fire"; if(i+1 < 10) fileName << L"00"; else if(i+1 < 100) fileName << L"0"; fileName << i+1 << L".bmp"; std::wstring wbuffer = fileName.str(); LPCWSTR usableName = wbuffer.c_str(); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, usableName, 0, 0, &mFireAnimationMapRVs[i], 0)); } HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"bricks.dds", 0, 0, &mCrateMapRV, 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"bricks_normal.dds", 0, 0, &mDefaultNormalMapRV, 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"stone_diffuse.dds", 0, 0, &mGrassMapRV, 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"stone_normal.dds", 0, 0, &mBrickNormalMapRV, 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"spec.dds", 0, 0, &mSpecularMapRV, 0 )); // If not, create it. D3DX10_IMAGE_LOAD_INFO loadInfo; loadInfo.MiscFlags = D3D10_RESOURCE_MISC_TEXTURECUBE; ID3D10Texture2D* tex = 0; HR(D3DX10CreateTextureFromFile(md3dDevice, L"grassenvmap1024.dds", &loadInfo, 0, (ID3D10Resource**)&tex, 0) ); D3D10_TEXTURE2D_DESC texDesc; tex->GetDesc(&texDesc); D3D10_SHADER_RESOURCE_VIEW_DESC viewDesc; viewDesc.Format = texDesc.Format; viewDesc.ViewDimension = D3D10_SRV_DIMENSION_TEXTURECUBE; viewDesc.TextureCube.MipLevels = texDesc.MipLevels; viewDesc.TextureCube.MostDetailedMip = 0; HR(md3dDevice->CreateShaderResourceView(tex, &viewDesc, &mCubeMapRV)); ReleaseCOM(tex); mSky.init(md3dDevice, mCubeMapRV, 5000.0f); }
C_DefaultShader::C_DefaultShader(ID3D10Device *device) { d_pDevice = device; buildFX(); buildVertexLayout(); }
PondWater::PondWater(InitInfo& initInfo) { mInitInfo = initInfo; mWidth = (initInfo.vertCols-1)*initInfo.dx; mDepth = (initInfo.vertRows-1)*initInfo.dz; mWaveMapOffset0 = D3DXVECTOR2(0.0f, 0.0f); mWaveMapOffset1 = D3DXVECTOR2(0.0f, 0.0f); DWORD numTris = (initInfo.vertRows-1)*(initInfo.vertCols-1)*2; DWORD numVerts = initInfo.vertRows*initInfo.vertCols; //=============================================================== // Allocate the mesh. D3DVERTEXELEMENT9 elems[MAX_FVF_DECL_SIZE]; UINT numElems = 0; HR(VertexPT::Decl->GetDeclaration(elems, &numElems)); HR(D3DXCreateMesh(numTris, numVerts, D3DXMESH_MANAGED, elems, gd3dDevice, &mMesh)); //=============================================================== // Write the grid vertices and triangles to the mesh. VertexPT* v = 0; HR(mMesh->LockVertexBuffer(0, (void**)&v)); std::vector<D3DXVECTOR3> verts; std::vector<DWORD> indices; GenTriGrid(mInitInfo.vertRows, mInitInfo.vertCols, mInitInfo.dx, mInitInfo.dz, D3DXVECTOR3(0.0f, 0.0f, 0.0f), verts, indices); for(int i = 0; i < mInitInfo.vertRows; ++i) { for(int j = 0; j < mInitInfo.vertCols; ++j) { DWORD index = i * mInitInfo.vertCols + j; v[index].pos = verts[index]; v[index].tex0 = D3DXVECTOR2((float)j/mInitInfo.vertCols, (float)i/mInitInfo.vertRows) * initInfo.texScale; } } HR(mMesh->UnlockVertexBuffer()); //=============================================================== // Write triangle data so we can compute normals. WORD* indexBuffPtr = 0; HR(mMesh->LockIndexBuffer(0, (void**)&indexBuffPtr)); DWORD* attBuff = 0; HR(mMesh->LockAttributeBuffer(0, &attBuff)); for(UINT i = 0; i < mMesh->GetNumFaces(); ++i) { indexBuffPtr[i*3+0] = (WORD)indices[i*3+0]; indexBuffPtr[i*3+1] = (WORD)indices[i*3+1]; indexBuffPtr[i*3+2] = (WORD)indices[i*3+2]; attBuff[i] = 0; // All in subset 0. } HR(mMesh->UnlockIndexBuffer()); HR(mMesh->UnlockAttributeBuffer()); //=============================================================== // Optimize for the vertex cache and build attribute table. DWORD* adj = new DWORD[mMesh->GetNumFaces()*3]; HR(mMesh->GenerateAdjacency(EPSILON, adj)); HR(mMesh->OptimizeInplace(D3DXMESHOPT_VERTEXCACHE|D3DXMESHOPT_ATTRSORT, adj, 0, 0, 0)); delete[] adj; //=============================================================== // Create textures/effect. HR(D3DXCreateTextureFromFile(gd3dDevice, initInfo.waveMapFilename0.c_str(), &mWaveMap0)); HR(D3DXCreateTextureFromFile(gd3dDevice, initInfo.waveMapFilename1.c_str(), &mWaveMap1)); D3DVIEWPORT9 vp = {0, 0, 512, 512, 0.0f, 1.0f}; mRefractMap = new DrawableTex2D(512, 512, 0, D3DFMT_X8R8G8B8, true, D3DFMT_D24X8, vp, true); mReflectMap = new DrawableTex2D(512, 512, 0, D3DFMT_X8R8G8B8, true, D3DFMT_D24X8, vp, true); buildFX(); }
RobotArmDemo::RobotArmDemo(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } InitAllVertexDeclarations(); mGfxStats = new GfxStats(); // Initialize Camera Settings mCameraRadius = 9.0f; mCameraRotationY = 1.5f * D3DX_PI; mCameraHeight = 0.0f; // Setup a directional light. mLight.dirW = D3DXVECTOR3(0.0f, 1.0f, 2.0f); D3DXVec3Normalize(&mLight.dirW, &mLight.dirW); mLight.ambient = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f); mLight.diffuse = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f); mLight.spec = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f); // Load the bone .X file mesh. LoadXFile("bone.x", &mBoneMesh, mMtrl, mTex); D3DXMatrixIdentity(&mWorld); // Create the white dummy texture. HR(D3DXCreateTextureFromFile(gd3dDevice, "whitetex.dds", &mWhiteTex)); // Initialize the bones relative to their parent frame. // The root is special--its parent frame is the world space. // As such, its position and angle are ignored--its // toWorldXForm should be set explicitly (that is, the world // transform of the entire skeleton). // // *------*------*------*------ // 0 1 2 3 for(int i = 1; i < NUM_BONES; ++i) // Ignore root. { // Describe each bone frame relative to its parent frame. mBones[i].pos = D3DXVECTOR3(2.0f, 0.0f, 0.0f); mBones[i].zAngle = 0.0f; } // Root frame at center of world. mBones[0].pos = D3DXVECTOR3(0.0f, 0.0f, 0.0f); mBones[0].zAngle = 0.0f; // Start off with the last (leaf) bone: mBoneSelected = NUM_BONES-1; mGfxStats->addVertices(mBoneMesh->GetNumVertices() * NUM_BONES); mGfxStats->addTriangles(mBoneMesh->GetNumFaces() * NUM_BONES); buildFX(); onResetDevice(); }
SolarSysDemo::SolarSysDemo(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } InitAllVertexDeclarations(); mGfxStats = new GfxStats(); // Initialize Camera Settings mCameraRadius = 25.0f; mCameraRotationY = 1.2f * D3DX_PI; mCameraHeight = 10.0f; // Setup a directional light. mLight.dirW = D3DXVECTOR3(0.0f, 1.0f, 2.0f); D3DXVec3Normalize(&mLight.dirW, &mLight.dirW); mLight.ambient = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mLight.diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mLight.spec = D3DXCOLOR(0.6f, 0.6f, 0.6f, 1.0f); // Create a sphere to represent a solar object. HR(D3DXCreateSphere(gd3dDevice, 1.0f, 30, 30, &mSphere, 0)); genSphericalTexCoords(); D3DXMatrixIdentity(&mWorld); // Create the textures. HR(D3DXCreateTextureFromFile(gd3dDevice, "sun.dds", &mSunTex)); HR(D3DXCreateTextureFromFile(gd3dDevice, "planet1.dds", &mPlanet1Tex)); HR(D3DXCreateTextureFromFile(gd3dDevice, "planet2.dds", &mPlanet2Tex)); HR(D3DXCreateTextureFromFile(gd3dDevice, "planet3.dds", &mPlanet3Tex)); HR(D3DXCreateTextureFromFile(gd3dDevice, "moon.dds", &mMoonTex)); // Initialize default white material. mWhiteMtrl.ambient = WHITE; mWhiteMtrl.diffuse = WHITE; mWhiteMtrl.spec = WHITE * 0.5f; mWhiteMtrl.specPower = 48.0f; //================================================== // Specify how the solar object frames are related. D3DXVECTOR3 pos[NUM_OBJECTS] = { D3DXVECTOR3(0.0f, 0.0f, 0.0f), D3DXVECTOR3(7.0f, 0.0f, 7.0f), D3DXVECTOR3(-9.0f, 0.0f, 0.0f), D3DXVECTOR3(7.0f, 0.0f, -6.0f), D3DXVECTOR3(5.0f, 0.0f, 0.0f), D3DXVECTOR3(-5.0f, 0.0f, 0.0f), D3DXVECTOR3(3.0f, 0.0f, 0.0f), D3DXVECTOR3(2.0f, 0.0f, -2.0f), D3DXVECTOR3(-2.0f, 0.0f, 0.0f), D3DXVECTOR3(0.0f, 0.0f, 2.0f) }; mObject[0].set(SUN, pos[0], 0.0f, -1, 2.5f, mSunTex); // Sun mObject[1].set(PLANET, pos[1], 0.0f, 0, 1.5f, mPlanet1Tex);// P1 mObject[2].set(PLANET, pos[2], 0.0f, 0, 1.2f, mPlanet2Tex);// P2 mObject[3].set(PLANET, pos[3], 0.0f, 0, 0.8f, mPlanet3Tex);// P3 mObject[4].set(MOON, pos[4], 0.0f, 1, 0.5f, mMoonTex); // M1P1 mObject[5].set(MOON, pos[5], 0.0f, 1, 0.5f, mMoonTex); // M2P1 mObject[6].set(MOON, pos[6], 0.0f, 2, 0.4f, mMoonTex); // M1P2 mObject[7].set(MOON, pos[7], 0.0f, 3, 0.3f, mMoonTex); // M1P3 mObject[8].set(MOON, pos[8], 0.0f, 3, 0.3f, mMoonTex); // M2P3 mObject[9].set(MOON, pos[9], 0.0f, 3, 0.3f, mMoonTex); // M3P3 //================================================== mGfxStats->addVertices(mSphere->GetNumVertices() * NUM_OBJECTS); mGfxStats->addTriangles(mSphere->GetNumFaces() * NUM_OBJECTS); buildFX(); onResetDevice(); }
WaterDemo::WaterDemo(HINSTANCE hInstance, std::string winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, "checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } InitAllVertexDeclarations(); mLight.dirW = D3DXVECTOR3(0.0f, -2.0f, -1.0f); D3DXVec3Normalize(&mLight.dirW, &mLight.dirW); mLight.ambient = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f); mLight.diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mLight.spec = D3DXCOLOR(0.7f, 0.7f, 0.7f, 1.0f); mGfxStats = new GfxStats(); mSky = new Sky("grassenvmap1024.dds", 10000.0f); D3DXMATRIX waterWorld; D3DXMatrixTranslation(&waterWorld, 0.0f, 2.0f, 0.0f); Mtrl waterMtrl; waterMtrl.ambient = D3DXCOLOR(0.26f, 0.23f, 0.3f, 0.90f); waterMtrl.diffuse = D3DXCOLOR(0.26f, 0.23f, 0.3f, 0.90f); waterMtrl.spec = 1.0f*WHITE; waterMtrl.specPower = 64.0f; Water::InitInfo waterInitInfo; waterInitInfo.dirLight = mLight; waterInitInfo.mtrl = waterMtrl; waterInitInfo.vertRows = 128; waterInitInfo.vertCols = 128; waterInitInfo.dx = 1.0f; waterInitInfo.dz = 1.0f; waterInitInfo.waveMapFilename0 = "wave0.dds"; waterInitInfo.waveMapFilename1 = "wave1.dds"; waterInitInfo.waveMapVelocity0 = D3DXVECTOR2(0.05f, 0.08f); waterInitInfo.waveMapVelocity1 = D3DXVECTOR2(-0.02f, 0.1f); waterInitInfo.texScale = 16.0f; waterInitInfo.toWorld = waterWorld; mWater = new Water(waterInitInfo); mWater->setEnvMap(mSky->getEnvMap()); ID3DXMesh* tempMesh = 0; LoadXFile("BasicColumnScene.x", &tempMesh, mSceneMtrls, mSceneTextures); // Get the vertex declaration for the NMapVertex. D3DVERTEXELEMENT9 elems[MAX_FVF_DECL_SIZE]; UINT numElems = 0; HR(NMapVertex::Decl->GetDeclaration(elems, &numElems)); // Clone the mesh to the NMapVertex format. ID3DXMesh* clonedTempMesh = 0; HR(tempMesh->CloneMesh(D3DXMESH_MANAGED, elems, gd3dDevice, &clonedTempMesh)); // Now use D3DXComputeTangentFrameEx to build the TNB-basis for each vertex // in the mesh. HR(D3DXComputeTangentFrameEx( clonedTempMesh, // Input mesh D3DDECLUSAGE_TEXCOORD, 0, // Vertex element of input tex-coords. D3DDECLUSAGE_BINORMAL, 0, // Vertex element to output binormal. D3DDECLUSAGE_TANGENT, 0, // Vertex element to output tangent. D3DDECLUSAGE_NORMAL, 0, // Vertex element to output normal. 0, // Options 0, // Adjacency 0.01f, 0.25f, 0.01f, // Thresholds for handling errors &mSceneMesh, // Output mesh 0)); // Vertex Remapping // Done with temps. ReleaseCOM(tempMesh); ReleaseCOM(clonedTempMesh); D3DXMatrixIdentity(&mSceneWorld); D3DXMatrixIdentity(&mSceneWorldInv); HR(D3DXCreateTextureFromFile(gd3dDevice, "floor_nmap.bmp", &mSceneNormalMaps[0])); HR(D3DXCreateTextureFromFile(gd3dDevice, "bricks_nmap.bmp", &mSceneNormalMaps[1])); HR(D3DXCreateTextureFromFile(gd3dDevice, "whitetex.dds", &mWhiteTex)); // Initialize camera. gCamera->pos().y = 7.0f; gCamera->pos().z = -30.0f; gCamera->setSpeed(10.0f); mGfxStats->addVertices(mSceneMesh->GetNumVertices()); mGfxStats->addTriangles(mSceneMesh->GetNumFaces()); mGfxStats->addVertices(mWater->getNumVertices()); mGfxStats->addTriangles(mWater->getNumTriangles()); mGfxStats->addVertices(mSky->getNumVertices()); mGfxStats->addTriangles(mSky->getNumTriangles()); buildFX(); onResetDevice(); }
EngineMain::EngineMain(HINSTANCE hInstance, std::wstring winCaption, D3DDEVTYPE devType, DWORD requestedVP) : D3DApp(hInstance, winCaption, devType, requestedVP) { if(!checkDeviceCaps()) { MessageBox(0, L"checkDeviceCaps() Failed", 0, 0); PostQuitMessage(0); } Shaders::InitAll(); InitAllVertexDeclarations(); m_GfxStats = new GfxStats(); m_DirLight.Direction = D3DXVECTOR3(0.0f, 1.0f, 2.0f); D3DXVec3Normalize(&m_DirLight.Direction, &m_DirLight.Direction); m_DirLight.Ambient = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f); m_DirLight.Diffuse = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f); m_DirLight.Specular = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f); camera.SetPosition(D3DXVECTOR3(0.0f, 0.0f, -10.0f)); camera.SetTarget(D3DXVECTOR3(0.0f, 3.0f, 0.0f)); camera.SetRotation(D3DXVECTOR3(0.0f, 1.0f, 0.0f)); dwarf = new Model(L"dwarf.x"); skull = new Model(L"skullocc.x"); tiny = new Model(L"tiny.x"); m_GfxStats->addVertices(skull->m_Model->GetNumVertices()); m_GfxStats->addTriangles(skull->m_Model->GetNumFaces()); m_GfxStats->addVertices(dwarf->m_Model->GetNumVertices()); m_GfxStats->addTriangles(dwarf->m_Model->GetNumFaces()); m_GfxStats->addVertices(tiny->m_Model->GetNumVertices()); m_GfxStats->addTriangles(tiny->m_Model->GetNumFaces()); skull->InitModel(D3DXVECTOR3(-4.0f, 3.0f, 100.0f), D3DXVECTOR3(0.0f, 0.0f, 1.0f), 0.0f); skull->Scale(0.5f); dwarf->InitModel(D3DXVECTOR3(0.0f, 3.0f, -10.0f), D3DXVECTOR3(0.0f, 0.0f, 1.0f), 0.0f); dwarf->Scale(1.0f); tiny->InitModel(D3DXVECTOR3(0.0f, 3.0f, -10.0f), D3DXVECTOR3(0.0f, 0.0f, 1.0f), 0.0f); tiny->Scale(0.01f); #pragma region Grid mLightVecW = D3DXVECTOR3(0.0, 0.707f, -0.707f); mDiffuseMtrl = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mDiffuseLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mAmbientMtrl = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mAmbientLight = D3DXCOLOR(0.6f, 0.6f, 0.6f, 1.0f); mSpecularMtrl = D3DXCOLOR(0.4f, 0.4f, 0.4f, 1.0f); mSpecularLight = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); mSpecularPower = 8.0f; std::wstring groundTex = utf8ToUTF16(std::string("../Render/models/ground0.dds")); HR(D3DXCreateTextureFromFile(g_d3dDevice, groundTex.c_str(), &mGroundTex)); buildFX(); buildGridGeometry(); #pragma endregion onResetDevice(); }