[实例]OpenGL绘制茶壶(光照、三维变换)
来源:互联网 发布:学校机房还原软件 编辑:程序博客网 时间:2024/04/28 05:04
这里仅仅提供一个实例程序,如果对opengl的相关知识了解不多,可以看看我的其他博客专题 (ฅ• . •ฅ)。
程序目标:
绘制一个茶壶,用“+、-”键来旋转茶壶,同时实现光照。
#include <windows.h>#ifdef __APPLE__#include <GLUT/glut.h>#else#include <GL/glut.h>#endif#include <stdlib.h>double angle = 0.0;void initialize(){ glClearColor(1.0,1.0,1.0,0.0); //设置光照 const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f }; const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f }; const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f }; const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat high_shininess[] = { 100.0f }; glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glEnable(GL_LIGHT0); glEnable(GL_NORMALIZE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);}static void resize(int width, int height){ //指定视口 glViewport(0, 0, width, height); //投影变换---平截头体 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(40.0,(GLdouble)width/(GLdouble)height,0.1,10000.0);}static void display(void){ //视图变换,指定相机 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0,0.0,5.0, 0.0,0.0,0.0, 0.0,1.0,0.0); //模型变换 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(1.0,0.0,0.0); glPushMatrix(); glRotatef(angle,0.0,1.0,0.0); glutSolidTeapot(1.0); glPopMatrix(); glutSwapBuffers();}static void key(unsigned char key, int x, int y){ switch (key) { case 27 : case 'q': exit(0); break; case '+': angle++; break; case '-': angle--; break; } glutPostRedisplay();}/* Program entry point */int main(int argc, char *argv[]){ glutInit(&argc, argv); glutInitWindowSize(640,480); glutInitWindowPosition(10,10); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("GLUT Shapes"); initialize(); glutReshapeFunc(resize); glutDisplayFunc(display); glutKeyboardFunc(key); glutMainLoop(); return EXIT_SUCCESS;}程序的执行结果如下:
0 0
- [实例]OpenGL绘制茶壶(光照、三维变换)
- Opengl光照(茶壶)
- [OpenGL] 茶壶与光照
- OpenGL绘制旋转茶壶
- 第五弹 带光照茶壶绘制
- 我的opengl编程学习(一)(简介、绘制图像、三维观察、光照)
- 三维茶壶
- 三维茶壶
- OpenGL------三维变换
- OpenGL---三维变换
- OpenGL 三维变换
- OpenGL三维变换
- OpenGL中GLSL渲染茶壶光照完整程序
- [OpenGL]OpenGL中的三维变换
- 现代OpenGL+Qt学习笔记之六:绘制可旋转、带光照效果的三维物体
- OpenGL -- 光照实例 1
- 【WebGL】茶壶和光照
- OpenGL 三维的空间变换
- class 0 短信和普通短信 随设置逻辑
- selenium之 功能键Keys
- 排序算法总结
- [poj1847] Tram
- 求二叉树的深度(中后建立)
- [实例]OpenGL绘制茶壶(光照、三维变换)
- IntelliJ IDEA 2016.1破解码一枚
- TensorLayer 如何重复使用 variable
- Eclipse 中 package,source folder,folder区别及相互转换
- Spring MVC下直接访问静态资源
- Unity3D开发学习之路--两种在Unity3D中创建倒计时器的方法
- 3703: 昊昊的壮举之造福社会
- CTS fail 问题总结
- 穷举法解决组合问题1