博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenGL路(四)自制的图形功能(立方体、汽缸、圆锥)
阅读量:7011 次
发布时间:2019-06-28

本文共 2971 字,大约阅读时间需要 9 分钟。

#include 
#include
#include
#pragma comment(lib, "opengl32.lib")#pragma comment(lib, "glut32.lib")#pragma comment(lib, "glu32.lib")#pragma comment(lib, "glut.lib")#include
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; }

效果预览

版权声明:本文博客原创文章。转载请注明出处 http://blog.csdn.net/xianyun2009

你可能感兴趣的文章
c++中的对象复制
查看>>
ubuntu下linux内核源码阅读工具和调试方法总结
查看>>
PHP生成UTF-8编码的CSV文件用Excel打开乱码的解决办法
查看>>
oracle数据库性能
查看>>
关于VS中的调试信息输出
查看>>
IOS-5个可以帮你优化App的优秀网站
查看>>
ArrayIndexOutOfBoundsException
查看>>
JAVA判断各种类型数据是否为空
查看>>
如何使用kali的Searchsploit查找软件漏洞
查看>>
Vim for Rails developers: Lazy modern configuration
查看>>
十三、Android studio环境的搭建
查看>>
ES6 系列之模板字符串
查看>>
JVM(四)垃圾回收的实现算法和执行细节
查看>>
对象解构与点操作访问究竟谁快
查看>>
Python3入门机器学习(七)- PCA
查看>>
2017阿里,百度,京东java面试+笔试大合集,这些面试题你都会吗?
查看>>
JavaScript数据结构03 - 队列
查看>>
笔记-OC运行时问题扩展
查看>>
PHPstorm 优化、设置与提速篇
查看>>
[iOS] 从 application delegate 引申三点
查看>>