Beispiel #1
0
void MeshEntity::RenderBare(BOOL bUseTransform)
{
    traceInFast(MeshEntity::RenderBare);

    if(!mesh)
        return;

    if(bUseTransform)
    {
        MatrixPush();
        MatrixMultiply(invTransform);
        if(bHasScale) MatrixScale(scale);
    }

    LoadVertexBuffer(VertBuffer);
    LoadIndexBuffer(mesh->IdxBuffer);

    GS->DrawBare(GS_TRIANGLES, 0, 0, mesh->nFaces*3);

    LoadVertexBuffer(NULL);
    LoadIndexBuffer(NULL);

    if(bUseTransform)
        MatrixPop();

    traceOutFast;
}
Beispiel #2
0
void MeshObject::RenderBare()
{
    traceIn(MeshObject::RenderBare);

    LoadVertexBuffer(mesh->VertBuffer);
    LoadIndexBuffer(mesh->IdxBuffer);

    GS->DrawBare(GS_TRIANGLES, 0, 0, mesh->nFaces*3);

    LoadVertexBuffer(NULL);
    LoadIndexBuffer(NULL);

    traceOut;
}
void MT_Terrain::Init(ID3D11Device *d3dDevice, ID3D11DeviceContext *d3dDeviceContext) 
{
	m_shader = new MT_Shader();
	m_shader->Init(d3dDevice, d3dDeviceContext, k_VertexShaderFileName, k_PixelShaderFileName);

	m_heightMap = new MT_HeightMap();
	m_heightMap->Init(TERRAIN_HEIGHTMAP_PATH);

	m_texture = new MT_Texture();
	m_texture->LoadTexture(d3dDevice, d3dDeviceContext, TERRAIN_TEXTURE_GRASS_PATH);
	m_texture->LoadTexture(d3dDevice, d3dDeviceContext, TERRAIN_TEXTURE_ROCK_PATH);
	m_texture->LoadTexture(d3dDevice, d3dDeviceContext, TERRAIN_TEXTURE_WATER_PATH);
	m_texture->LoadSampler(d3dDevice, d3dDeviceContext);

	m_light = new MT_Light();
	LightBufferValues lightValues;
	lightValues.ambient = k_Light_Ambient;
	lightValues.diffuse = k_Light_Diffuse;
	lightValues.direction = k_Light_Direction;
	lightValues.light_enabled = LIGHT_TOGGLE;
	lightValues.texture_enabled = TEXTURE_TOGGLE;
	m_light->Init(d3dDevice, d3dDeviceContext, lightValues);

	CreateInputLayoutObjectForVertexBuffer(d3dDevice, d3dDeviceContext, m_shader->GetVertexShaderBlob());

	m_toggle_flatGrid = TOGGLE_FLAT_GRID;
	LoadVertexBuffer(d3dDevice, d3dDeviceContext);
	LoadIndexBuffer(d3dDevice, d3dDeviceContext);
}
Beispiel #4
0
void MeshObject::Render()
{
    traceIn(MeshObject::Render);

    LoadVertexBuffer(mesh->VertBuffer);
    LoadIndexBuffer(mesh->IdxBuffer);

    for(DWORD i=0;i<mesh->nSections;i++)
    {
        DrawSection &section  = mesh->SectionList[i];
        Material    *material = MaterialList[i];

        if(!material)
            continue;

        if(material->GetEffect() == GetActiveEffect())
            material->LoadParameters();

        if(material->GetFlags() & MATERIAL_TWOSIDED)
        {
            GSCullMode cullMode;
            cullMode = GetCullMode();
            SetCullMode(GS_NEITHER);
            GS->Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3);
            SetCullMode(cullMode);
        }
        else
            GS->Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3);
    }

    traceOut;
}
//Loads the Vertex and Index buffers
void ColladaMesh::LoadBuffers(daeElement *geometry)
{
	if(diffuseTexture == 0)
	{
	HR(D3DX11CreateShaderResourceViewFromFile(device, 
		L"../Assets/Textures/stone2.jpg", 0, 0, &diffuseTexture, 0 ));	
	}
	//Create the vertex buffer by passing the pointer to the mesh daeElement
	LoadVertexBuffer(geometry->getChild("mesh"));
	//Create the index buffer by passing the pointer to the mesh daeElement
	LoadIndexBuffer(geometry->getChild("mesh"));
}
Beispiel #6
0
void MeshEntity::QuickRender()
{
    traceInFast(MeshEntity::QuickRender);

    if(!mesh)
        return;

    if(GetActiveEffect())
        LoadEffectData();
    else
    {
        MatrixPush();
        MatrixMultiply(invTransform);
        if(bHasScale) MatrixScale(scale);
    }

    LoadVertexBuffer(VertBuffer);
    LoadIndexBuffer(mesh->IdxBuffer);

    for(DWORD i=0;i<mesh->nSections;i++)
    {
        DrawSection &section  = mesh->SectionList[i];
        Material    *material = MaterialList[i];

        if(!material)
            continue;

        if(material->effect == GetActiveEffect())
            material->LoadParameters();

        if(material->flags & MATERIAL_TWOSIDED)
        {
            GSCullMode cullMode;
            cullMode = GetCullMode();
            SetCullMode(GS_NEITHER);
            GS->Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3);
            SetCullMode(cullMode);
        }
        else
            GS->Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3);
    }

    if(GetActiveEffect())
        ResetEffectData();
    else
        MatrixPop();

    traceOutFast;
}
Beispiel #7
0
void MeshEntity::RenderInitialPass()
{
    traceInFast(MeshEntity::RenderInitialPass);

    profileSegment("MeshEntity::RenderInitialPass");

    if(!mesh)
        return;

    LoadEffectData();

    LoadVertexBuffer(VertBuffer);       
    LoadIndexBuffer(mesh->IdxBuffer);

    for(DWORD i=0;i<mesh->nSections;i++)
    {
        DrawSection &section  = mesh->SectionList[i];
        Material    *material = MaterialList[i];

        if(material && section.numFaces)
        {
            if(material->effect == GetActiveEffect())
            {
                material->LoadParameters();

                if(material->flags & MATERIAL_TWOSIDED)
                {
                    GSCullMode cullMode;
                    cullMode = GetCullMode();
                    SetCullMode(GS_NEITHER);
                    Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3);
                    SetCullMode(cullMode);
                }
                else
                    Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3);
            }
        }
    }

    ResetEffectData();

    traceOutFast;
}
Beispiel #8
0
void MeshEntity::RenderWireframe()
{
    traceInFast(MeshEntity::RenderWireframe);

    Shader *shader = GetCurrentVertexShader();
    if(shader)
        shader->SetColor(shader->GetParameter(1), wireframeColor | 0xFF000000);

    MatrixPush();
    MatrixMultiply(invTransform);

    LoadVertexBuffer(VertBuffer);
    LoadIndexBuffer(mesh->WireframeBuffer);

    GS->DrawBare(GS_LINES);

    MatrixPop();

    traceOutFast;
}
void RotationManipulator::RenderScaled(const Vect &cameraDir, float scale)
{
    traceInFast(RotationManipulator::RenderScaled);

    DWORD i;

    Shader *rotManipShader = GetVertexShader(TEXT("Editor:RotationManipulator.vShader"));
    LoadVertexShader(rotManipShader);
    LoadPixelShader(GetPixelShader(TEXT("Base:SolidColor.pShader")));

    rotManipShader->SetVector(rotManipShader->GetParameter(2), cameraDir);

    MatrixPush();
    MatrixTranslate(GetWorldPos());
    MatrixScale(scale, scale, scale);

        for(i=0; i<3; i++)
        {
            Vect axisColor(0.0f, 0.0f, 0.0f);

            axisColor.ptr[i] = 1.0f;
            if(i == activeAxis)
                axisColor.Set(1.0f, 1.0f, 0.0f);
            else
                axisColor.ptr[i] = 1.0f;

            rotManipShader->SetVector(rotManipShader->GetParameter(1), axisColor);

            LoadVertexBuffer(axisBuffers[i]);
            LoadIndexBuffer(NULL);

            Draw(GS_LINESTRIP);
        }

        LoadVertexBuffer(NULL);

        //----------------------------------------------------

        Shader *solidShader = GetVertexShader(TEXT("Base:SolidColor.vShader"));
        LoadVertexShader(solidShader);

        MatrixPush();
        MatrixRotate(Quat().SetLookDirection(cameraDir));

            LoadVertexBuffer(axisBuffers[2]);
            LoadIndexBuffer(NULL);

            solidShader->SetColor(solidShader->GetParameter(1), 0.5, 0.5, 0.5, 0.5);

            Draw(GS_LINESTRIP);

            MatrixScale(1.25f, 1.25f, 1.25f);

            //---------------

            if(activeAxis == 4)
                solidShader->SetColor(solidShader->GetParameter(1), 1.0f, 1.0f, 0.0, 1.0f);
            else
                solidShader->SetColor(solidShader->GetParameter(1), 0.8, 0.8, 0.8, 0.8);

            Draw(GS_LINESTRIP);

        MatrixPop();

    MatrixPop();

    LoadVertexShader(NULL);
    LoadPixelShader(NULL);

    traceOutFast;
}
Beispiel #10
0
void MeshEntity::RenderLightmaps()
{
    traceInFast(MeshEntity::RenderLightmaps);

    if(!mesh || !bLightmapped)
        return;

    LoadEffectData();

    LoadVertexBuffer(VertBuffer);       
    LoadIndexBuffer(mesh->IdxBuffer);

    HANDLE param[3];

    param[0] = level->GetLightmapU();//GetActiveEffect()->GetParameterByName(TEXT("lightmapU"));
    param[1] = level->GetLightmapV();//GetActiveEffect()->GetParameterByName(TEXT("lightmapV"));
    param[2] = level->GetLightmapW();//GetActiveEffect()->GetParameterByName(TEXT("lightmapW"));

    if(lightmap.X)
    {
        GetActiveEffect()->SetTexture(param[0], lightmap.X);
        GetActiveEffect()->SetTexture(param[1], lightmap.Y);
        GetActiveEffect()->SetTexture(param[2], lightmap.Z);
    }
    else
    {
        //actually it should never get here
        Texture *black = GetTexture(TEXT("Base:Default/black.tga"));
        GetActiveEffect()->SetTexture(param[0], black);
        GetActiveEffect()->SetTexture(param[1], black);
        GetActiveEffect()->SetTexture(param[2], black);
    }

    for(DWORD i=0;i<mesh->nSections;i++)
    {
        DrawSection &section  = mesh->SectionList[i];
        Material    *material = MaterialList[i];

        if(material && section.numFaces)
        {
            if(material->effect == GetActiveEffect())
            {
                material->LoadParameters();

                if(material->flags & MATERIAL_TWOSIDED)
                {
                    GSCullMode cullMode;
                    cullMode = GetCullMode();
                    SetCullMode(GS_NEITHER);
                    Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3);
                    SetCullMode(cullMode);
                }
                else
                    Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3);
            }
        }
    }

    ResetEffectData();

    traceOutFast;
}