据我所知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文件的输出是:
...就是 - 有一条对角线,如果我使用GL_LINE_LOOP,我不知道它是如何最终结束的? (像this one这样的图像表明GL_LINE_LOOP不应该为这个顶点序列绘制对角线)?那么为什么我会得到一个对角线 - 导致它的问题可能是什么,我怎么能摆脱它呢?
答案 0 :(得分:1)
感谢@genpfault的评论,发现它确实是分解成三角形的解析器;解析器是WavefrontObjParser.h,其中包含:
struct Face
{
Face (String::CharPointerType t)
{
while (! t.isEmpty())
triples.add (parseTriple (t));
}
Array<TripleIndex> triples;
...
...我猜,这表明原始网格被分割成新的网格......