我是靠谱客的博主 虚心小蚂蚁,最近开发中收集的这篇文章主要介绍计算机图形学笔记 || 真实感图形一、颜色模型二、简单光照模型三、光滑着色四、纹理映射(Texture mapping),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、颜色模型

RGB(显示器的物理模型)、CMYK(用于印刷)、HSV(色调,饱和度,明度)

二、简单光照模型

光照模型是根据光学物理有关定律,计算在特定光源照射下,物体表面上一点投向视点的光强。光线投射到物体表面时,可能被物体吸收、反射、透射(折射)。分为局部光照模型(简单光照模型):只考虑光源的直接照射;和全局光照模型:除了以上因素,还考虑环境对物体表面的影响。

简单光照模型假定:光源为点光源;物体是不透明物体;只考虑反射。分为环境光模型、漫反射光模型和镜面反射光模型。简单光照模型表示为:i=i_{e}+i_{d}+i_{s}

材质模型:物体材质指物体表面对光的吸收、反射和透射的性能,由环境色、漫反射色、镜面反射色等分量组成。

环境光模型:环境光是环境中其它物体散射到物体表面后再反射出来的光。在空间中近似均匀分布,i_{a},环境光反射率k_{a},反射光强可以表示为i_{e}=k_{a}cdot i_{a},0.0leq k_{a}leq 1.0

漫反射光模型:漫反射光是从一点照射,均匀地向各个方向散射的光,如粉笔等粗糙物体表面对光的反射。漫反射光强i_{d}表示为

i_{d}=k_{d}cdot i_{p}cdot costheta ,0.0leq theta leq frac{pi }{2},0.0leq k_{d}leq 1.0i_{p}是入射光光强,k_{d}是材质的漫反射率,theta是入射角。Lambert余弦定理:一个理想漫反射体表面上反射出的漫反射光强同入射光与物体表面法线之间夹角的余弦成正比。

镜面反射光模型:只朝一个方向反射的光,有很强的方向性,遵守反射定律。镜面反射光光强:i_{s}=k_{s}cdot i_{p}cdot cos^{n}alpha ,0.0leq k_{s}leq 1.0,0.0leq alpha leq frac{pi }{2},i_{p}为入射光光强,k_{s}为材质的镜面反射率。

三、光滑着色

直线段的光滑着色:

Gouraud明暗处理

主要思想:先计算物体表面多边形各顶点的平均法矢量,然后调用简单光照模型计算各顶点的光强,多边形内各点光强通过对多边形顶点光强的双线性插值得到。

优点:算法简单,计算量小;

缺点:马赫带效应并未完全消除;高光区域明显大于Phong明暗处理生成的高光区域。

Phong明暗处理

主要思想:先计算多边形网格的每个顶点的平均法矢量,然后使用双线性插值计算多边形内部各点的法矢量,最后才使用多边形网格上各点的法矢量调用简单光照模型计算其光强。

四、纹理映射(Texture mapping)

将纹理空间坐标(u,v)映射为物体空间坐标(x,y,z),再进一步映射为屏幕图像空间二维物体表面坐标(x,y)的过程。

颜色纹理映射的两种实现方法:(1)直接用纹理的颜色替代物体表面的颜色;(2)纹理数据参加光照计算。

颜色纹理

通过颜色变化表现出来的表面细节,一般采用物体表面的参数化方法确定纹理坐标。

函数纹理

纹理一般定义在单位正方形区域(0leq uleq 10leq v leq 1),称为纹理空间。

 

