openGL 程序运行后窗口里面没东西,已经不止一次了。下面是代码,求解答。

#include<math.h>#include<stdlib.h>#include<GL/glut.h>#include<cstdio>#include<time.h>... #include <math.h>
#include <stdlib.h>
#include <GL/glut.h>
#include <cstdio>
#include<time.h>
#include<Windows.h>
//该程序为外围是一个LOOP 封闭折线正方形, 中间还有一个阴影(填充区)正方形
void init(void)
{
glClearColor(1.0,1.0,1.0,0); //背景颜色

glMatrixMode(GL_PROJECTION);//参数

gluOrtho2D(0,40.0,30.0,150.0);

}
void shadow(void)
{
int position1[]={100,100};
int position2[]={100,200};
int position3[]={200,200};
int position4[]={200,200};//坐标,PS:应该有更简单的方法,不用这么多;

glClear(GL_COLOR_BUFFER_BIT);//清除显示

glColor3f(1.0,1.0,0.0);

glBegin(GL_LINE_LOOP); //封闭折线
glVertex2iv(position1);
glVertex2iv(position2);
glVertex2iv(position3);
glVertex2iv(position4);
glEnd();
glColor3f(0.2f, 0.4f, 0.6f);
glRectf(-1.0f, -1.0f, 0.5f, 0.5f);
glFlush();
}
void main(int argc, char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(600,600);
glutCreateWindow("LOOP 和 填充区 ");

init();

glutDisplayFunc(shadow);//注册一个绘图函数,对窗体进行重新绘制操作

glutMainLoop();//无限循环,没有的敲的话会一闪而过或者根本看不到
}
展开
 我来答
开阳曦39
2014-10-19 · TA获得超过180个赞
知道答主
回答量:44
采纳率:0%
帮助的人:63.1万
展开全部

先来回答你的问题。

无法显示的原因,投影设置的视见体没有将你定义的矩形模型包括在内。

直观来讲,你可以将gluOrtho2D试着调整为:

gluOrtho2D(-100,300.0,-100,300.0);同时设置背景为黑色,则得到效果:



进步一解释:


OpenGL中图形成像依赖于你定义的模型,比如你设置的4个position1
量以及投影时设置的投影参数,比如你用的gluOrtho2D。

你的代码中模型和投影参数设置都不是很理想,使用gluOrtho2D设置的正交投影裁剪平面的范围

(0,40.0,30.0,150.0);没有将你要显示的矩形模型包括在显示区域内,因此无法渲染。

注意设置适当的参数,这是初学者需要耐心学习的。你的代码看起来很混乱,最好采用一本适当教材(红宝书),或者跟着一个教程(搜索 OpenGL tutorial)实际动手学习。

对于这个例子,同时思考: 为什么是三角形而不是矩形?

                 为什么我之前的图形没有显示出来?

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式