asp购物网站源码,wordpress加水印,宿迁手机网站建设公司,机械生产erp软件前言 说起图形学#xff0c;很多人就会提到OpenGL#xff0c;但其实两者并不是同一个东西。引入了OpenGL加重了学习的难度和成本#xff0c;使得一些原理并不直观。可能你知道向量#xff0c;矩阵#xff0c;纹理#xff0c;重心坐标等概念#xff0c;但就是不知道这些概…前言 说起图形学很多人就会提到OpenGL但其实两者并不是同一个东西。引入了OpenGL加重了学习的难度和成本使得一些原理并不直观。可能你知道向量矩阵纹理重心坐标等概念但就是不知道这些概念在图形学中具体是怎么使用的。 本文不使用OpenGL只用C代码实现光栅化过程并配合OpenCV来显示渲染结果。让图形学的相关过程和原理变的直观和纯粹本文结束后我们将能够把一个3D模型文件只通过C语言渲染出来如下结果。 环境准备 工欲善其事必先利其器。学习之前首先需要安装开发环境以Windows为例Mac使用XCode配置方法可以网上搜索,开发工具首选Visual Studio。然后需要安装OpenCV环境OpenCV在此只用来显示渲染结果同时用到诸如画线和画点的简单功能它不是必要的。参照Windows中安装OpenCV开发环境-CSDN博客 完成开发环境搭建后创建一个控制台项目打开main函数所在的cpp文件输入以下代码
// CGFromZero.cpp : 此文件包含 main 函数。程序执行将在此处开始并结束。
//#include iostream
#include opencv2/core/core.hpp
#include opencv2/highgui/highgui.hppconst int gRstImgWid 1000, gRstImgHei 600; // 结果图的长宽大小
unsigned char _rstImage[gRstImgHei][gRstImgWid][3]; // 结果图
const char _backColor[3] {50, 100, 150}; // 结果图的背景颜色void ShowCGRst()
{cv::Mat cvRst cv::Mat(gRstImgHei, gRstImgWid, CV_8UC3);for (size_t y 0; y gRstImgHei; y){for (size_t x 0; x gRstImgWid; x){cvRst.data[y * cvRst.step x * cvRst.channels() 0] _rstImage[y][x][2]; // 这里没有错OpenCV中的数据存储顺序是BGR而我们的数据顺序是RGBcvRst.data[y * cvRst.step x * cvRst.channels() 1] _rstImage[y][x][1];cvRst.data[y * cvRst.step x * cvRst.channels() 2] _rstImage[y][x][0];}}cv::imshow(愚 匠, cvRst);cv::imwrite(./Chapter0.png, cvRst);cv::waitKey(-1);
}void CGRender()
{
}int main()
{// 先将结果图画上背景色for (size_t y 0; y gRstImgHei; y){for (size_t x 0; x gRstImgWid; x){_rstImage[y][x][0] _backColor[0];_rstImage[y][x][1] _backColor[1];_rstImage[y][x][2] _backColor[2];}}// 渲染CGRender();//// 显示渲染结果ShowCGRst();
}编译运行如果出现以下的图像就说明环境准备就绪我们后续的学习将 上述代码的基础上实现 内容构成 该笔记分成下列几个章节进行阐述由浅入深的介绍渲染的过程并在其中穿插相关的知识点该笔记侧重于实战对于基础原理强调其具体的使用方式尤其是数学知识不涉及相关的基础推导。 第一章从3D到2Dhttps://blog.csdn.net/A112459/article/details/136085121?spm1001.2014.3001.5501 第二章三角面片及其填充https://blog.csdn.net/A112459/article/details/136085127?spm1001.2014.3001.5501 第三章光效果产生立体感https://blog.csdn.net/A112459/article/details/136085136?spm1001.2014.3001.5501 第四章ZBufferhttps://blog.csdn.net/A112459/article/details/136085149?spm1001.2014.3001.5501 第五章旋转矩阵https://blog.csdn.net/A112459/article/details/136085162?spm1001.2014.3001.5501 第六章纹理贴图https://blog.csdn.net/A112459/article/details/136085174?spm1001.2014.3001.5501 第七章透视变换实现“近大远小”https://blog.csdn.net/A112459/article/details/136085189?spm1001.2014.3001.5501 第八章阴影待写…… 第九章鼠标键盘交互待写……