У меня есть файл с 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-позициях, но индексы показывают, какие точки должны быть связаны с какими. Однако, поскольку это выглядит как своего рода домашнее задание, я предполагаю, что файл соответствует описанию, это простой список координат X-Y-Z, которые должны быть соединены последовательно.
Других решений пока нет …