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;
}
以上是我写的一个程序,本以为会出来从三角形中间向四周逐渐变暗的效果
结果出来一个从最上面的顶点到下面逐渐变暗的效果。
那位大牛给解决以下,或者给个解释之类的。
谢了!
#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;
}
以上是我写的一个程序,本以为会出来从三角形中间向四周逐渐变暗的效果
结果出来一个从最上面的顶点到下面逐渐变暗的效果。
那位大牛给解决以下,或者给个解释之类的。
谢了!
...全文
相关推荐
OpenGL实现大眼、美颜、贴纸效果
使用OpenGL和OpenCv,实现了人脸和人脸关键点定位,实现了放大眼睛效果,实现贴纸和美颜磨皮效果
opengl 绘制水面的效果
opengl 绘制水面的效果
OpenGL光照效果 OpenGL光照效果 OpenGL光照效果
OpenGL光照效果 OpenGL光照效果 OpenGL光照效果
Qt OPengl 雷达余晖效果
这个只是一点简单的OPengl测试代码,不是正式开发的代码,主要就是使用OPengl绘制雷达,和是雷达扫描余晖效果 有需要的可以参考一下,或许将实现更多功能
camera2 opengl实现滤镜效果录制视频
简单的java代码,复制到项目就可以了,我只用了黑白滤镜效果


其它技术问题
