• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            4D星宇

            c++

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              57 隨筆 :: 0 文章 :: 39 評(píng)論 :: 0 Trackbacks

                                                         DX10之GS生成篇
            1.由三角形生成金字塔:
            簡(jiǎn)析:triangle GSPS_INPUT input[3]代表輸入的三角形
             inout TriangleStream<GSPS_INPUT> TriStream 代表輸出的三角形流-即金字塔共12個(gè)頂點(diǎn)
            第一個(gè)循環(huán)計(jì)算三個(gè)標(biāo)出法向量的三角形,如圖所示。
            第二個(gè)循環(huán)計(jì)算出三角形與輸入的三角形一樣,但平面的法向量剛好相反。

            //--------------------------------------------------------------------------------
            // Geometry Shader
            //--------------------------------------------------------------------------------
            [maxvertexcount(12)]
            void GS( triangle GSPS_INPUT input[3], inout TriangleStream<GSPS_INPUT> TriStream )
            {
                GSPS_INPUT output;
               
                //
                // Calculate the face normal
                //
                float3 faceEdgeA = input[1].Pos - input[0].Pos;
                float3 faceEdgeB = input[2].Pos - input[0].Pos;
                float3 faceNormal = normalize( cross(faceEdgeA, faceEdgeB) );
                float3 ExplodeAmt = faceNormal*Explode;
               
                //
                // Calculate the face center
                //
                float3 centerPos = (input[0].Pos.xyz + input[1].Pos.xyz + input[2].Pos.xyz)/3.0;
                float2 centerTex = (input[0].Tex + input[1].Tex + input[2].Tex)/3.0;
                centerPos += faceNormal*Explode;
               
                //
                // Output the pyramid
                //
                for( int i=0; i<3; i++ )
                {
                    output.Pos = input[i].Pos + float4(ExplodeAmt,0);
                    output.Pos = mul( output.Pos, View );
                    output.Pos = mul( output.Pos, Projection );
                    output.Norm = input[i].Norm;
                    output.Tex = input[i].Tex;
                    TriStream.Append( output );
                   
                    int iNext = (i+1)%3;
                    output.Pos = input[iNext].Pos + float4(ExplodeAmt,0);
                    output.Pos = mul( output.Pos, View );
                    output.Pos = mul( output.Pos, Projection );
                    output.Norm = input[iNext].Norm;
                    output.Tex = input[iNext].Tex;
                    TriStream.Append( output );
                   
                    output.Pos = float4(centerPos,1) + float4(ExplodeAmt,0);
                    output.Pos = mul( output.Pos, View );
                    output.Pos = mul( output.Pos, Projection );
                    output.Norm = faceNormal;
                    output.Tex = centerTex;
                    TriStream.Append( output );
                   
                    TriStream.RestartStrip();
                }
               
                for( int i=2; i>=0; i-- )
                {
                    output.Pos = input[i].Pos + float4(ExplodeAmt,0);
                    output.Pos = mul( output.Pos, View );
                    output.Pos = mul( output.Pos, Projection );
                    output.Norm = -input[i].Norm;
                    output.Tex = input[i].Tex;
                    TriStream.Append( output );
                }
                TriStream.RestartStrip();
            }
            2.GS粒子
            實(shí)現(xiàn)像煙花一樣的效果。
            首先要了解五種基本粒子。
            Launcher Particles 發(fā)射粒子:不移動(dòng)也不死去,用來發(fā)射Shell粒子。一旦發(fā)射完Shell粒子,就重置時(shí)間。
            Shell Particles 由發(fā)射粒子發(fā)射出隨機(jī)速度的的Shell粒子,在生命周期內(nèi)不發(fā)射本類型的粒子,而發(fā)射出一些Ember1和Ember2類型的粒子。
            Ember1 Particles 由Shell粒子發(fā)射,擁有很短的生命周期,隨著時(shí)間而淡出死去,并不發(fā)射粒子。
            Ember2 Particles 由Shell粒子發(fā)射,在生命周期末發(fā)出Ember3粒子,第二次的爆炸源。
            Ember3 Particles 類似Ember1粒子,除了有不同的顏色。
            [maxvertexcount(128)]
            void GSAdvanceParticlesMain(point VSParticleIn input[1], inout PointStream<VSParticleIn> ParticleOutputStream)
            {
                if( input[0].Type == PT_LAUNCHER )
                    GSLauncherHandler( input[0], ParticleOutputStream );
                else if ( input[0].Type == PT_SHELL )
                    GSShellHandler( input[0], ParticleOutputStream );
                else if ( input[0].Type == PT_EMBER1 ||
                          input[0].Type == PT_EMBER3 )
                    GSEmber1Handler( input[0], ParticleOutputStream );
                else if( input[0].Type == PT_EMBER2 )
                    GSEmber2Handler( input[0], ParticleOutputStream );
            }

             

            posted on 2008-05-28 09:33 bloodbao 閱讀(330) 評(píng)論(0)  編輯 收藏 引用 所屬分類: c++
            国产成人香蕉久久久久| 国产精品免费久久久久影院| 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲国产成人久久综合碰| 天堂久久天堂AV色综合| 色综合久久天天综线观看| 国产亚洲精久久久久久无码| 精品久久久久久无码不卡| 久久久久亚洲AV成人网| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 精品久久久久久无码不卡| 久久99国产亚洲高清观看首页| 亚洲国产精品无码久久一区二区| 99国产精品久久| 久久99国产精品二区不卡| 一本久久a久久精品综合香蕉| 狠狠久久亚洲欧美专区| 久久精品aⅴ无码中文字字幕不卡 久久精品成人欧美大片 | 久久天堂AV综合合色蜜桃网| AAA级久久久精品无码区| 伊人久久大香线蕉综合Av| 亚洲中文字幕无码久久精品1 | 91精品婷婷国产综合久久| 国产精品欧美久久久天天影视| 久久五月精品中文字幕| 91亚洲国产成人久久精品网址| 国产A级毛片久久久精品毛片| 精品熟女少妇aⅴ免费久久| 久久久久久亚洲精品无码| 18岁日韩内射颜射午夜久久成人| 一本一本久久aa综合精品| 久久精品国产精品亚洲精品 | 久久电影网2021| 韩国无遮挡三级久久| 大伊人青草狠狠久久| 91精品国产91热久久久久福利| 久久99精品久久只有精品| 精品综合久久久久久97超人| 国产精品一区二区久久| 999久久久免费国产精品播放| 久久精品成人|