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);