[英]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每行需要两个顶点,而您在glBegin
和glEnd
调用之间仅提供了一个顶点。
glBegin
和glEnd
应该书挡特定的几何图形 , 而不是单独的顶点。
但是,仅将调用移出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.