繁体   English   中英

来自x,y和z文本文件的OpenGL线框

[英]OpenGL wireframe from x,y, and z text file

我有一个具有3个坐标的文件,可以将其渲染为点,线,三角形或任何图元。 我想构建此文件的线框模型,应该更改或添加什么才能将其视为线框

样品:

void draw()
{   
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glOrtho(-50.0,50.0,-50.0,50.0,-50.0,50.0);  
    glColor4f(1.0f,1.0f,1.0f,1.0f);         
    glPointSize(3); 
    glLineWidth(3);
    glColor3f(1.0f,1.0f,1.0f);
    for(int i=0; i<points; i++)
    {   
        glBegin(GL_LINES);
        glNormal3f(0.0f, 0.0f, 1.0f);
        glVertex3d(vList[i][0],vList[i][1],vList[i][2]);
        glEnd();             
    }
}

这将永远不会产生任何输出:

for(int i=0; i<points; i++)
{   
    glBegin(GL_LINES);
    glNormal3f(0.0f, 0.0f, 1.0f);
    glVertex3d(vList[i][0],vList[i][1],vList[i][2]);
    glEnd();             
}

GL_LINES每行需要两个顶点,而您在glBeginglEnd调用之间仅提供了一个顶点。

glBeginglEnd应该书挡特定的几何图形而不是单独的顶点。

但是,仅将调用移出for循环并不能解决您的问题:

glBegin(GL_LINES);
for(int i=0; i<points; i++)
{   
    glNormal3f(0.0f, 0.0f, 1.0f);
    glVertex3d(vList[i][0],vList[i][1],vList[i][2]);
}
glEnd();             

几乎可以产生您想要的内容,但实际上会显示所有其他行,因为它将您发送的每一对都视为一行。 因此,它将在点1和2之间,然后在3和4之间绘制一条线。这是因为GL_LINES的意思是“将我发送的每一对都解释为一条全新的线,与先前的顶点无关。

您真正想要的是:

glBegin(GL_LINE_STRIP);
for(int i=0; i<points; i++)
{   
    glNormal3f(0.0f, 0.0f, 1.0f);
    glVertex3d(vList[i][0],vList[i][1],vList[i][2]);
}
glEnd();             

使用GL_LINE_STRIP指示OpenGL应该获取前两个顶点并绘制一条线,然后对于每个新顶点,从最后一行的末尾绘制另一条线。

警告

所有这些都假定您的文件实际上是设计成产生这样的行。 大多数3D文件格式都包括顶点和索引。 顶点告诉您3D位置,而索引告诉您应该将哪些点连接到哪个点。 但是,由于这看起来像是一种家庭作业,因此我将假定该文件如前所述,这是应按顺序连接的XYZ坐标的简单列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM