コード例 #1
0
void PlanetObject::Init(ID3D11Device* device, ID3D11DeviceContext* dc, Camera *cam)
{
	mTerrainType.resize(4);
	mEnviromentalType.resize(1);

	/*Nastaveni materialu povrchu, ne vsechny typy terrenu jsou v soucasnosti v programu aktivni*/
	mTerrainType.at(0).SetMat(XMFLOAT4(0.113f, 0.15f, 0.115f, 1.0f), XMFLOAT4(0.29f, 0.52f, 0.265f, 1.0f), XMFLOAT4(0.25f, 0.25f, 0.25f, 1.0f), XMFLOAT4(0.3f, 0.3f, 0.3f, 1.0f), 0.32f, 0.25f);
	mTerrainType.at(1).SetMat(XMFLOAT4(0.135f, 0.15f, 0.115f, 1.0f), XMFLOAT4(0.39f, 0.52f, 0.265f, 1.0f), XMFLOAT4(0.25f, 0.25f, 0.25f, 1.0f), XMFLOAT4(0.3f, 0.3f, 0.3f, 1.0f), 0.32f, 0.25f);
	mTerrainType.at(2).SetMat(XMFLOAT4(0.17f, 0.14f, 0.125f, 1.0f), XMFLOAT4(0.45f, 0.62f, 0.37f, 1.0f), XMFLOAT4(0.25f, 0.25f, 0.25f, 1.0f), XMFLOAT4(0.3f, 0.3f, 0.3f, 1.0f), 0.32f, 0.25f);
	mTerrainType.at(3).SetMat(XMFLOAT4(0.15f, 0.145f, 0.14f, 1.0f), XMFLOAT4(0.42f, 0.405f, 0.385f, 1.0f), XMFLOAT4(0.25f, 0.25f, 0.25f, 1.0f), XMFLOAT4(0.3f, 0.3f, 0.3f, 1.0f), 0.32f, 0.25f);
	mEnviromentalType.at(0).SetEnviromental(1, 0, 90, 47);
	std::vector<TerrainPoint> heightMap;
	heightMap.resize(pow(static_cast<float>(NUMGRIDINROW + 24), 2.0f));
	BuildBuffers(device);
	std::vector<UINT> itsBuffer;
	std::vector<Assist> itsAssistBuffer;

	cam->SetPosition(0.0, 0.0, 0.0);

	/*Zde se vola inicialize prvniho bloku nejvyssi urovne(level == 0), double mSpacing promena udava udaj celkove delky/sirky sveta*/
	mTerrainBlock.Init(device, dc, heightMap, 0, 400000.0, Coordinate(0, 0), itsBuffer, itsAssistBuffer, false, mTerrainType, mEnviromentalType);

	mTerrainBlock.SetIncreaseCurrentLevel(false, 0);

	mGameObjectsStack = new GameObjectsStack(device, dc, cam, 2000);

	//GameObject *testObject = new TestBody;
	GameObject *testObject = new TestBillboard;
	//GameObject *testObject = new TestBody;
	mGameObjectsStack->CreateObject(testObject);
}
コード例 #2
0
void PolygonGroup::Load(KeyedArchive * keyedArchive, SceneFileV2 * sceneFile)
{
    DataNode::Load(keyedArchive, sceneFile);
    
    vertexFormat = keyedArchive->GetInt32("vertexFormat");
    vertexStride = GetVertexSize(vertexFormat);
    vertexCount = keyedArchive->GetInt32("vertexCount");
    indexCount = keyedArchive->GetInt32("indexCount");
    textureCoordCount = keyedArchive->GetInt32("textureCoordCount");
    primitiveType = (ePrimitiveType)keyedArchive->GetInt32("primitiveType");
	cubeTextureCoordCount = keyedArchive->GetInt32("cubeTextureCoordCount");
    
    int32 formatPacking = keyedArchive->GetInt32("packing");
    if (formatPacking == PACKING_NONE)
    {
        int size = keyedArchive->GetByteArraySize("vertices");
        if (size != vertexCount * vertexStride)
        {
            Logger::Error("PolygonGroup::Load - Something is going wrong, size of vertex array is incorrect");
            return;
        }
		SafeDeleteArray(meshData);
        meshData = new uint8[vertexCount * vertexStride];
        const uint8 * archiveData = keyedArchive->GetByteArray("vertices");
        memcpy(meshData, archiveData, size);
    }
    
    indexFormat = keyedArchive->GetInt32("indexFormat");
    if (indexFormat == EIF_16)
    {
        int size = keyedArchive->GetByteArraySize("indices");
        if (size != indexCount * INDEX_FORMAT_SIZE[indexFormat])
        {
            Logger::Error("PolygonGroup::Load - Something is going wrong, size of index array is incorrect");   
            return;
        }
		SafeDeleteArray(indexArray);
        indexArray = new int16[indexCount];
        const uint8 * archiveData = keyedArchive->GetByteArray("indices");
        memcpy(indexArray, archiveData, indexCount * INDEX_FORMAT_SIZE[indexFormat]);         
    }

	SafeDeleteArray(textureCoordArray);
	textureCoordArray = new Vector2*[textureCoordCount];
	
	SafeDeleteArray(cubeTextureCoordArray);
	if(cubeTextureCoordCount)
	{
		cubeTextureCoordArray = new Vector3*[cubeTextureCoordCount];
	}

	SafeRelease(renderDataObject);
    renderDataObject = new RenderDataObject();
    UpdateDataPointersAndStreams();
    RecalcAABBox();
    
    BuildBuffers();
}
コード例 #3
0
ファイル: GameObject.cpp プロジェクト: dominik-uebele/E1
int32 CGameObject::Initialize()
{
	ApplyShader();

	D3D11_BLEND_DESC blendDesc = {};
	blendDesc.RenderTarget[0].BlendEnable = true;
	blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
	blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
	blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
	blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
	blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_SRC_ALPHA;
	blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO;
	blendDesc.RenderTarget[0].RenderTargetWriteMask = 0x0F;

	float blendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f };

	theDevice->CreateBlendState( &blendDesc, &m_alphaBlendState );
	theContext->OMSetBlendState( m_alphaBlendState, blendFactor, 0xFFFFFFFF );

	D3D11_SAMPLER_DESC samplerDesc = {};
	samplerDesc.AddressU = samplerDesc.AddressV = samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
	samplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
	samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
	//	samplerDesc.Filter = D3D11_FILTER_ANISOTROPIC;
	//	samplerDesc.MaxAnisotropy = 4;
	samplerDesc.MaxLOD = D3D11_FLOAT32_MAX;
	HR( theDevice->CreateSamplerState( &samplerDesc, &m_pTextureSampler ) );

	ID3D11Resource* pcolorTex = 00;
	m_material.GetDiffuse()->GetResource( &pcolorTex );

	D3D11_TEXTURE2D_DESC colorTexDesc = {};
	(reinterpret_cast<ID3D11Texture2D*>(pcolorTex))->GetDesc( &colorTexDesc );
	pcolorTex->Release();

	BuildBuffers();

	D3D11_SAMPLER_DESC colorMapDesc = {};
	colorMapDesc.AddressU = colorMapDesc.AddressV = colorMapDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
	colorMapDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
	colorMapDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
	//	colorMapDesc.Filter = D3D11_FILTER_ANISOTROPIC;
	//	colorMapDesc.MaxAnisotropy = 4;
	colorMapDesc.MaxLOD = D3D11_FLOAT32_MAX;
	HR( theDevice->CreateSamplerState( &colorMapDesc, &m_pTextureSampler ) );

	m_pFXWorld = m_effect->GetVariableByName( "gWorld" )->AsMatrix();
	m_pFXTexture = m_effect->GetVariableByName( "gTexture" )->AsShaderResource();
	m_pFXTextureSampler = m_effect->GetVariableByName( "gTextureSampler" )->AsSampler();

	return 0;
}
コード例 #4
0
ファイル: K2WaterChunk.cpp プロジェクト: wangyanxing/Demi3D
    DiWaterChunk::DiWaterChunk( uint16 x, uint16 y, DiWaterMap* parent )
        :mParent(parent),
        mChunkID(x,y),
        mVertexBuffer(NULL),
        mHeight(10)
    {
        mPrimitiveType = PT_TRIANGLELIST;
        mPrimitiveCount = 2;
        mVerticesNum = 4;
        mMaterial = parent->mWaterMaterial;

        BuildBuffers();
    }
