При попытке визуализации трехмерного объекта с использованием OpenGL (и библиотеки GLFW) модель испытывает много мерцаний.Я читаю файл .obj
, используя библиотеку, которую я написал сам.
Моя функция рендеринга написана ниже: К сожалению, чтобы понять, как вводятся грани и вершины, мне придетсяпредоставить весь мой код, который связан: Zip-код вместе с исполняемым файлом и примером .obj
: Источник
Я использую файлы .obj из здесь для тестирования программы,В настоящее время программа не поддерживает нормалей и текстур, что не является проблемой, поскольку большинство моделей на сайте не имеют их.Кроме того (прямо сейчас) он читает только из «123.obj», поэтому файл не должен называться как-либо иначе.И он принимает только один пробел, не более того.
float render()
{
glfwSetTime(0.0f);
int win_width;
int win_height;
glfwGetWindowSize(&win_width, &win_height);
float win_aspect = (float)win_width / (float)win_height;
glViewport(0, 0, win_width, win_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90, win_aspect, 0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 0, 50.0, 0, 0, 0, 0.0, 1.0, 0.0);
glEnable(GL_DEPTH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_NORMALIZE);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glRotatef(angle , 0 , 1, 0);
glColor3f(0.0f, 0.0f, 0.0f);
int index = 0;
for(int a = 0; a < faces.size(); a++)
{
if(faces[a].vertices.size() == 3)
{
glBegin(GL_TRIANGLES);
}
else
{
glBegin(GL_QUADS);
}
for(int b = 0; b < faces[a].vertices.size(); b++)
{
index = faces[a].vertices[b];
glVertex3f(vertices[index].Dimensions[_x], vertices[index].Dimensions[_y], vertices[index].Dimensions[_z]);
}
glEnd();
}
glfwSwapBuffers();
return (float)glfwGetTime();