zoukankan      html  css  js  c++  java
  • 龙书9 最后几章总结 :卡通效果、边缘着色、多重纹理、effect的使用

    最后几章大致看了例子,

    1.卡通着色:主要是运用 “灰度纹理”,依据light和面片normal的点积,对应灰度纹理的纹理坐标

    2.轮廓勾勒:主要运用vertex的扩充和每个vertex的normal进行vertex的延伸,记住同坐标点的vertex可能重复出现多次

                     比如现在面片三角ABC三个点,每条边扩充为四边形,则共12个点,每个点有自己的normal和两个临接面片的两个normal;

                     当时还疑惑一个vertex可能对应三个以上的临接面片吧?

                    原来是进行分别对待了,就是说vertex的position可能相同,但不属于扩充后的四边形;

                     轮廓勾勒例子过程:

                                   1、对于每个面片,得到四个normal,自己的一个,临接三个normal

                                   2. 每个面片,生成12个vertex;并绑定相应的normal和position

                                   3. 判断是否为边缘点?是的话,则依据自身的normal进行延展

                                   4.render扩充后的所有vertex

    1.首先对每条边进行扩充,比如面片abc共三个点,扩充后共12个点,即每条边构成退化四边形

    2.对步骤1的每个定点设置vertexStruct,每个vertex绑定自己的normal和扩充前邻接三角形的normal(这个邻接三角形是由vertex的边确定的)

    getFaceNormals(mesh, adjBuffer, &currentFaceNormal, adjFaceNormals, i); 

    A0.position = v0.position;
    A0.normal = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
    A0.faceNormal1 = currentFaceNormal;
    A0.faceNormal2 = adjFaceNormals[0];

    3.记住脚本里vector对于position等w默认为1;对于lightDirection、normal等向量要赋值w=0;

    4.使用预处理方式设置vertex的FVF格式

    5.blend是已经在后buffer的像素和正在光栅化的像素进行融合;

       多重纹理同时启用若干层纹理

       对于静态物体,预先进行光照计算,使用多重纹理达到高效

    6.最后是effect框架;

                for(int j = 0; j < 4; j++)
                {    
                    ToonEffect->BeginPass(0);//写在循环外面会出错,如下图
                    WorldView     = WorldMatrices[j] * view;
                    WorldViewProj = WorldMatrices[j] * view * ProjMatrix;
                    ToonEffect->SetMatrix(WorldViewHandle, &WorldView);
                    ToonEffect->SetMatrix(WorldViewProjHandle, &WorldViewProj);
                    ToonEffect->SetVector(ColorHandle, &MeshColors[j]);
                    Meshes[j]->DrawSubset(0);
                    ToonEffect->EndPass();            
                }

    对于每个mesh,由于不同的constant和Matrix,需要renderPass相应的次数,否则会出现以最后一次的pass为准的情况;

      

  • 相关阅读:
    Java多线程(二)关于多线程的CPU密集型和IO密集型这件事
    Java 过一下基础
    日历打印用java实现
    DAY8-打卡第八天-2018-1-18
    web-day1-初识标识符
    DAY7-图形界面第一弹-2018-1-17
    四种排序方法用java实现
    DAY6-小变化(java提示框)-2018-1-16
    DAY5-小别-2018-1-15
    DAY4-打卡第四天-2018-1-12
  • 原文地址:https://www.cnblogs.com/dust-fly/p/4216864.html
Copyright © 2011-2022 走看看