Opengl Polygonoffset

http://www.zeuscmd.com/tutorials/opengl/15-PolygonOffset.php

Introduction

Polygon Offset It is often quite useful to accentuate the edges of your objects by rendering your object once in fill mode and once in line mode. This often produces unsatisfactory results as the line may move into and out of the polygon. This effect is commonly known as stitching.

You may have also noticed in the past that when rendering two polygons that overlap each other, Z-fighting occurs and parts of each polygon are rendered.

The results of stitching and z-fighting can be seen in the figures below.

Stitching Effect Stitching Effect Stitching Effect Z-Fighting Effect

This tutorial expands on tutorial 13 and shows how you can overcome these effects by making use of polygon offsets.

-------------------------------------------------------------------my code:

if(this->glpickobj.pickFlag == 1)//pick face

{

glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT | GL_COLOR_BUFFER_BIT | GL_LIGHTING_BIT | GL_DEPTH_BUFFER_BIT );

glEnable(GL_POLYGON_OFFSET_FILL);

glDisable(GL_LIGHTING);

glDisable(GL_TEXTURE_2D);

//glEnable(GL_BLEND);

glDepthMask(GL_FALSE);

// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ;

glColor4f(1.0f,0.0,0.0,.3f);

//from http://www.zeuscmd.com/tutorials/opengl/15-PolygonOffset.php

//key!, A positive offset will push the object away from you whereas a negative offset will pull the //object towards you.

//when glPolygonOffset(1.0, 1); unseen selected red face!!!!

glPolygonOffset(-1.0, -1);

glPushMatrix();

for(int j=0;j<this->glpickobj.facePt.size();++j)

{

Facet * fpt = this->glpickobj.facePt[j];

HF_circulator h = fpt->facet_begin();

glBegin(GL_POLYGON);

do{

// glColor3f(color[0],color[1],color[2]);

Point& temp = h->vertex()->point();

glVertex3f(temp.x(),temp.y(),temp.z());

}

while(++h != fpt->facet_begin());

glEnd();

}

glPopMatrix();

glPopAttrib();

}//pick face

原文地址:https://www.cnblogs.com/europelee/p/3388671.html