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();//无限循环,没有的敲的话会一闪而过或者根本看不到
} 展开
#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();//无限循环,没有的敲的话会一闪而过或者根本看不到
} 展开
1个回答
展开全部
先来回答你的问题。
无法显示的原因,投影设置的视见体没有将你定义的矩形模型包括在内。
直观来讲,你可以将gluOrtho2D试着调整为:
gluOrtho2D(-100,300.0,-100,300.0);同时设置背景为黑色,则得到效果:
进步一解释:
OpenGL中图形成像依赖于你定义的模型,比如你设置的4个position1
量以及投影时设置的投影参数,比如你用的gluOrtho2D。
你的代码中模型和投影参数设置都不是很理想,使用gluOrtho2D设置的正交投影裁剪平面的范围
(0,40.0,30.0,150.0);没有将你要显示的矩形模型包括在显示区域内,因此无法渲染。
注意设置适当的参数,这是初学者需要耐心学习的。你的代码看起来很混乱,最好采用一本适当教材(红宝书),或者跟着一个教程(搜索 OpenGL tutorial)实际动手学习。
对于这个例子,同时思考: 为什么是三角形而不是矩形?
为什么我之前的图形没有显示出来?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询