コード例 #5
0
ファイル: K2WaterChunk.cpp プロジェクト: wangyanxing/Demi3D
    void DiWaterChunk::SetHeight( float val )
    {
        if (!DiMath::RealEqual(mHeight,val))
        {
            mHeight = val;

            DiTerrainDescPtr tr = mParent->mTerrainMap->GetDesc();
            uint32 id = mChunkID.x * tr->mSizeX + mChunkID.y;
            tr->mWaterHeightMap[id] = val;

            BuildBuffers();
        }
    }
コード例 #6
0
gs_vertex_buffer::gs_vertex_buffer(gs_device_t *device, struct gs_vb_data *data,
		uint32_t flags)
	: gs_obj   (device, gs_type::gs_vertex_buffer),
	  dynamic  ((flags & GS_DYNAMIC) != 0),
	  vbd      (data),
	  numVerts (data->num)
{
	if (!data->num)
		throw "Cannot initialize vertex buffer with 0 vertices";
	if (!data->points)
		throw "No points specified for vertex buffer";

	BuildBuffers();
}
コード例 #7
0
ファイル: DXBox.cpp プロジェクト: ZonyZerium/Z-Force
DXBox::DXBox(ID3D11Device* md3dDevice, LPCWSTR texturePath)
{
	XMMATRIX I = XMMatrixIdentity();
	XMStoreFloat4x4(&mBoxWorld, I);
	XMStoreFloat4x4(&mTexTransform, I);
	SetScale(Vector3(1,1,1));
	SetPosition(Vector3(0,0,0));
	SetRotation(Vector3(0,0,0));
	mBoxMat.Ambient  = XMFLOAT4(0.5f, 0.5f, 0.5f, 1.0f);
	mBoxMat.Diffuse  = XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f);
	mBoxMat.Specular = XMFLOAT4(0.6f, 0.6f, 0.6f, 16.0f);

	HR(D3DX11CreateShaderResourceViewFromFile(md3dDevice, 
	texturePath, 0, 0, &boxDiffuseTexture, 0 ));
	BuildBuffers(md3dDevice);
}
コード例 #8
0
bool ParticleManager::LoadParticles(DxGraphics* pDxGraphics)
{
	if (!BuildVertexList())
	{
		return false;
	}
	if (!BuildBuffers(pDxGraphics->GetDevice()))
	{
		return false;
	}
	if (!BuildShaders(pDxGraphics->GetDevice()))
	{
		return false;
	}
	if (!BuildInputLayout(pDxGraphics->GetDevice()))
	{
		return false;
	}

	return true;
}
コード例 #9
0
void CubeMesh::Load()
{
    BuildBuffers();
    Logger("[CubeMesh] Load done");
}