读书人

请高手看一上小弟我的OpenGL代码哪里有

发布时间: 2012-11-04 10:42:42 作者: rapoo

请高手看一下我的OpenGL代码哪里有问题?
我在网上下了一个《OpenGL入门教程》电子书,上面写了一个太阳、地球、月球的代码,但是运行的时候出了问题,生成的程序是乱的。不知道问题在哪里,代码如下:

//myDisplay函数是书上的。

#include <GL/glut.h>

//太阳、地球和月亮
//加入每个月都是30天
//一年12个月,一共是360天

static int day=200;//day的变化:从0到359

void myDisplay(void)
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);


glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(75, 1, 1, 400000000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, -200000000, 200000000, 0, 0, 0, 0, 0,1);

//绘制红色的“太阳”
glColor3f(1.0f, 0.0f, 0.0f);
glutSolidSphere(696000000, 20, 20);

//绘制蓝色的“地球”

glColor3f(0.0f, 0.0f, 1.0f);
glRotatef(day/360.0*360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(150000000, 0.0f, 0.0f);
glutSolidSphere(15945000, 20, 20);

//绘制黄色的“月亮”
glColor3f(1.0f, 1.0f, 0.0f);
glRotatef(day/30.0*360.0-day/360.0*360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(38000000, 0.0f, 0.0f);
glutSolidSphere(4345000, 20, 20);

glFlush();
}

int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutCreateWindow("openGL标题");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}

[解决办法]
该程序基本上没有问题,就是我上面说的情况,glutSolidSphere(696000000, 20, 20); 太阳的半径太设置大了,导致整个屏幕看起来都是红色, 还有最好养成习惯glutInitWindowSize(500,500); 设置一下生成的窗口大小,代码如下,粘贴进去就可以运行

// Sun.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


#include <GL/glut.h>

//太阳、地球和月亮
//加入每个月都是30天
//一年12个月,一共是360天

static int day=200; //day的变化:从0到359

void myDisplay(void)
{

glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);


glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(75, 1, 1, 400000000);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, -200000000, 200000000, 0, 0, 0, 0, 0,1);

//绘制红色的“太阳”

glColor3f(1.0f, 0.0f, 0.0f);
//glutSolidSphere(696000000, 20, 20);
glutSolidSphere(69600000, 20, 20);

//绘制蓝色的“地球”

glColor3f(0.0f, 0.0f, 1.0f);
glRotatef(day/360.0*360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(150000000, 0.0f, 0.0f);
glutSolidSphere(15945000, 20, 20);

//绘制黄色的“月亮”
glColor3f(1.0f, 1.0f, 0.0f);
glRotatef(day/30.0*360.0-day/360.0*360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(38000000, 0.0f, 0.0f);
glutSolidSphere(4345000, 20, 20);

glFlush();
}

int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(100, 100);
glutCreateWindow("openGL标题");
glutDisplayFunc(myDisplay);
glutMainLoop();
return 0;
}

读书人网 >C语言

热点推荐