在OpenGL中绘制带边的模型

时间:2013-09-19 07:39:55

标签: windows opengl

我有模特soucast1.3DS 如果我在CAD Autodesk Inventor中打开此模型,它看起来

model in Autodesk Inventor

如果我使用OpenGL使用简单的应用程序,它看起来

model in OpenGL app

GL.Color3(Color.Aqua);
GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill);
DrawMatrix(); // draw model
GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line);
GL.Enable(EnableCap.PolygonOffsetLine);
GL.PolygonOffset(-1.0f, -1.0f);
GL.Color3(Color.Black);
DrawMatrix(); // draw model

所以,我的问题是:

如何从Inventor中看到我的应用程序(OpenGL)中的结果? (只有区域边缘为黑色)

2 个答案:

答案 0 :(得分:2)

有很多方法。您可以使用棘手的着色器组合,模板缓冲区或对象缩放: 用黑色绘制略微放大的模型,丢弃正面(例如GL_CULL_FACE = GL_CW)。然后绘制具有正确比例和颜色的正常模型,后退面(GL_CCW)。

不是一个完美的解决方案,可用于游戏中的卡通式阴影;可能对CAD来说过于苛刻。如果它不适合你 - 谷歌opengl边缘轮廓。

澄清事情:除了面部之外,3D建模软件总是有关于边缘的信息,因此它们可以在绘制模型后绘制边线,并获得轮廓。如果你没有边缘(或者像游戏一样 - 甚至不想因为内存消耗和其他问题而有边缘) - 你必须执行某种形式的边缘检测或黑客攻击。

答案 1 :(得分:0)

我解决了。将模型更改为STL(包含三角形和法线),找到区域(法线比较)和写入算法以查找边界。

结果是: Opengl