-1

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

Autodesk Inventor 中的模型

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

OpenGL 应用程序中的模型

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

所以,我的问题是:

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

4

2 回答 2

2

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

不是一个完美的解决方案,可用于游戏中的卡通着色;对于 CAD 来说可能太不精确了。如果它不适合您 - google opengl edge outline。

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

于 2013-09-19T08:37:09.660 回答
0

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

结果是: Opengl

于 2013-09-25T06:54:26.023 回答