OpenGL黑屏/没有绘制?
Posted
技术标签:
【中文标题】OpenGL黑屏/没有绘制?【英文标题】:OpenGL black screen/nothing drawn? 【发布时间】:2011-12-22 20:46:01 【问题描述】:为什么这段代码会产生黑屏(什么都没画...)?
我正在创建一个 Pong 克隆,但如果不让它工作,我就无法继续。
#include <GL/glut.h>
struct Rectangle
int x;
int y;
int width;
int height;
;
struct Ball
int x;
int y;
int radius;
;
typedef struct Rectangle Rectangle;
typedef struct Ball Ball;
Rectangle rOne, rTwo;
Ball ball;
void display(void);
void reshape(int w, int h);
void drawRectangle(Rectangle *r);
int main(int argc, char* argv[])
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(800,600);
glutCreateWindow("Pong");
gluOrtho2D(0,0,800.0,600.0);
rOne.x = 100;
rOne.y = 100;
rOne.width = 100;
rOne.height = 50;
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
void display(void)
glClear(GL_COLOR_BUFFER_BIT);
drawRectangle(&rOne);
glFlush();
glutSwapBuffers();
void reshape(int w, int h)
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,0,(GLfloat)w,(GLfloat)h);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
void drawRectangle(Rectangle *r)
glBegin(GL_QUADS);
glVertex2i(r->x,r->y);
glVertex2i(r->x+(r->width-1),r->y);
glVertex2i(r->x+(r->width-1),r->y+(r->height-1));
glVertex2i(r->x,r->y+(r->height-1));
glEnd();
【问题讨论】:
首先,您的意思可能是:gluOrtho2D(0, 800, 0, 600);
。在reshape
函数中调用此函数后,不要加载恒等模型视图矩阵。
你为什么接受这个答案?一般来说,你不只是接受某人回应的第一件事。通常等待更多答案并选择最佳。你知道的,能解决你问题的那个。
【参考方案1】:
您正在请求宽度为零的正射投影:
gluOrtho2D(0,0,(GLfloat)w,(GLfloat)h);
这可能是你的意思:
gluOrtho2D(0,(GLfloat)w,0,(GLfloat)h);
例子:
#include <GL/glut.h>
typedef struct
int x;
int y;
int width;
int height;
Rect;
typedef struct
int x;
int y;
int radius;
Ball;
Rect rOne, rTwo;
Ball ball;
void display(void);
void reshape(int w, int h);
void drawRectangle(Rect *r);
int main(int argc, char* argv[])
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(800,600);
glutCreateWindow("Pong");
rOne.x = 100;
rOne.y = 100;
rOne.width = 100;
rOne.height = 50;
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
void display(void)
glClear(GL_COLOR_BUFFER_BIT);
drawRectangle(&rOne);
glFlush();
glutSwapBuffers();
void reshape(int w, int h)
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,(GLfloat)w,0,(GLfloat)h);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
void drawRectangle(Rect *r)
glBegin(GL_QUADS);
glVertex2i(r->x,r->y);
glVertex2i(r->x+(r->width-1),r->y);
glVertex2i(r->x+(r->width-1),r->y+(r->height-1));
glVertex2i(r->x,r->y+(r->height-1));
glEnd();
【讨论】:
【参考方案2】:你的问题在这里:
gluOrtho2D(0,0,800.0,600.0);
gluOrtho2D 不像 glViewport。 gluOrtho2D的参数是:
gluOrtho2D(left, right, bottom, top);
所以你必须这样称呼它
gluOrtho(0, w, 0, h);
【讨论】:
以上是关于OpenGL黑屏/没有绘制?的主要内容,如果未能解决你的问题,请参考以下文章
我的OpenGL学习进阶之旅当你运行OpenGL程序的时候,程序并不绘制任何内容,并且白屏和黑屏的时候怎么排查?
我的OpenGL学习进阶之旅当你运行OpenGL程序的时候,程序并不绘制任何内容,并且白屏和黑屏的时候怎么排查?