终于搞定第一个像样的简单opengl程序,不过纹理贴图部分目前还是一头雾水啊,明天一定将其搞定。
先上个实例图:
【3D球体一个(纪念第一个opengl程序~~)】
功能很简单,使用鼠标的左中右键分别设置球体颜色的RGB参数以调整颜色。
按a或d使球体旋转
代码如下// display.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #include #include const GLfloat lightPosition[] = {10.0,10.0,10.0,0.0};
const GLfloat whiteLight[] = {0.8,0.8,0.8,1.0};
GLfloat matSpecular [] = {0.3,0.3,0.3,1.0};
GLfloat matShininess [] = {20.0};
GLfloat matEmission [] = {0.3,0.3,0.3,1.0};
GLfloat spin = 0;
void init() { glClearColor(0.3,0.3,0.3,1.0);
glClearDepth(1.0);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glLightfv(GL_LIGHT0,GL_POSITION,lightPosition);
glLightfv(GL_LIGHT0,GL_DIFFUSE,whiteLight);
glLightfv(GL_LIGHT0,GL_SPECULAR,whiteLight);
} void display() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
;
glOrtho(-10.0,10.0,-10.0,10.0,-10.0,10.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(spin,0.0,1.0,0.0);
glMaterialfv(GL_FRONT,GL_SPECULAR,matSpecular);
glMaterialfv(GL_FRONT,GL_SHININESS,matShininess);
glMaterialfv(GL_FRONT,GL_EMISSION,matEmission);
glutSolidSphere(3.0,16,16);
glPopMatrix();
glFlush();
} void reshape(int w,int h) { glViewport(0.0,0.0,(GLsizei) w,(GLsizei) h);
} void keyboardFunc(unsigned char key,int x,int y) { switch(key) { case 'a': spin +=30;
break;
case 'd': spin -=30;
break;
} if(spin<360) spin +=360;
else if(spin>=360) spin -=360;
glutPostRedisplay();
} void mouseFunc(int button,int state,int x,int y) { if(state==GLUT_DOWN){ switch (button) { case GLUT_LEFT_BUTTON: matEmission[0]+=1.0;
if(matEmission[0]>1.0) matEmission[0]-=1.1;
break;
case GLUT_MIDDLE_BUTTON: matEmission[1]+=1.0;
if(matEmission[1]>1.0) matEmission[1]-=1.1;
break;
case GLUT_RIGHT_BUTTON: matEmission[2]+=1.0;
if(matEmission[2]>1.0) matEmission[2]-=1.1;
break;
} glutPostRedisplay();
} } int main(int argc,char *argv[]) { glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA|GLUT_DEPTH);
glutInitWindowSize(450,450);
glutInitWindowPosition(150,150);
glutCreateWindow("rotate sphere");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboardFunc);
glutMouseFunc(mouseFunc);
init();
glutMainLoop();
return EXIT_SUCCESS;
}
推荐阅读