zoukankan      html  css  js  c++  java
  • Tessellation

    // 设置体元语义,渲染三角形列表. 
    deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST); 
          以前我们选择的体元语义都是triangle list,在tessellation程序中,不一样了,现在我们的输入虽然还是一个三角形,但它当作patch处理,三个顶点即为patch的三个控制点。

    其它的shader文件中,我们都要加上下面的代码,否则的话,其它物体的渲染可能会出错:

    deviceContext->HSSetShader(NULL, NULL, 0); 
    deviceContext->DSSetShader(NULL, NULL, 0);

    Hull shader中,我们会定义一个常量函数,这个函数是per patch的,对三角形而言,可以在其中分别定义3条边的tess factor,以及内部tess factor,这些值不同,细分的效果也不一样。在本程序中,我们设置四个tess factor都是一样的值,这个值由const buffer传入。

    // Patch 常量函数,决定tessellation因子,每个patch执行一次,所以是per patch的,不是per 控制点的 
    ConstantOutputType ColorPatchConstantFunction(InputPatch<HullInputType, 3> inputPatch, uint patchId : SV_PrimitiveID) 
    {    
        ConstantOutputType output;


        //设置三条边的细分因子 
        output.edges[0] = tessellationAmount; 
        output.edges[1] = tessellationAmount; 
        output.edges[2] = tessellationAmount;

       //设置三角形内的细分因子 
        output.inside = tessellationAmount;

        return output; 
    }

    //注意输入控制点数量要和 IASetPrimitiveTopology()函数中一致 

    domain,说的是我们现在细分是啥玩意?三角形,四边形或者线。partitioning决定TS阶段细分算法的选择,

    outputtopology表示细分后的输出语义是逆时针方向三角形,这些拓扑信息会被传输到PA block中去outputcontrolpoints表示输出控制点的数目,也是hull shader被调用的次数。patchconstantfunc指定当前HS中使用的常量函数。

    对三角形u, v, w表示细分点相对于三个控制点的u,v, w坐标,或者说是重心坐标,我们可以根据这三个值计算出细分点的位置,然后转化为世界坐标系中点,输出颜色也是用三个控制点的颜色根据u, v, w差值得到。 

     可以看出在奇数的情况下,1, 3, 5, 7,…, 三角形包括(N+1)/2个环形的的三角形,而中心是一个三角形。在偶数的情况下,三角形内部包括N/2个环形的三角形,但中心是一个点,而不是一个三角形。三角形的边在tess factor 1-8的情况,分别被分为1-8段,对于内部的环形三角形,从外到内,每进一个层次,边分段数是是上一个边分段数减2,比如tess factor = 5,有三个环形三角形,最外边的边分段是5,中间的一个是3,最里面的是1。

      fractional_odd表示tess factor是奇数,范围1..63, 此时细分效果和Integer是一样的,如果此时tess factor为偶数,则细分的效果很古怪。下面的就是fractional_odd的情况下,tess factor 1-8的戏份效果,偶数的细分并不均匀。

    fractional_even表示tess factor是偶数,范围是2-64,如果此时tess factor为1,则和2的结果是一样的,如果此时tess factor为奇数,则细分效果不均匀

     

  • 相关阅读:
    常用基础OC 集合
    字典的常用基本用法
    常用基础字符串常用基础实例
    软件测试:测试工程师的素质!
    软件测试:心得简介!
    java 汽车销售收入系统
    收银系统
    流程控制、循环结构
    java 聊天猜拳机器人
    设计模式(六)---建造模式
  • 原文地址:https://www.cnblogs.com/RenderLife/p/2748165.html
Copyright © 2011-2022 走看看