2012-12-09 36 views
2

这将是我在stackoverflow上的第一篇文章。 所以,我正在制作一个简单的程序(VISUAL STUDIO 2012),使用GLUT库。我基本上试图展示一个圆环,但是我得到一个黑色屏幕。简单的GLUT库问题

#include<gl/glut.h> 
#include<math.h> 

GLfloat r=8; 
GLint spin=0; 
GLfloat light_position[]={0.0,0.0,0.0,1.0}; 
GLfloat ex,ey=0, ez, upx=0, upy=0, upz=0; 

void init(){ 
glClearColor(1.0,1.0,1.0,1.0); 
glShadeModel(GL_FLAT); 
glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT0); 
glEnable(GL_DEPTH_TEST); 
} 

void display(void){ 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_TEST); 
glPushMatrix(); 
double sine = (float)sin((float)spin); 
double cosine = (float)cos((float)spin); 
ex=r*sine; 
ez=r*cosine; 
gluLookAt(ex,ey,-5.0,0,0,0,upx,upy,upz); 
glColor3b(1.0,0,0); 
glutSolidTorus(0.275,0.85,8,15); 
glPopMatrix(); 
glFlush(); 
} 

void reshape(int w, int h) 
{ 
glViewport(0,0,(GLsizei) w, (GLsizei) h); 
glMatrixMode (GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0,20.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glLightfv(GL_LIGHT0, GL_POSITION, light_position); 
} 

void mouse(int button, int state, int x, int y) 
{ 
switch(button) 
{ 
case GLUT_LEFT_BUTTON: 
    if(state == GLUT_DOWN){ 
     spin = (spin+15)%360; 
     glutPostRedisplay(); 
} 
    break; 
default: 
    break; 

    } 
} 

void main(int argc, char **argv) 
{ 
glutInit(&argc,argv); 
glutInitDisplayMode(GLUT_RGBA); 
glutInitWindowSize(800,600); 
glutInitWindowPosition(300,300); 
glutCreateWindow("Light Rotating Torus"); 
init(); 
glutDisplayFunc(display); 
glutReshapeFunc(reshape); 

glutMouseFunc(mouse); 
glutMainLoop(); 
} 

有人可以修改它/给一个提示,所以它显示的东西? 谢谢

+1

我看不到你添加任何灯光除了在'reshape'。 –

+0

此外,'lookAt'代码看起来很奇怪。你正在计算'ez',但是你使用'ey'来代替。 –

+0

另外,请尝试学习[SDL](http://www.libsdl.org/),而不是尝试过量。谷物过于陈旧,基本上很烂;)(但这与你的问题没有任何关系)。 – Shahbaz

回答

0

最明显的问题是你的UP向量。您设置了upx,upyupz。这不是一个有效的向上矢量,请尝试将upy更改为1.0f。正因为如此,你的环面可能会被渲染出屏幕。

此外,glClear不会将GL_DEPTH_TEST作为参数。 正确的调用应该是:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

正因为如此,你的屏幕是不被清除,留下黑色(当你设定glClearColor为白色)。

最后,主要功能应该始终返回INT,从未无效(尽管它不会改变你的情况的任何东西)

+0

非常感谢! –