C++ 只有黑色窗口绘制三角形,在MacOS上使用openGL和GLUT以及Xcode

C++ 只有黑色窗口绘制三角形,在MacOS上使用openGL和GLUT以及Xcode,c++,xcode,macos,opengl,glut,C++,Xcode,Macos,Opengl,Glut,我的窗口上没有显示任何东西,只有黑色纯色,构建继续进行,但没有其他事情发生 我也在Windows上尝试了同样的代码,但仍然没有 这是我的密码: #define _USE_MATH_DEFINES #include <stdio.h> #include <stdlib.h> #include <math.h> #include <vector> #if defined(__APPLE__) #include <GLUT/GLUT.h>

我的窗口上没有显示任何东西,只有黑色纯色,构建继续进行,但没有其他事情发生

我也在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;
}
定义使用数学定义
#包括
#包括
#包括
#包括
#如果已定义(\uuuu苹果\uuuuu)
#包括
#包括
#包括
#否则
#如果已定义(WIN32)| |已定义(_WIN32)| |已定义(uu WIN32_uu)
#包括
#恩迪夫
#必须下载include//
#除非您有苹果,否则必须下载include//
#恩迪夫
使用名称空间std;
无效更改视口(int w,int h)
{
glViewport(0,0,w,h);
}
void render()
{
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glBegin(GL_三角形);
glVertex2f(0.5,0.5);
glVertex2f(-0.5,-0.5);
glVertex2f(1.5,1.5);
格伦德();
glutSwapBuffers();
}
int main(int argc,char*argv[]){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_双精度| GLUT_RGBA | GLUT_深度);
glutInitWindowSize(800600);
glutCreateWindow(“你好,德国劳埃德船级社”);
GLUTEFUNC(更改视口);
glutDisplayFunc(渲染);
glMatrixMode(GL_投影);
gluOrtho2D(0400,0500);
glutMainLoop();
返回0;
}

这是一个零面积三角形,所有顶点都在一条线上。您可以使用
GL\u LINE\u LOOP
而不是
GL\u三角形
或使用
glPolygonMode(GL\u FRONT\u和GL\u BACK,GL\u LINE)
进行双重检查

零面积三角形在光栅化过程中通常不会生成任何碎片。没有碎片,没有画

修正:

  • 将非零面积三角形传递给OpenGL
  • 摆脱
    glMatrixMode()
    &
    gluOrtho2D()
    调用,那么小的几何体不需要它们
  • 不需要只调用
    glViewport()
    ;;的重塑回调
总而言之:

#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;
}
#包括
void render()
{
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glBegin(GL_三角形);
glVertex2f(-0.5,-0.5);
glVertex2f(0.5,-0.5);
glVertex2f(0.0,0.5);
格伦德();
glutSwapBuffers();
}
int main(int argc,char*argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_双精度| GLUT_RGBA | GLUT_深度);
glutInitWindowSize(800600);
glutCreateWindow(“你好,德国劳埃德船级社”);
glutDisplayFunc(渲染);
glutMainLoop();
返回0;
}

噢,哇,你帮了大忙,我没想到这个问题是数学问题,而不是语法问题。。现在它向我展示了白色的通缉三角!谢谢