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 ); } }
inline void CRenderObjectsManager::RenderTextureTriangle(CRenderObject *pObject,POLYGON& poly) { DrawTextureTriangle(poly,pObject); }