平面,頂点の入力順が重要
[maxvertexcount(4)] void geom(triangle appdata vg[3], inout TriangleStreamoutStream){ float p = 0.5; g2f gf = (g2f)0; gf.pos = UnityObjectToClipPos(float4(p,p,0,1)); outStream.Append(gf); gf.pos = UnityObjectToClipPos(float4(p,-p,0,1)); outStream.Append(gf); gf.pos = UnityObjectToClipPos(float4(-p,p,0,1)); outStream.Append(gf); gf.pos = UnityObjectToClipPos(float4(-p,-p,0,1)); outStream.Append(gf); outStream.RestartStrip(); }
立方体
カリングしないとひっくり返ってうまいこといかない
Cull Off [maxvertexcount(16)] void geom(triangle appdata vg[3], inout TriangleStream<g2f>outStream){ float p = 0.5; g2f gf; gf.fpos = float4(p,p,p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(p,-p,p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(-p,p,p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(-p,-p,p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(-p,p,-p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(-p,-p,-p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(p,p,-p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(p,-p,-p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); outStream.RestartStrip(); gf.fpos = float4(-p,-p,p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(p,-p,p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(-p,-p,-p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(p,-p,-p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(-p,-p,-p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(p,p,p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(p,p,-p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(-p,p,p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); gf.fpos = float4(-p,p,-p,1); gf.pos = UnityObjectToClipPos(gf.fpos); outStream.Append(gf); outStream.RestartStrip(); }