Windows 在OpenGL中用边绘制模型

Windows 在OpenGL中用边绘制模型,windows,opengl,Windows,Opengl,我有模型soucast1.3DS 如果在CAD Autodesk Inventor中打开此模型,它看起来 如果我使用OpenGL的简单应用程序,它看起来 所以,我的问题是: 如何在我的应用程序OpenGL中获得与Inventor相同的结果? 只有区域的边缘是黑色的有许多方法。您可以使用复杂的着色器组合、模具缓冲区或对象缩放: 用黑色绘制稍微放大的模型,放置正面,例如GL_CULL_FACE=GL_CW。然后用正确的比例和颜色绘制法线模型,将面向后拉到GL_CCW上 不是一个完美的解决方案,可用于

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

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

所以,我的问题是:

如何在我的应用程序OpenGL中获得与Inventor相同的结果?
只有区域的边缘是黑色的

有许多方法。您可以使用复杂的着色器组合、模具缓冲区或对象缩放: 用黑色绘制稍微放大的模型,放置正面,例如GL_CULL_FACE=GL_CW。然后用正确的比例和颜色绘制法线模型,将面向后拉到GL_CCW上

不是一个完美的解决方案,可用于游戏中类似卡通的着色;可能对CAD来说太不精确了。如果它不适合你-谷歌opengl边缘轮廓


要澄清的是:三维建模软件除了面之外,还总是有关于边的信息,所以他们可以在绘制模型之后绘制边线,这样你们就可以得到一个轮廓。如果你没有边缘,或者像在游戏中一样——由于内存消耗和其他问题,你甚至不想拥有边缘——你必须执行某种形式的边缘检测或黑客攻击。

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

结果是:

类似于
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