zoukankan      html  css  js  c++  java
  • [图形图像]C++实现的软件光栅器

    目前渲染部分基本告一段落,实现了双线性、三线性、mipmap纹理采样、重复/镜像uv寻址模式、镜面光和纹理的叠加、gouraud着色、phong着色、z缓存、1/z缓存、透视纹理/光照修正、平面裁剪(含三角形分割)、正交投影摄像机。
     
    以后如果再增加功能,大概就是顶点动画之类,重心应该在引擎层了,渲染层基本完毕。
     
    上图。

     

    第1张:

    从坐到右,从上到下。无纹理、无镜面光、无深度缓冲,依次是:

    1. 线框。

    2. 纯色。 即每个三角形一个颜色。

    3. flat着色(相比上次,修正后的效果好多了)。也是每个三角形一个颜色,但是这个颜色是参照了光照情况的。

    4. gouraud着色。根据光照计算每个三角形的顶点颜色,三角形内部根据顶点颜色进行线性插值。

    5. phong着色(这里分辨率太低,看不出和gouraud的区别)。每个像素分别计算光照。

    第2张:

     分别是flat、gouraud、phong着色,相比第1张,加入了镜面光(注意茶壶的不少地方出现了白色的光斑)。

     

    第3张:

     在上一张的基础上引入了纹理。注意壶嘴上的光斑,一个比一个细腻。这一组图仍然没打开深度缓冲,因此显示不太正确。 

     

    第4张:

     高分辨率的茶壶。软件渲染瓶颈首先是像素处理,因此这么大的茶壶,帧率特别低。

    两张分别对应低、高两套设置。

    第一个,gouraud着色 + 最近点采样 + 三角形排序(油画家算法)+ 镜面光。帧率123。

    第二个,phong着色 + 三线性采样 + 1/z缓冲 + 镜面光。帧率30。

     

     第5张:

     平面裁剪。第一个是一个竖着的平面,第一个是一竖一横两个平面。注意裁剪边缘三角形密度较大,因为进行了三角形分割。

     

    第5-2张:

    正交投影和平面裁剪。

    正交投影,相比普通的透视投影,失去了近大远小的效果。

    第二个茶壶,从侧面来观察裁剪平面,证实了这确实是三维空间的裁剪,而非屏幕上的像素裁剪。

     

    第6张:

     高分辨率来了!

    在屏幕上绘制两个大三角形,展示纹理过滤效果。

    从上到下分别是:线框、最近点采样、双线性过滤、三线性过滤、透视纹理修正。

    三线性过滤:这里很难看出和双线性的区别,但是在程序中切换状态时是能察觉到变化的。

    透视纹理修正:操,屎都给我吓出来了!跟它一比,难怪之前总觉得前面两张怪怪的。这证明了,大纹理三角形不能乱用啊...

     

     

    第7张:

    演示纹理地址寻址方式。

    整张图纹理坐标是-2~+2,从上到下,寻址方式依次为箝位、重复、镜像。 

     

    第8张:

    演示mipmap。

     红色是第0层,绿色是第1层,蓝色是第2层,淡蓝色是第三层,等等。

     

      

    再贴一个骷髅头吧,6万个面,还能有30帧,很好。毕竟我在顶点处理环节非常谨慎的。

     gouraud + 镜面光 + 三角形排序(油画家算法,代替z缓冲)。

     

     看了一下水银上的记录,这个项目大概开始10来天了,成品是9000行C++代码,目前效果还是满意的。能够享受成品从视觉上带来的成就感,这是图形相比其他技术的优点。

     

    代码6、7月份分享,执行文件在下面:

     

     http://115.com/file/anwxb9xp#Scan软件光栅.rar

     

    记得看里面的readme.txt。

    注意,如果你运行后显示不自然(遮挡关系错误,尤其是骷髅头),尝试按几下4开启深度缓冲,或者按几下5开启油画家算法

  • 相关阅读:
    转【程序员七问】
    【转】又一次线上 OOM 排查经过
    【转】java:多网卡环境下获取MAC地址
    eclipse 国际化 $NON-NLS-1$ 含义
    eclipse 重构代码自动抽取函数
    转:GEF 英文全称Graphical Editor Framework
    转:Eclipse使用Git图解教程
    转:Java通过百度地图API获取地址经纬度
    转:Lucene学习——IKAnalyzer中文分词(一)
    转:Maven项目中获取classpath和资源文件的路径
  • 原文地址:https://www.cnblogs.com/cbscan/p/2476450.html
Copyright © 2011-2022 走看看