# RealizeOpenGL **Repository Path**: GaoZiping/realize-open-gl ## Basic Information - **Project Name**: RealizeOpenGL - **Description**: 带图像窗口的光栅化软渲染器,主要是手动实现OpenGL的一些基础功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-09-13 - **Last Updated**: 2023-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RealizeOpenGL #### 介绍 带图像窗口的光栅化软渲染器,主要是手动实现OpenGL的一些基础功能。通过一个画点的功能,构建一个虚拟的GPU, 实现一套虚拟的软光栅,其主要是参考OpenGL框架模式,实现OpenGL的光栅化流程,也加强后期对顶点着色器和片源着色器具体作用的了解。 #### 软件架构 01_Windows * 1 主循环流程在winMain函数中 * 2 窗体构建,消息处理,其他方面的细节都封装在application类里面 02_drawPoint * 1 GDI 绘制环境搭建 * 2 搭建模拟GPU的代码架构 * 3 点的绘制实践 03_drawLine * 1 光栅化Raster类设计 * 2 Brensenham算法实现 * 3 直线算法测试 04_mathVector * 1.各类向量(Vector)的实现 05_drawTriangle * 1.三角形扫描线绘制算法的实现 * 2. 三角形重心插值彩色绘制 06_drawImage * 1 图片读取代码 * 2 图片显示代码 * 3 图片透明方案 07_UVTexture * 1.uv系统实现 * 2.uvTexture显示 08_UVBiLinear * 1.uv双线性插值 09_UVWrap * 1.纹理wrap实现 * 2. 实现Repeat、Mirror的Wrap方式 10_Matrix * 1. Matrix类的实现 * 2. Matrix相关算法实现 11_MVP * 1.三维变换的实现(缩放/平移/旋转) * 2.模型变换、视图变换、正交投影变换、透视投影变换、屏幕坐标变换 * 3.实现一个三维旋转的三角形 在11_MVP之前都是给定顶点按流程逐步绘制,没有引入类似OpenGL状态机的渲染流程机制,在11之后工程重构, 采用OpenGL状态机机制。 12_VAO_VBO * 1.dataStructure重构 * 2.math lerp函数系统化 * 3.VBO * 4.VAO * 5.GPU重构 13_StateMachine * 1.通过状态机模式,实现VBO/VAO/EBO的绑定/解绑/数据更新 14_Shader_Draw * 1.Shader类与DefaultShader类 * 2.GPU改造:drawElement/vertexShaderStage/screenMapping/perspectiveDivision * 3.Raster改造:统一绘制接口 * 4.三角形绘制 15_Clip * 1.Clipper类以及sutherlandHodgman算法 * 2.GPU绘制流程加入剪裁 16_PerspectiveCorrection * 1 修改了GPU当中的透视除法函数 * 2 加入透视恢复函数 * 3 加入了修剪函数trim * 4 Raster插值,加入1/w以及depth * 5 主流程更改 17_CullFace * 1 GPU中增加cull相关状态,增加状态修改接口 * 2 Clipper中增加Cull功能 * 3 Draw流程中,加入cull流程 18_depthTest * 1 FrameBuffer加入深度缓存 * 2 GPU加入深度测试状态,clear中清除深度缓存 * 3 绘制流程加入深度测试 19_blending * 1 颜色混合状态 * 2 颜色混合加入绘制流程 20_texture * 1 texture类编写,textureShader类编写 * 2 GPU中的Texture相关状态(生成/删除/绑定/数据) * 3 FragmentShader加入纹理列表参数 * 4 实例 21_camera * 1 LookAt数学函数 * 2 Camera类编写 * 3 Application中事件函数 #### 工程环境 1. vs2019 2. C++ 17 3. cmake > 3.12