GL_LINE_LOOP怎么可能绘制三角形?

时间:2017-04-03 15:43:22

标签: c++ opengl

据我所知OpenGL draw rectangle outline - 给定一个合适的顶点数组,GL_LINE_LOOP应绘制一个正方形。

所以,我正在尝试这个Wavefront .obj文件:

v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 1.0 1.0 0.0
v 0.0 1.0 0.0
g myPlane
f 1 2 3 4

...我希望x,y为(0,0) - > (1,0) - > (1,1) - > (0,1)会提供一个正方形。但是,我在一个程序中尝试这个,这个程序是https://github.com/julianstorer/JUCE/blob/master/examples/Demo/Source/Demos/OpenGLDemo.cpp的简化版本......在那里使用它:

      attributes.enable (openGLContext);
      glDrawElements (GL_LINE_LOOP, vertexBuffer.numIndices, GL_UNSIGNED_INT, 0); //GL_TRIANGLES
      attributes.disable (openGLContext);

...作为C ++绘图代码,上面.obj文件的输出是:

juce

...就是 - 有一条对角线,如果我使用GL_LINE_LOOP,我不知道它是如何最终结束的? (像this one这样的图像表明GL_LINE_LOOP不应该为这个顶点序列绘制对角线)?那么为什么我会得到一个对角线 - 导致它的问题可能是什么,我怎么能摆脱它呢?

1 个答案:

答案 0 :(得分:1)

感谢@genpfault的评论,发现它确实是分解成三角形的解析器;解析器是WavefrontObjParser.h,其中包含:

struct Face
{
    Face (String::CharPointerType t)
    {
        while (! t.isEmpty())
            triples.add (parseTriple (t));
    }

    Array<TripleIndex> triples;
...

...我猜,这表明原始网格被分割成新的网格......