Только черное окно рисует Треугольник, используя openGL и GLUT с Xcode на MacOS

На моем окне ничего не отображается, только черный сплошной цвет, сборка продолжается, но больше ничего не происходит ..

Также я попробовал тот же код в Windows, но ничего не получилось.

Вот мой код:

#define _USE_MATH_DEFINES
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <vector>

#if defined(__APPLE__)
#include <GLUT/GLUT.h>
#include <OpenGL/gl3.h>
#include <OpenGL/glu.h>
#else
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
#include <windows.h>
#endif
#include <GL/glew.h>        // must be downloaded
#include <GL/freeglut.h>    // must be downloaded unless you have an Apple
#endif

using namespace std;

void changeViewPort(int w, int h)
{
glViewport(0, 0, w, h);
}

void render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2f(0.5, 0.5);
glVertex2f(-0.5, -0.5);
glVertex2f(1.5, 1.5);
glEnd();
glutSwapBuffers();
}

int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("Hello, GL");
glutReshapeFunc(changeViewPort);
glutDisplayFunc(render);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0,400,0,500);
glutMainLoop();
return 0;
}

1

Решение

Это треугольник с нулевой площадью, все вершины в одной линии. Вы можете перепроверить, используя GL_LINE_LOOP вместо GL_TRIANGLES или используя glPolygonMode(GL_FRONT_AND_BACK, GL_LINE),

Треугольники с нулевой площадью обычно не генерируют фрагменты во время растеризации. Нет фрагментов, ничего не нарисовано.

Исправления:

  • Передайте треугольник с ненулевой площадью в OpenGL.
  • Избавиться от glMatrixMode() & gluOrtho2D() звонки, они вам не нужны для такой маленькой геометрии.
  • Нет необходимости в изменении формы обратного вызова, который только вызывает glViewport(); Стандартный обратный вызов GLUT уже делает это за вас.

Все вместе:

#include <GL/glut.h>

void render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2f( -0.5, -0.5 );
glVertex2f(  0.5, -0.5 );
glVertex2f(  0.0,  0.5 );
glEnd();
glutSwapBuffers();
}

int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("Hello, GL");
glutDisplayFunc(render);
glutMainLoop();
return 0;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector