void Sky::init(ID3D10Device* device, ID3D10ShaderResourceView* cubemap, float radius){ md3dDevice = device; mCubeMap = cubemap; mVertexType = 1; mTech = fx::SkyFX->GetTechniqueByName("SkyTech"); mfxWVPVar = fx::SkyFX->GetVariableByName("gWVP")->AsMatrix(); mfxWorldVar = fx::SkyFX->GetVariableByName("gWorld")->AsMatrix(); mfxCubeMapVar = fx::SkyFX->GetVariableByName("gCubeMap")->AsShaderResource(); std::vector<D3DXVECTOR3> vertices; IndexList indices; BuildGeoSphere(2, radius, vertices, indices); VertexList skyVerts(vertices.size()); for(size_t i = 0; i < vertices.size(); ++i){ // Scale on y-axis to turn into an ellipsoid to make a flatter Sky surface skyVerts[i].pos = 0.5f*vertices[i]; } mNumVertices = skyVerts.size(); GfxObj::buildVB(skyVerts); mNumIndices = (UINT)indices.size(); mNumFaces = mNumIndices*3; GfxObj::buildIB(indices); }
void Sky::Init(std::wstring SkySrcName, float Radius) { mSrcName = SkySrcName; mRadius = Radius; //Mesh Creation std::vector<D3DXVECTOR3> Vertices; std::vector<UINT> Indices; BuildGeoSphere(5, mRadius, Vertices, Indices); UINT NumVertices = Vertices.size(); UINT NumIndices = Indices.size(); UINT NumFaces = NumIndices / 3; SkyVertex* MeshVertices = new SkyVertex[NumVertices]; DWORD* MeshIndices = new DWORD[NumIndices]; UINT* MeshAtr = new UINT[NumFaces]; for(size_t i = 0; i < NumVertices; i++) MeshVertices[i].Pos = Vertices[i]; for(size_t i = 0; i < NumIndices; i++) MeshIndices[i] = (DWORD)Indices[i]; for(size_t i = 0; i < NumFaces; i++) MeshAtr[i] = 0; D3D10_INPUT_ELEMENT_DESC VertexDesc[] = { {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0} }; HR(D3DX10CreateMesh(gd3dDev, VertexDesc, 1, "POSITION", NumVertices, NumFaces, D3DX10_MESH_32_BIT, &mSphere)); HR(mSphere->SetVertexData(0, MeshVertices)); HR(mSphere->SetIndexData(MeshIndices, NumIndices)); HR(mSphere->SetAttributeData(MeshAtr)); HR(mSphere->GenerateAdjacencyAndPointReps(0.001f)); HR(mSphere->Optimize(D3DX10_MESHOPT_ATTR_SORT | D3DX10_MESHOPT_VERTEX_CACHE, 0, 0)); HR(mSphere->CommitToDevice()); delete[] MeshVertices; delete[] MeshIndices; delete[] MeshAtr; //FX Handles mfxSkyTech = FX::SkyFX->GetTechniqueByName("SkyTech"); mfxSkyWVP = FX::SkyFX->GetVariableByName("gSkyWVP")->AsMatrix(); mfxCubeTex = FX::SkyFX->GetVariableByName("gCubeTex")->AsShaderResource(); //Cube Texture mCubeTexSRV = GetTexManager().CreateCubeTexure(mSrcName); }
void Sky::init(ID3D10Device* device, BREAKOUT* g, float radius) { md3dDevice = device; HR(D3DX10CreateShaderResourceViewFromFile(device, L".\\textures\\BackgroundCube.dds", 0, 0, &mCubeMap, 0 )); game = g; mTech = g->skyFX->GetTechniqueByName("SkyTech"); mfxWVPVar = g->skyFX->GetVariableByName("gWVP")->AsMatrix(); mfxCubeMapVar = g->skyFX->GetVariableByName("gCubeMap")->AsShaderResource(); std::vector<D3DXVECTOR3> vertices; std::vector<DWORD> indices; BuildGeoSphere(2, radius, vertices, indices); std::vector<SkyVertex> skyVerts(vertices.size()); for(size_t i = 0; i < vertices.size(); ++i) { // Scale on y-axis to turn into an ellipsoid to make a flatter Sky surface skyVerts[i].pos = 0.5f*vertices[i]; } D3D10_BUFFER_DESC vbd; vbd.Usage = D3D10_USAGE_IMMUTABLE; vbd.ByteWidth = sizeof(SkyVertex) * (UINT)skyVerts.size(); vbd.BindFlags = D3D10_BIND_VERTEX_BUFFER; vbd.CPUAccessFlags = 0; vbd.MiscFlags = 0; D3D10_SUBRESOURCE_DATA vinitData; vinitData.pSysMem = &skyVerts[0]; HR(md3dDevice->CreateBuffer(&vbd, &vinitData, &mVB)); mNumIndices = (UINT)indices.size(); D3D10_BUFFER_DESC ibd; ibd.Usage = D3D10_USAGE_IMMUTABLE; ibd.ByteWidth = sizeof(DWORD) * mNumIndices; ibd.BindFlags = D3D10_BIND_INDEX_BUFFER; ibd.CPUAccessFlags = 0; ibd.MiscFlags = 0; D3D10_SUBRESOURCE_DATA iinitData; iinitData.pSysMem = &indices[0]; HR(md3dDevice->CreateBuffer(&ibd, &iinitData, &mIB)); }