2017-04-03 328 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; 
... 

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