[英]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.