2017-04-03 326 views
0

据我所知,从OpenGL draw rectangle outline - 给定一个适当的顶点数组,GL_LINE_LOOP应绘制一个正方形。GL_LINE_LOOP如何绘制三角形?

所以,我想这波前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不应该为这个顶点序列绘制对角线)?那么,为什么我会得到一个对角线 - 造成这个问题的原因可能是什么?我该如何摆脱它?

+2

你确定你的OBJ解析器不会将n> 3-gons分解为三角形? – genpfault

+0

谢谢@genpfault - 我不确定;我手动编写了这个文件,我认为这已经足够了,但我想我最好还是检查解析器......再次感谢! – sdaau

回答

1

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

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

    Array<TripleIndex> triples; 
... 

...我猜其中,表示原始网格分割成一个新的网格...