На моем окне ничего не отображается, только черный сплошной цвет, сборка продолжается, но больше ничего не происходит ..
Также я попробовал тот же код в 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;
}
Это треугольник с нулевой площадью, все вершины в одной линии. Вы можете перепроверить, используя GL_LINE_LOOP
вместо GL_TRIANGLES
или используя glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
,
Треугольники с нулевой площадью обычно не генерируют фрагменты во время растеризации. Нет фрагментов, ничего не нарисовано.
Исправления:
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;
}
Других решений пока нет …