我在可视化科学 3d 模型时遇到了一个问题。任务是渲染一个填充了颜色和线框覆盖的模型。这适用于具有闭合曲面的实体模型。
问题 1:
我有几个多边形,在渲染之前对它们的可见性/方向一无所知。为了确保正确显示所有多边形,我首先顺时针绘制所有多边形,然后逆时针绘制所有多边形,线框叠加层也是如此。这似乎适用于某些型号,但不适用于所有型号。
我的一些模型最终看起来像这样。
问题2:
我不知道这是否与问题 #1 有关,但 PolygonOffset 使某些边缘看起来很糟糕,可能是因为模型多边形的混合方向:线框边缘
**编码: **
由于给我的限制,我必须在 Fortran 77 中编写代码。尽管如此,OpenGL 调用保持不变。这是绘制模型的代码:
c Draw object
do 10 i=1,2
c Select correct orientation
if(ccw) then
call glFrontFace(GL_CCW)
else
call glFrontFace(GL_CW)
endif
c Set object color
call glColor3f(1.0,1.0,1.0)
c Set polygon mode to fill
call glPolygonMode(GL_FRONT_AND_BACK,GL_FILL)
c Set polygon offset and enable offset (float for glPolygonOffset,
c otherwise it won't work)
call glPolygonOffset(1.0,2.0)
call glEnable(GL_POLYGON_OFFSET_FILL)
c Draw object
call glCallList(lindex)
c Disable polygon offset
call glDisable(GL_POLYGON_OFFSET_FILL)
c Reverse orientation
ccw = .not. ccw
10 continue
c Draw Wireframe onto Object
do 20 i=1,2
c Select correct orientation
if(ccw) then
call glFrontFace(GL_CCW)
else
call glFrontFace(GL_CW)
endif
c Set object color
call glColor3f(0.0,0.0,0.0)
c Set polygon mode to wireframe
call glPolygonMode(GL_FRONT_AND_BACK,GL_LINE)
c Draw object
call glCallList(lindex)
c Set polygon mode to fill
call glPolygonMode(GL_FRONT_AND_BACK,GL_FILL)
c Reverse orientation
ccw = .not. ccw
20 continue
其他信息:启用剔除,深度函数为 GL_LESS。