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(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)); }