Exemplo n.º 1
0
void EnviromentTriangle::Draw( Camera* cam ){
	int i;
	unsigned int* target = cam->target->GetData();
	unsigned int* zbuffer = cam->zbuffer;
	int width = cam->target->GetWidth();
	int height = cam->target->GetHeight();

	Poly p_in, p_out;
	p_in.vertex_count = 3;
	p_in.vertices[0] = vertices[0];
	p_in.vertices[1] = vertices[1];
	p_in.vertices[2] = vertices[2];

	Clip( &p_in, &p_out, &cam->fustrum.sides[0] );
	Clip( &p_out, &p_in, &cam->fustrum.sides[1] );
	Clip( &p_in, &p_out, &cam->fustrum.sides[2] );
	Clip( &p_out, &p_in, &cam->fustrum.sides[3] );

	for(i=0; i<p_in.vertex_count; i++) p_in.vertices[i].point.z += 1.0f;
	Clip( &p_in, &p_out, &cam->fustrum.znear );
	for(i=0; i<p_in.vertex_count; i++) p_in.vertices[i].point.z -= 1.0f;

	Poly* pol = &p_out;
	pol->Triangulate();

	for(i=0; i<pol->face_count; i++){
		vertices2D[0] = cam->TransformVector( pol->vertices[pol->faces[i].a].point );
		vertices2D[0].u = pol->vertices[pol->faces[i].a].u*255;
		vertices2D[0].v = pol->vertices[pol->faces[i].a].v*255;
		vertices2D[1] = cam->TransformVector( pol->vertices[pol->faces[i].b].point );
		vertices2D[1].u = pol->vertices[pol->faces[i].b].u*255;
		vertices2D[1].v = pol->vertices[pol->faces[i].b].v*255;
		vertices2D[2] = cam->TransformVector( pol->vertices[pol->faces[i].c].point );
		vertices2D[2].u = pol->vertices[pol->faces[i].c].u*255;
		vertices2D[2].v = pol->vertices[pol->faces[i].c].v*255;

		DrawTextureTriangle( cam->target, vertices2D, color, zbuffer, material->envmap );
	}
}
Exemplo n.º 2
0
inline void CRenderObjectsManager::RenderTextureTriangle(CRenderObject *pObject,POLYGON& poly)
{
	DrawTextureTriangle(poly,pObject);
}