3D球体一个(纪念第一个opengl程序~~)
2011-02-10 17:46
393 查看
终于搞定第一个像样的简单opengl程序,不过纹理贴图部分目前还是一头雾水啊,明天一定将其搞定。
先上个实例图:
功能很简单,使用鼠标的左中右键分别设置球体颜色的 RGB参数以调整颜色。
按a或d使球体旋转
代码如下
先上个实例图:
功能很简单,使用鼠标的左中右键分别设置球体颜色的 RGB参数以调整颜色。
按a或d使球体旋转
代码如下
// display.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h> #include <gl/GL.h> #include <gl/glu.h> #include <gl/glut.h> #include <cstdlib> 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; }
相关文章推荐
- 3D球体一个(纪念第一个opengl程序~~)
- iphone 的第一个3D程序(OpenGL ES) 庆祝!
- OpenGL学习程序,创建一个3D的三角椎体和正方体并旋转
- 下载了一个GlobalTime的程序,导入之后发现找不到android.opengl.Object3D;android.pim.DateUtils;这两个类
- 第一个OpenGL程序--基于VS2005和GLUT
- 用window远程桌面连接ubuntu12.04显示opengl 3D程序问题
- 在vs2005下的第一个OpenGL程序。
- 第一个Opengl程序
- QT中第一个OpenGL程序
- opencv 学习第一天 学习opencv(中文版)第一个程序 打开一个图像
- openGL 创建一个旋转的简单的3D模型
- 9-6 文件比较。写一个比较两个文本文件的程序。如果不同,给出第一个不同处的行号和列号。
- 一个简单的OpenGL程序
- 第一个OpenGL程序
- 编写一个程序,将两个字符串链接起来, 结果取代第一个字符串
- OpenGL(一)二维图形的绘制:一个简单的绘制矩形程序
- C# 只开启一个程序,如果第二次打开则自动将第一个程序显示到桌面
- Opengl创建一个球体
- 为了忘却的纪念----开始从操就业的第一个SHELL程序