示例#1
0
void CSkyBox::LoadSkyTextures( const char *pSkyName )
{
	//store names
	if( !m_bSkyLoaded )
	{
		strcpy( m_pSkyName, pSkyName );
	}

	const char pchSkyAppends[6][4] = { "_px", "_nx", "_py", "_ny", "_pz", "_nz" };

	int texTargets[] = {
		GL_TEXTURE_CUBE_MAP_POSITIVE_X,
		GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
		GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
		GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
		GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
		GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
	};

	glGenTextures( 1, &m_iCubeMapTex );

	for( int i = 0; i < 6; i++ )
	{
		string skyFileName("textures/sky/");
		skyFileName += pSkyName;
		skyFileName += pchSkyAppends[i];
		skyFileName += ".dds";

		//Set clamping
		g_LoadingMutex->SetOrWait();

		//Load the cube map texture
		glBindTexture( GL_TEXTURE_2D, 0 );
		glEnable(GL_TEXTURE_CUBE_MAP);
		glBindTexture( GL_TEXTURE_CUBE_MAP, m_iCubeMapTex );
		texture_t tex;
		tex.index = m_iCubeMapTex;
		g_LoadingMutex->Release();
		ConsoleMessage("Loading sky-tex \"%s\"", skyFileName.c_str());
		if( !g_RenderInterf->GetTextureManager()->LoadImageFromFile( skyFileName.c_str(), m_iCubeMapTex, tex, texTargets[i], true, true ) )
			error("Error loading sky \"%s\", expect black sky.", pSkyName);
	}

	g_LoadingMutex->SetOrWait();
	glBindTexture( GL_TEXTURE_CUBE_MAP, m_iCubeMapTex );
	glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
	g_LoadingMutex->Release();

	m_bSkyLoaded = true;

	m_pShader = (CShaderUnlit*)GetShaderManager()->GetShader( "Unlit" );
	m_pShaderSky = (CShaderSky*)GetShaderManager()->GetShader( "Sky" );
}
示例#2
0
void ctLineBorders::Init()
{
    m_currentShader = GetShaderManager()->GetShaderProgram("lineShader");
    GettingAttributes(m_currentShader);

    qDebug()<<intersection(QVector3D(2,1,0),QVector3D(9,4,0),QVector3D(2,6,0),QVector3D(4,4,0)).pointOfIntersection;
}
示例#3
0
//---------------------------------------------------------------
// Purpose: 
//---------------------------------------------------------------
void CEntityTypeLight::Render( void )
{
	BaseClass::Render();

	if( IsSelected() )
	{
		CBaseGeometry *geom = GetRenderInterfaces()->GetRendererInterf()->GetLightList()->GetUnitSphere();
		CPointLight *light = GetRenderInterfaces()->GetRendererInterf()->GetLightList()->GetPointLight(m_lightIndex);

		//calculate light geometry scales
		float fMaxDist = light->GetDist();
		geom->SetScale(fMaxDist);
		geom->SetAbsPos(GetAbsCenter());
		geom->SetAbsAngles(GetAbsAngles());

		CShader *pShd = GetShaderManager()->GetActiveShader();
		glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
		GetGLStateSaver()->Disable(GL_CULL_FACE);
		pShd->EnableTexturing(false);
		pShd->SetDrawColor(1, 1, 0, 1);
		geom->RenderNoTextureBufferOnly(false);
		pShd->SetDrawColor(1, 1, 1, 1);
		GetGLStateSaver()->Enable(GL_CULL_FACE);
		glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
	}
}
示例#4
0
//---------------------------------------------------------------
// Purpose: All real drawing code goes here!
//---------------------------------------------------------------
void CDynamicText::VRenderCustom( void )
{
    //m_pFont->BindForRendering();
    //m_pFont->RenderString( m_Text.c_str() );
    //m_pFont->UnBindFromRendering();
    glBindTexture(GL_TEXTURE_2D, m_pFont->GetTexIndex());
    std::vector<glyphvertinfo_t> verts;
    verts.reserve(m_Text.length());

    float lineSpacing = m_pFont->GetLineSpacing();
    Vector3f pos = vec3_null;
    for(size_t i = 0; i < m_Text.length(); ++i)
    {
        char c = m_Text[i];
        if(c == '\n')
        {
            pos.x = 0.0f;
            pos.y += lineSpacing;
        }
        else
        {
            if(!m_pFont->HasGlyph(c))
                c = '?';
            glyphvertinfo_t info = m_pFont->GetGlyphVertInfo(c);
            for(size_t i = 0; i < 4; ++i)
                info.verts[i].vPos += pos;
            verts.push_back(info);
            pos.x += m_pFont->GetGlyphWidth(c);
            pos.z += 0.0001f;
        }
    }

    GetShaderManager()->InitVertexbufferVars(VBF_POS_UV, verts.data());
    GetShaderManager()->GetActiveShader()->UpdateMatrices();
    glDrawArrays(GL_QUADS, 0, verts.size()*4);
}
示例#5
0
void CSkyBox::DrawSky( Vector3f vSunDir, bool bReflection)
{
#if 0
	if( !m_bSkyLoaded )
		return;
	
	m_pShader->Enable();
	glDepthRange(1.0, 1.0);
	GetGLStateSaver()->Enable(GL_DEPTH_TEST);
	GetGLStateSaver()->DepthFunc(GL_EQUAL);
	glDepthMask( GL_FALSE );
	GetGLStateSaver()->Enable( GL_TEXTURE_2D );

	GetMVStack().PushMatrix();
	Vector3f vCamPos = g_RenderInterf->GetRenderer()->GetActiveCam()->GetAbsPos();
	if( bReflection )
		vCamPos.y = -vCamPos.y + g_RenderInterf->GetRenderer()->GetWaterHeight() * 2.0f;

	GetMVStack().Translate( vCamPos );

	GetShaderManager()->GetActiveShader()->UpdateMatrices();

	float d = 1000.0f;

	//Skybox vertexes:
	float verts[] = {	

		//Right Face
		1.0f, 1.0f, d, d, -d, //Top Left
		1.0f, 0.0f, d, -d, -d, //Bottom Left
		0.0f, 0.0f, d, -d, d, //Bottom Right
		0.0f, 1.0f, d, d, d, //Top Right

		//Left Face
		1.0f, 1.0f, -d, d, d, //Top Left
		1.0f, 0.0f, -d, -d, d, //Bottom Left
		0.0f, 0.0f, -d, -d, -d, //Bottom Right
		0.0f, 1.0f, -d, d, -d, //Top Right

		//Up Face
		0.0f, 1.0f, -d, d, d, //Top Left
		0.0f, 0.0f, -d, d, -d, //Bottom Left
		1.0f, 0.0f, d, d, -d, //Bottom Right
		1.0f, 1.0f, d, d, d, //Top Right

		//Down Face
		1.0f, 1.0f, -d, -d, -d, //Top Left
		1.0f, 0.0f, -d, -d, d, //Bottom Left
		0.0f, 0.0f, d, -d, d, //Bottom Right
		0.0f, 1.0f, d, -d, -d, //Top Right

		//Back Face
		1.0f, 1.0f, d, d, d, //Top Left
		1.0f, 0.0f, d, -d, d, //Bottom Left
		0.0f, 0.0f, -d, -d, d, //Bottom Right
		0.0f, 1.0f, -d, d, d, //Top Right

		//Front Face
		1.0f, 1.0f,-d, d, -d, //Top Left
		1.0f, 0.0f, -d, -d, -d, //Bottom Left
		0.0f, 0.0f, d, -d, -d, //Bottom Right
		0.0f, 1.0f, d, d, -d, //Top Right
	}; 

	rglPushClientAttrib( GL_CLIENT_VERTEX_ARRAY_BIT );
	init_vertexbuffer_vars_uvcoord_pos( verts );

	for( int i = 0; i < 6; i++ )
	{
		glBindTexture( GL_TEXTURE_2D, m_SkyTexs[i].index );
		glDrawArrays( GL_QUADS, i*4, 4 );
	}

	rglPopClientAttrib();
	GetMVStack().PopMatrix();

	glDepthMask( GL_TRUE ); //Re-Enable Z-Buffer
	GetGLStateSaver()->DepthFunc(GL_LESS);
	glDepthRange(0.0, 1.0);
#else
	if( !m_bSkyLoaded )
		return;
	
	m_pShaderSky->Enable();
	m_pShaderSky->SetBrightness(render_sky_brightness.GetFloat());
	glDepthRange(1.0, 1.0);
	GetGLStateSaver()->Enable(GL_DEPTH_TEST);
	GetGLStateSaver()->DepthFunc(GL_EQUAL);
	glDepthMask( GL_FALSE );
	GetGLStateSaver()->Enable( GL_TEXTURE_2D );
	
	CCamera *cam = g_RenderInterf->GetRenderer()->GetActiveCam();
	GetMVStack().PushMatrix();
	GetMVStack().Translate( cam->GetAbsPos() );
	//GetMVStack().Rotate(cam->GetAbsAngles().GetConjugate());

	m_pShaderSky->UpdateMatrices();

	float d = 1000.0f;

	//Skybox vertexes:
	float verts[] = {	

		//Right Face
		d, d, -d, //Top Left
		d, -d, -d, //Bottom Left
		d, -d, d, //Bottom Right
		d, d, d, //Top Right

		//Left Face
		-d, d, d, //Top Left
		-d, -d, d, //Bottom Left
		-d, -d, -d, //Bottom Right
		-d, d, -d, //Top Right

		//Up Face
		-d, d, d, //Top Left
		-d, d, -d, //Bottom Left
		d, d, -d, //Bottom Right
		d, d, d, //Top Right

		//Down Face
		-d, -d, -d, //Top Left
		-d, -d, d, //Bottom Left
		d, -d, d, //Bottom Right
		d, -d, -d, //Top Right

		//Back Face
		d, d, d, //Top Left
		d, -d, d, //Bottom Left
		-d, -d, d, //Bottom Right
		-d, d, d, //Top Right

		//Front Face
		-d, d, -d, //Top Left
		-d, -d, -d, //Bottom Left
		d, -d, -d, //Bottom Right
		d, d, -d, //Top Right
	}; 

	rglPushClientAttrib( GL_CLIENT_VERTEX_ARRAY_BIT );
	GetShaderManager()->InitVertexbufferVars(VBF_POS, verts);

	GetGLStateSaver()->ActiveTexture( GL_TEXTURE0 );
	GetGLStateSaver()->Enable(GL_TEXTURE_CUBE_MAP);
	glBindTexture(GL_TEXTURE_CUBE_MAP, m_iCubeMapTex);
	
	glDrawArrays(GL_QUADS, 0, 6*4);

	rglPopClientAttrib();
	GetMVStack().PopMatrix();

	GetGLStateSaver()->Disable(GL_TEXTURE_CUBE_MAP);

	glDepthMask( GL_TRUE ); //Re-Enable Z-Buffer
	GetGLStateSaver()->DepthFunc(GL_LESS);
	glDepthRange(0.0, 1.0);
#endif
}