C++ OpenGL不会显示任何内容

C++ OpenGL不会显示任何内容,c++,opengl,C++,Opengl,为什么我不能用这个代码显示任何东西 #include <iostream> #include "GL/glfw.h" #ifndef MAIN #define MAIN #include "GL/gl.h" #include "GL/glu.h" #endif using namespace std; void display(); int main() { int running = GL_TRUE; glfwInit(); if( !glfwOpen

为什么我不能用这个代码显示任何东西

#include <iostream>
#include "GL/glfw.h"
#ifndef MAIN
#define MAIN
#include "GL/gl.h"
#include "GL/glu.h"
#endif
using namespace std;

void display();

int main()
{
    int running = GL_TRUE;
    glfwInit();

    if( !glfwOpenWindow( 640,480, 0,0,0,0,0,0, GLFW_WINDOW ) )
    {
        glfwTerminate();
        return 0;
    }

    while( running )
    {
        //GL Code here
        display();

        glfwSwapBuffers();
        // Check if ESC key was pressed or window was closed
        running = !glfwGetKey( GLFW_KEY_ESC ) &&
        glfwGetWindowParam( GLFW_OPENED );
    }

    glfwTerminate();

    return 0;
}

void display()
{
    glClearColor(0,0,0,0);
    glClear(GL_COLOR_BUFFER_BIT);
    glViewport(0,0,640,480);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    //glTranslatef(0, 0, -2);
    glBegin(GL_POLYGON);
        glColor3f(1.0, 0.2, 0.2);
        glVertex3f(0.25, 0.25, 0.0);
        glVertex3f(0.75, 0.25, 0.0);
        glVertex3f(0.75, 0.75, 0.0);
        glVertex3f(0.25, 0.75, 0.0);
    glEnd();
    glFlush();
}
#包括
#包括“GL/glfw.h”
#ifndef干管
#定义主要
#包括“总账/总账h”
#包括“GL/glu.h”
#恩迪夫
使用名称空间std;
void display();
int main()
{
int running=GL_TRUE;
glfwInit();
如果(!glfwOpenWindow(640480,0,0,0,0,0,0,GLFW_窗口))
{
glfwTerminate();
返回0;
}
(跑步时)
{
//这里是总账代码
显示();
glfwSwapBuffers();
//检查是否按下ESC键或车窗是否关闭
running=!glfwGetKey(GLFW\U KEY\U ESC)&&
glfwGetWindowParam(GLFW_打开);
}
glfwTerminate();
返回0;
}
无效显示()
{
glClearColor(0,0,0,0);
glClear(GLU颜色缓冲位);
政府统计处(0,0640480),;
glMatrixMode(GLU模型视图);
glLoadIdentity();
//glTranslatef(0,0,-2);
glBegin(GL_多边形);
GL3F(1.0,0.2,0.2);
glVertex3f(0.25,0.25,0.0);
glVertex3f(0.75,0.25,0.0);
glVertex3f(0.75,0.75,0.0);
glVertex3f(0.25,0.75,0.0);
格伦德();
glFlush();
}

您没有使用
glViewport
或投影矩阵设置视口。如果你把透明的颜色改成黑色以外的颜色,你的窗口会有这种颜色吗

尝试将代码更改为:

void display()
{
    glClearColor(0,0,0,0);
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-1, 1, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    //glTranslatef(0, 0, -2);
    glBegin(GL_POLYGON);
        glColor3f(1.0, 0.2, 0.2);
        glVertex3f(0.25, 0.25, 0.0);
        glVertex3f(0.75, 0.25, 0.0);
        glVertex3f(0.75, 0.75, 0.0);
        glVertex3f(0.25, 0.75, 0.0);
    glEnd();
    glFlush();
}
(创建OpenGL窗口时,视口可能已正确设置,否则请使用窗口宽度和高度对其进行初始化)


同时禁用背面消隐如果多边形有不正确的缠绕,
glDisable(GL\u CULLFACE)

我认为问题在于当您没有指定坐标系时 乙二醇

默认坐标系为:

-1,1,-1,1,-1,1

因此,glTranslate将对象移动到坐标系之外,openGL将剪辑对象


如果将glTranslate()调用更改为translate by 1.0,则对象可见。

Yes;我的印象是视口是自动处理的。我认为您的印象是正确的;)我不确定它是否是OpenGL规范的一部分,但至少在windows上,当您创建渲染上下文时,视口将被设置为与窗口匹配。这是什么意思?还发布了一个关于背面剔除的小编辑。当我使用glTranslate时,除了清晰的颜色外,屏幕上什么都没有显示。基本上,我想调整“缩放”。
gluOrtho2D
将远剪裁平面和近剪裁平面分别设置为-1和1,如果在z方向上平移多边形,它将位于远剪裁平面的后面。
void glOrtho(GLdouble   left,
             GLdouble   right,
             GLdouble   bottom,
             GLdouble   top,
             GLdouble   nearVal,
             GLdouble   farVal);
void glFrustum(GLdouble  left,
               GLdouble  right,
               GLdouble  bottom,
               GLdouble  top,
               GLdouble  nearVal,
               GLdouble  farVal);