opengl探照灯效果的问题
#include <GL/glut.h>
#include <stdlib.h>
//三角形顶点坐标
static GLfloat verts[6] =
{
-200.0, -200.0,
0.0, 200.0,
200.0, -200.0
};
//顶点坐标法线向量
static GLfloat norverts[9] =
{
0,0,1,
0,0,1,
0,0,1
};
static void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess[] = { 50.0 };
GLfloat light_position0[] = { 0.0, 0.0, 350.0, 1.0 };
glShadeModel (GL_SMOOTH);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position0);
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 30.0);//探照灯角度
glEnable(GL_NORMALIZE);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}
static void display(void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_NORMALIZE);
glVertexPointer(2, GL_FLOAT, 0, verts);
glNormalPointer(GL_FLOAT, 0, norverts);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
/*draw the object*/
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glFlush ();
}
static void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho (-0.5*w, 0.5*w, -0.5*h, 0.5*h, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
/* ARGSUSED1 */
static void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (600, 600);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
以上是我写的一个程序,本以为会出来从三角形中间向四周逐渐变暗的效果
结果出来一个从最上面的顶点到下面逐渐变暗的效果。
那位大牛给解决以下,或者给个解释之类的。
谢了!