OpenGL基础代码总结
OpenGL基础代码归纳总结
工具类头文件
文章图片
- 着色器管理类
#include "GLShaderManager"
- GLTools函数
#include "GLTools.h"
- freeglut静态库
在Mac 系统下,#include
在Windows 和 Linux上,我们使?用freeglut的静
态库版本并且需要添加?一个宏
#include
#ifdef __APPLE__
#include
#else
#define FREEGLUT_STATIC
#include
#endif
- 矩阵工具类
==>GLMatrixStack.h
:利用GLMatrixStack
加载的单元矩阵/矩阵/矩阵相乘/压栈/出栈/缩放/平移/旋转
==>GLFrame.h
:表示位置,通过vOrigin, vForward ,vUp
==>GLFrustum.h
:用来快速设置正/透视投影矩阵,完成坐标动3D到2D的映射过程
#include "GLMatrixStack.h"
#include "GLFrame.h"
#include "GLFrustum.h"
- 三角形批次类,帮助类
用于传输顶点/光照/纹理/颜色数据到存储着色器中
#include
- 变换管道类
用来快速在代码中传输视图矩阵/投影矩阵/视图投影变换矩阵等
#include "GLGeometryTransform.h"
常用全局变量
文章图片
- 存储着色器/固定管线管理器:
GLShaderManager shaderManager;
, - 模型视图矩阵堆栈:
GLMatrixStack modelViewMatrix;
- 投影视图矩阵堆栈:
GLMatrixStack projectionMatrix;
- 观察者位置:
GLFrame cameraFrame;
设置观察者视图坐标 - 物体位置,即世界坐标位置:
GLFrame objectFrame;
, - 投影方式,用来构建投影矩阵,学名:视景体:
GLFrustum viewFrustum;
,用来设置图元绘制时的投影方式 - 批次容器类:
GLTriangleBatch CC_Triangle;
- 变换管道:
GLGeometryTransform transformPipeline;
,存储模型视图/投影/模型视图投影矩阵
文章图片
main
函数:程序入口ChangeSize
函数:通过glutReshapeFunc(函数名)
注册,用于创建视口和视口尺寸调整、设置投影方式SetupRC
函数:初始化数据RenderScene
函数:通过glutDisplayFunc(函数名)
注册,用于绘制图形SpecialKeys
函数:通过glutSpecialFunc(函数名)
注册,用于特殊键位处理,例如上下左右、F1等ProcessMenu
函数:通过glutCreateMenu(函数名)
添加右击菜单,用于处理有点菜单栏的处理KeyPressFunc
函数:通过glutKeyboardFunc(函数名)
注册,用于处理键盘键位的操作,一般传入的key是ASCII码,空格是32
文章图片
- 球
gltMakeSphere(GLTriangleBatch& sphereBatch, GLfloat fRadius, GLint iSlices, GLint iStacks);
参数1:sphereBatch,三角形批次类对象
参数2:fRadius,球体半径
参数3:iSlices,从球体底部堆叠到顶部的三角形带的数量;其实球体是一圈一圈三角形带组成
参数4:iStacks,围绕球体一圈排列的三角形对数建议:一个对称性较好的球体的片段数量是堆叠数量的2倍,就是iStacks = 2 * iSlices;
绘制球体都是围绕Z轴,这样+z就是球体的顶点,-z就是球体的底部。
文章图片
- 环
gltMakeTorus(GLTriangleBatch& torusBatch, GLfloat majorRadius, GLfloat minorRadius, GLint numMajor, GLint numMinor);
参数1:torusBatch,三角形批次类对象
参数2:majorRadius,甜甜圈中心到外边缘的半径
参数3:minorRadius,甜甜圈中心到内边缘的半径
参数4:numMajor,沿着主半径的三角形数量
参数5:numMinor,沿着内部较小半径的三角形数量
文章图片
- 圆柱
void gltMakeCylinder(GLTriangleBatch& cylinderBatch, GLfloat baseRadius, GLfloat topRadius, GLfloat fLength, GLint numSlices, GLint numStacks);
参数1:cylinderBatch,三角形批次类对象
参数2:baseRadius,底部半径
参数3:topRadius,头部半径
参数4:fLength,圆形长度
参数5:numSlices,围绕Z轴的三角形对的数量
参数6:numStacks,圆柱底部堆叠到顶部圆环的三角形数量
文章图片
- 锥
//圆柱体,从0开始向Z轴正方向延伸。
//圆锥体,是一端的半径为0,另一端半径可指定。
void gltMakeCylinder(GLTriangleBatch& cylinderBatch, GLfloat baseRadius, GLfloat topRadius, GLfloat fLength, GLint numSlices, GLint numStacks);
参数1:cylinderBatch,三角形批次类对象
参数2:baseRadius,底部半径
参数3:topRadius,头部半径
参数4:fLength,圆形长度
参数5:numSlices,围绕Z轴的三角形对的数量
参数6:numStacks,圆柱底部堆叠到顶部圆环的三角形数量
文章图片
- 磁盘
void gltMakeDisk(GLTriangleBatch& diskBatch, GLfloat innerRadius, GLfloat outerRadius, GLint nSlices, GLint nStacks);
参数1:diskBatch,三角形批次类对象
参数2:innerRadius,内圆半径
参数3:outerRadius,外圆半径
参数4:nSlices,圆盘围绕Z轴的三角形对的数量
参数5:nStacks,圆盘外网到内围的三角形数量
【OpenGL基础代码总结】
文章图片
推荐阅读
- CVE-2020-16898|CVE-2020-16898 TCP/IP远程代码执行漏洞
- Python基础|Python基础 - 练习1
- 不废话,代码实践带你掌握|不废话,代码实践带你掌握 强缓存、协商缓存!
- 工具|后天就是七夕节,你准备好了吗(送上几个七夕代码,展示你技能的时候到了!)
- Java|Java基础——数组
- 《机器学习实战》高清中文版PDF英文版PDF+源代码下载
- Java基础-高级特性-枚举实现状态机
- 营养基础学20180331(课间随笔)??
- 霍兰德职业代码对照表
- iOS面试题--基础