国际象棋棋盘纹理函数gleft ( u,v right )=left{begin{matrix} a ; ; left lfloor utimes 8 right rfloor+left lfloor v times 8 right rfloor\ b ; ; left lfloor utimes 8 right rfloor+left lfloor v times 8 right rfloor end{matrix}right.,上为偶数,下为奇数,0< a< b< 1left lfloor x right rfloor表示不大于x的最大整数。

 

粗布纹理函数fleft ( u,v right )=aleft ( cosleft ( pu right )+cosleft ( qu right ) right ),A为[0,1]上的随机变量,p,q为频率系数。

 

立方体表面纹理映射:变换矩阵为left ( x,y,z right )=left ( u,v,1 right )cdot begin{bmatrix} a & d & g\ b & e & h\ c & f & i end{bmatrix},计算参数,代入透视变换公式。

 

left{begin{matrix} p_{0}cdot x=c\ p_{0}cdot y=f\ p_{0}cdot z=i end{matrix}right.,left{begin{matrix} p_{1}cdot x=a+c\ p_{1}cdot y=d+f\ p_{1}cdot z=g+i end{matrix}right.,left{begin{matrix} p_{2}cdot x=a+b+c\ p_{2}cdot y=d+e+f\ p_{2}cdot z=g+h+i end{matrix}right.,p=left ( p_{1}-p_{0} right )u+left ( p_{2}-p_{1} right )v+p_{0}

 

圆柱面纹理映射left{begin{matrix} x=rcosleft ( 2pi u right )\ y=hv\ z=rsinleft ( 2pi u right ) end{matrix}right.,0leq uleq 1,0leq vleq 1

 

圆锥面纹理映射:参数方程为left{begin{matrix} x=left ( 1-frac{y}{h} right )rcostheta \ y=hvarphi \ z=left ( 1-frac{y}{h} right )rsintheta end{matrix}right.,0leq theta leq 2pi,0leq varphi leq 1left ( u,v right )=left ( theta /2pi,varphi right )

 

uv化表示为left{begin{matrix} x=left ( 1-frac{y}{h} right )rcosleft ( 2pi u right )\ y=hv\ z=left ( 1-frac{y}{h} right )rsinleft ( 2pi v right ) end{matrix}right.,0leq uleq 1,0leq vleq 1

 

球面纹理映射:参数方程为left{begin{matrix} x=rsinalpha sinbeta \ y=rcosalpha \ z=rsinalpha cosbeta end{matrix}right.,0leq alpha leq pi ,0leq beta leq 2pileft ( u,v right )=left (beta /2pi,alpha /pi right )

 

uv化表示为left{begin{matrix} x=rsinleft ( pi v right ) sinleft ( 2pi u right ) \ y=rcosleft ( pi v right )\ z=rsinleft ( pi v right ) cosleft ( 2pi u right ) end{matrix}right.,0leq u leq 1 ,0leq v leq 1

 

圆环面纹理映射:参数方程为left{begin{matrix} x=left ( r_{1}+r_{2}sinbeta right )sinalpha \ y=r_{2}cosbeta \ z=left ( r_{1}+r_{2}sinbeta right )cosalphaend{matrix}right.,0leq alpha leq 2pi ,0leq beta leq 2pileft ( u,v right )=left (beta /2pi,alpha /2pi right )

 

uv化表示为left{begin{matrix} x=left ( r_{1}+r_{2}sinleft ( 2pi u right ) right ) sinleft ( 2pi v right ) \ y=r_{2}cosleft ( 2pi u right )\ z=left ( r_{1}+r_{2}sinleft ( 2pi u right ) right )cosleft ( 2pi v right ) end{matrix}right.,0leq u leq 1 ,0leq v leq 1

 

图像纹理

图像纹理映射需要建立物体表面上每一采样点与已知图像上各点(纹素,texel)的对应关系,取图像上点的颜色值作为物体表面上采样点的颜色值,然后采用光照模型计算该点光强。

对于立方体,使用6幅图像纹理,一般采用绑定到表面的方式实现。

三维纹理

假设在三维物体空间中,物体上的每一个点pleft ( x,y,z right )均有一个纹理值tleft ( x,y,z right ),其值由纹理函数惟一确定,那么对于物体上的空间点,就可以映射到一个定义了纹理函数的三维空间上了。

1985年,Peachey用简单的规则三维纹理函数首次成功模拟了木制品的纹理效果。扰动、扭曲、倾斜。

CRGB CZBuffer::ReadWoodTexture(CP3 t)
{
double Radius,Angle;
int Tex;
Radius=sqrt(t.x*t.x+t.z*t.z);
if(0==t.z)
Angle=PI/2;
else
Angle=atan(t.x/t.z);
Radius=Radius+2*sin(20*Angle+t.y/150);
Tex=Round(Radius)%60;
if(Tex<40)
return CRGB(0.8,0.6,0.0);
else
return CRGB(0.5,0.3,0.0);
}

几何纹理

凹凸纹理(Bump map)的基本思想是用简单光照模型计算物体表面的光强时,对物体表面的法向进行微小的扰动,导致表面光强的突变,产生凹凸不平的真实感效果。

几何纹理的分类

  1. 偏移矢量凹凸纹理(Offset vector bump map)
  2. 高度场凹凸纹理(Height field bump map)

纹理反走样技术:最简单的纹理反走样技术是双线性内插法

fleft ( u,v right )= left ( 1-u right )left ( 1-v right )fleft ( i,j right )+left ( 1-u right )vfleft ( i,j+1 right )+uleft ( 1-v right )fleft ( i+1,j right )+uvfleft ( i+1,j+1 right )

最后

以上就是虚心小蚂蚁为你收集整理的计算机图形学笔记 || 真实感图形一、颜色模型二、简单光照模型三、光滑着色四、纹理映射(Texture mapping)的全部内容,希望文章能够帮你解决计算机图形学笔记 || 真实感图形一、颜色模型二、简单光照模型三、光滑着色四、纹理映射(Texture mapping)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部