Beispiel #1
0
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();
}
Beispiel #2
0
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();
}
Beispiel #4
0
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();
}
Beispiel #6
0
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();
}
Beispiel #7
0
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();
}
Beispiel #8
0
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();
}
Beispiel #9
0
bool App::init( void )
{
    if ( !D3DApp::init() ) {
        return false;
    }

    buildGeometryBuffers();
    buildFX();
    buildVertexLayout();

    return true;
}
Beispiel #10
0
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();

}
Beispiel #11
0
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();
}
Beispiel #12
0
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();
}
Beispiel #13
0
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();
}
Beispiel #14
0
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;
}
Beispiel #15
0
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();
}
Beispiel #16
0
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();
	
}
Beispiel #18
0
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();
}
Beispiel #19
0
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();
}
Beispiel #21
0
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;
}
Beispiel #22
0
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);  

}
Beispiel #23
0
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();
}
Beispiel #26
0
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();
}
Beispiel #27
0
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();
}
Beispiel #28
0
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();
}
Beispiel #29
0
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();
}