OpenGL基础代码总结

简介: OpenGL基础代码总结

OpenGL基础代码归纳总结


工具类头文件


微信图片_20220513162204.png

  • 着色器管理类
#include "GLShaderManager"
  • GLTools函数
#include "GLTools.h"
  • freeglut静态库
    在Mac 系统下,#include<glut/glut.h>
    在Windows 和 Linux上,我们使⽤用freeglut的静
    态库版本并且需要添加⼀一个宏
#include <math.h>
#ifdef __APPLE__
#include <glut/glut.h>
#else
#define FREEGLUT_STATIC
#include <GL/glut.h>
#endif


矩阵工具类

==> GLMatrixStack.h:利用GLMatrixStack加载的单元矩阵/矩阵/矩阵相乘/压栈/出栈/缩放/平移/旋转

==> GLFrame.h:表示位置,通过vOrigin, vForward ,vUp

==> GLFrustum.h:用来快速设置正/透视投影矩阵,完成坐标动3D到2D的映射过程

#include "GLMatrixStack.h"
#include "GLFrame.h"
#include "GLFrustum.h"
  • 三角形批次类,帮助类
    用于传输顶点/光照/纹理/颜色数据到存储着色器中
#include<GLBatch.h>
  • 变换管道类
    用来快速在代码中传输视图矩阵/投影矩阵/视图投影变换矩阵等
#include "GLGeometryTransform.h"


常用全局变量


微信图片_20220513162918.png

  • 存储着色器/固定管线管理器:GLShaderManager shaderManager;
  • 模型视图矩阵堆栈:GLMatrixStack modelViewMatrix;
  • 投影视图矩阵堆栈:GLMatrixStack projectionMatrix;
  • 观察者位置:GLFrame cameraFrame;设置观察者视图坐标
  • 物体位置,即世界坐标位置:GLFrame objectFrame;
  • 投影方式,用来构建投影矩阵,学名:视景体:GLFrustum viewFrustum;,用来设置图元绘制时的投影方式
  • 批次容器类: GLTriangleBatch CC_Triangle;
  • 变换管道:GLGeometryTransform transformPipeline;,存储模型视图/投影/模型视图投影矩阵


函数


微信图片_20220513163105.png

  • main函数:程序入口
  • ChangeSize函数:通过glutReshapeFunc(函数名)注册,用于创建视口和视口尺寸调整、设置投影方式
  • SetupRC函数:初始化数据
  • RenderScene函数:通过glutDisplayFunc(函数名)注册,用于绘制图形
  • SpecialKeys函数:通过glutSpecialFunc(函数名)注册,用于特殊键位处理,例如上下左右、F1等
  • ProcessMenu函数:通过glutCreateMenu(函数名)添加右击菜单,用于处理有点菜单栏的处理
  • KeyPressFunc函数:通过glutKeyboardFunc(函数名)注册,用于处理键盘键位的操作,一般传入的key是ASCII码,空格是32


OpenGL 系统模型


微信图片_20220513163322.png


gltMakeSphere(GLTriangleBatch& sphereBatch, GLfloat fRadius, GLint iSlices, GLint iStacks);
     参数1:sphereBatch,三角形批次类对象
     参数2:fRadius,球体半径
     参数3:iSlices,从球体底部堆叠到顶部的三角形带的数量;其实球体是一圈一圈三角形带组成
     参数4:iStacks,围绕球体一圈排列的三角形对数
     建议:一个对称性较好的球体的片段数量是堆叠数量的2倍,就是iStacks = 2 * iSlices;
     绘制球体都是围绕Z轴,这样+z就是球体的顶点,-z就是球体的底部。

微信图片_20220513163441.png


gltMakeTorus(GLTriangleBatch& torusBatch, GLfloat majorRadius, GLfloat minorRadius, GLint numMajor, GLint numMinor);
     参数1:torusBatch,三角形批次类对象
     参数2:majorRadius,甜甜圈中心到外边缘的半径
     参数3:minorRadius,甜甜圈中心到内边缘的半径
     参数4:numMajor,沿着主半径的三角形数量
     参数5:numMinor,沿着内部较小半径的三角形数量

微信图片_20220513163617.png


  • 圆柱
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,圆柱底部堆叠到顶部圆环的三角形数量

微信图片_20220513163808.png



  • //圆柱体,从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,圆柱底部堆叠到顶部圆环的三角形数量

微信图片_20220513163922.png


  • 磁盘
void gltMakeDisk(GLTriangleBatch& diskBatch, GLfloat innerRadius, GLfloat outerRadius, GLint nSlices, GLint nStacks);
     参数1:diskBatch,三角形批次类对象
     参数2:innerRadius,内圆半径
     参数3:outerRadius,外圆半径
     参数4:nSlices,圆盘围绕Z轴的三角形对的数量
     参数5:nStacks,圆盘外网到内围的三角形数量

微信图片_20220513164037.png


相关文章
|
算法 Ubuntu Linux
适用于OpenGL离屏渲染上下文的初始化代码
说明 最近做图像算法,需要用到shader对图像进行处理,用glut会有窗口,不适合写成UT测试用例,需要创建一个无窗口的OpenGL上下文。 代码 这部分代码其实是参考 Android的Skia 模块相关代码写的,适用于 Mac、EGL(Android)、X11(Ubuntu等Linux系统)平台。 h文件 class GLContext { publ
5361 0
|
存储 Java Android开发
Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵
Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵
161 0
Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵
|
Linux
LINUX OpenGL简单测试代码
LINUX OpenGL简单测试代码
68 0
|
机器学习/深度学习 存储 Windows
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(二)
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(二)
132 0
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(二)
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)
135 0
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)
|
存储
【OpenGL】六、Visual Studio 2019 配置 GitHub ( 提取和拉取简介 | 拉取远程代码 )
【OpenGL】六、Visual Studio 2019 配置 GitHub ( 提取和拉取简介 | 拉取远程代码 )
280 0
【OpenGL】六、Visual Studio 2019 配置 GitHub ( 提取和拉取简介 | 拉取远程代码 )
【OpenGL】五、Visual Studio 2019 配置 GitHub ( 提交代码 )(二)
【OpenGL】五、Visual Studio 2019 配置 GitHub ( 提交代码 )(二)
118 0
【OpenGL】五、Visual Studio 2019 配置 GitHub ( 提交代码 )(二)
【OpenGL】五、Visual Studio 2019 配置 GitHub ( 提交代码 )(一)
【OpenGL】五、Visual Studio 2019 配置 GitHub ( 提交代码 )(一)
113 0
【OpenGL】五、Visual Studio 2019 配置 GitHub ( 提交代码 )(一)
|
编译器
OpenGL ES着色器代码语法
因为着色器里面没有编译器提示, 所以熟悉着色器代码语法是非常有必要的
193 0
调用opengl程序代码
// Test_of_callexe.cpp : Defines the entry point for the console application. // #include #include #include #include int main(int arg...
665 0