OpenGL之路(四)自制图形函数(正方体、圆柱、圆锥)
来源:互联网 发布:技术美工 编辑:程序博客网 时间:2024/04/29 16:11
#include <gl/glut.h>#include <gl/GLU.h>#include <gl/GL.h>#pragma comment(lib, "opengl32.lib")#pragma comment(lib, "glut32.lib")#pragma comment(lib, "glu32.lib")#pragma comment(lib, "glut.lib")#include <math.h>void Cube(){glBegin(GL_QUAD_STRIP);//填充凸多边形glVertex3f(0.0f, 0.0f, 0.0f);glVertex3f(0.0f, 1.0f, 0.0f);glVertex3f(1.0f, 0.0f, 0.0f);glVertex3f(1.0f, 1.0f, 0.0f);glVertex3f(1.0f, 0.0f, -1.0f);glVertex3f(1.0f, 1.0f, -1.0f);glVertex3f(0.0f, 0.0f, -1.0f);glVertex3f(0.0f, 1.0f, -1.0f);glVertex3f(0.0f, 0.0f, 0.0f);glVertex3f(0.0f, 1.0f, 0.0f);glEnd();glBegin(GL_QUAD_STRIP);glVertex3f(0.0f, 0.0f, 0.0f);glVertex3f(1.0f, 0.0f, 0.0f);glVertex3f(0.0f, 0.0f, -1.0f);glVertex3f(1.0f, 0.0f, -1.0f);glVertex3f(0.0f, 1.0f, 0.0f);glVertex3f(1.0f, 1.0f, 0.0f);glVertex3f(0.0f, 1.0f, -1.0f);glVertex3f(1.0f, 1.0f, -1.0f);glEnd();}void Circle(){glBegin(GL_TRIANGLE_FAN);//扇形连续填充三角形串glVertex3f(0.0f, 0.0f, 0.0f);int i = 0;for (i = 0; i <= 390; i += 15){float p = i * 3.14 / 180;glVertex3f(sin(p), cos(p), 0.0f);}glEnd();}void Cylinder(){glBegin(GL_QUAD_STRIP);//连续填充四边形串int i = 0;for (i = 0; i <= 390; i += 15){float p = i * 3.14 / 180;glVertex3f(sin(p), cos(p), 1.0f);glVertex3f(sin(p), cos(p), 0.0f);}glEnd();Circle();glTranslatef(0, 0, 1);Circle();}void Cone(){glBegin(GL_QUAD_STRIP);//连续填充四边形串int i = 0;for (i = 0; i <= 390; i += 15){float p = i * 3.14 / 180;glVertex3f(0, 0, 1.0f);glVertex3f(sin(p), cos(p), 0.0f);}glEnd();Circle();}void renderScene(void){static float i = 0;i += 0.1;if (i > 360)i = 0;glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glPushMatrix();glColor3f(0, 1, 0);glTranslatef(-2, 2.0, -12);glRotatef(i, 1, 1 ,1);Cylinder();glPopMatrix();glPushMatrix();glColor3f(1, 0, 0);glTranslatef(2, 2, -12);glRotatef(i, 1, 1, 1);Circle();glPopMatrix();glPushMatrix();glColor3f(0, 1, 1);glTranslatef(-2, -2, -12);glRotatef(i, 1, 1, 1);Cube();glPopMatrix();glPushMatrix();glColor3f(1, 1, 0);glTranslatef(2, -2, -12);glRotatef(i, 1, 1, 1);Cone();glPopMatrix();glutSwapBuffers();}void changeSize(int w, int h) {// 防止除数即高度为0// (你可以设置窗口宽度为0).if (h == 0)h = 1;float ratio = 1.0* w / h;// 单位化投影矩阵。glMatrixMode(GL_PROJECTION);glLoadIdentity();// 设置视口大小为整个窗口大小glViewport(0, 0, w, h);// 设置正确的投影矩阵gluPerspective(45, ratio, 1, 1000);//下面是设置模型视图矩阵glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, -1.0, 0.0f, 1.0f, 0.0f);//设置观测点}int main(int argc, char * argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);glutInitWindowPosition(100, 100);glutInitWindowSize(320, 320);glutCreateWindow("Hello OpenGL");glutDisplayFunc(renderScene);glutIdleFunc(renderScene); //指定程序空闲时调用函数glutReshapeFunc(changeSize); //指定窗口形状变化时的回调函数glEnable(GL_DEPTH_TEST);glutMainLoop();return 0;}
效果预览
0 0
- OpenGL之路(四)自制图形函数(正方体、圆柱、圆锥)
- OpenGL图形函数(正方体、圆柱、圆锥)
- 用OpenGL快速给图形添加纹理含圆柱圆锥
- Android图形---OpenGL(四)
- Android OpenGLES2.0(六)——构建圆锥、圆柱和球体
- 圆锥与圆柱
- 学习OpenGL(四)绘制直线图形
- 有关球 圆柱 圆锥 的计算
- 关于圆、圆柱、圆锥的计算
- 君的圆锥(水)
- 钟摆(圆锥摆)效果
- html5<canvas模拟三维图形>(旋转的正方体)
- Android3D绘图之OpenGL ES(四)
- JAVA的OPENGL,JOGL入门实例----碰撞移动的正方体 (配置+源代码)
- opengl es2.0 入门教程推荐(正方体,案例解说,Shader介绍,纹理贴图)
- Android中使用opengl es2.0基础(3)-正方体绘制
- OpenGL 旋转的正方体
- OpenGL(二)图形绘制之点线绘制
- linux命令笔记
- Android APK反编译详解(附图)
- Linux下Redis的安装
- Android4.2.2NDK和源码开发jni的异同
- 皕杰报表开发(自由式报表)
- OpenGL之路(四)自制图形函数(正方体、圆柱、圆锥)
- 利用 Application_Error 捕获所有异常
- 彩票排三:从0~9随机抽取3个数,组成一组数。
- UVAL 6142 Probability Through Experiments 二分搜索 组合数
- UIImage缩放,解决模糊失真问题
- MySQL基础-数据库基本操作
- ios layoutSubviews 及 layout机制相关方法
- 简明 状态模式(5.8)
- UVAL 6144 Radiation 二分搜索