紫色是正面,黄色是反面,红色是刷选中的部分。
void ViewSpace::CShowShader::ShaderFrontAndBack(TriMesh* Tmesh)
{
Tmesh->need_Facenormals();
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
int fn = Tmesh->faces.size();
glCullFace(GL_BACK); // 剔除背面
glEnable(GL_CULL_FACE); // 启用剔除功能
//选中面片渲染--红色
bool flag = false;
for (int i = 0; i < fn; i++)
{
if (Tmesh->faces[i].beSelect)
{
COpenglToolFunction::SetMaterialColor(RGB(255, 20, 147));//设置光照
flag = true;
break;
}
}
if (flag)
{
glEnable(GL_CULL_FACE); // 启用剔除功能
for (int i = 0; i < fn; i++)
{
if (Tmesh->faces[i].beSelect)
{
glBegin(GL_TRIANGLES);
glNormal3f(Tmesh->FaceNormal[i][0], Tmesh->FaceNormal[i][1], Tmesh->FaceNormal[i][2]);
TriMesh::Face& f = Tmesh->faces[i];
vector<vec>& v = Tmesh->vertices;
//glColor4f(255.0 / 255, 20.0 / 255, 147.0 / 255, 1);
glVertex3f(v[f[0]][0], v[f[0]][1], v[f[0]][2]);
glVertex3f(v[f[1]][0], v[f[1]][1], v[f[1]][2]);
glVertex3f(v[f[2]][0], v[f[2]][1], v[f[2]][2]);
glEnd();
}
}
}
//渲染背面--黄色
COpenglToolFunction::SetMaterialColor(RGB(255,255,0)); // 颜色设置
for (int i = 0; i < fn; i++)
{
glBegin(GL_TRIANGLES); // 开始绘制三角形
glNormal3f(Tmesh->FaceNormal[i][0], Tmesh->FaceNormal[i][1], Tmesh->FaceNormal[i][2]);
TriMesh::Face& f = Tmesh->faces[i];
vector<vec>& v = Tmesh->vertices;
glVertex3f(v[f[0]][0], v[f[0]][1], v[f[0]][2]);
glVertex3f(v[f[2]][0], v[f[2]][1], v[f[2]][2]);
glVertex3f(v[f[1]][0], v[f[1]][1], v[f[1]][2]);
glEnd(); // 结束绘制
}
//正面渲染--紫色
COpenglToolFunction::SetMaterialColor(RGB(218, 112, 214)); // 颜色设置
for (int i = 0; i < fn; i++)
{
glBegin(GL_TRIANGLES); // 开始绘制三角形
glNormal3f(Tmesh->FaceNormal[i][0], Tmesh->FaceNormal[i][1], Tmesh->FaceNormal[i][2]);
TriMesh::Face& f = Tmesh->faces[i];
vector<vec>& v = Tmesh->vertices;
glVertex3f(v[f[0]][0], v[f[0]][1], v[f[0]][2]);
glVertex3f(v[f[1]][0], v[f[1]][1], v[f[1]][2]);
glVertex3f(v[f[2]][0], v[f[2]][1], v[f[2]][2]);
glEnd(); // 结束绘制
}
//渲染背景
glDisable(GL_CULL_FACE); // 禁用剔除功能
}