Changeset 490

Show
Ignore:
Timestamp:
12/06/07 18:06:58 (1 year ago)
Author:
phill
Message:

o Normal, tangent, binormal viewing power.
o Fixed bump mapped shading. I hope.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/x42view.net/Gui/ModelWindow.Preview.Topology.cs

    r488 r490  
    274274                        Device dev = pn3D.Device; 
    275275                        topoVb = new VertexBuffer( dev, topoPoints.Count * LineVertex.Size, Usage.None, VertexFormats.None, Pool.Managed ); 
     276                        topoNTBVb = new VertexBuffer( dev, m.Vertices.Count * 2 * 3 * LineVertex.Size, Usage.None, VertexFormats.None, Pool.Managed ); 
    276277                        topoIb = new IndexBuffer( typeof( ushort ), topoIndices.Count, dev, Usage.None, Pool.Managed ); 
    277278 
     
    301302 
    302303                private object topoPreviewFrameCookieStrip; 
    303                 private object topoPreviewFrameCookieNTb; 
    304  
    305304                private void UpdateTopologyStripPreviewState() 
    306305                { 
     
    314313                } 
    315314 
     315                private object topoPreviewFrameCookieNTb; 
    316316                private void UpdateTopologyNTbPreviewState() 
    317317                { 
     318                        Libx42.Model m = model.Model; 
     319                        if( m == null ) 
     320                                return; 
     321 
     322                        if( topoPreviewFrameCookieNTb != frameCookie ) 
     323                        { 
     324                                GraphicsStream gs = topoNTBVb.Lock( 0, 0, LockFlags.None ); 
     325                                try 
     326                                { 
     327 
     328                                        Libx42.DataStream<Vector3> vp = modelDXData.AnimationBuffer.PositionStream.Reinterpret<Vector3>(); 
     329                                        if( modelDXData.AnimationBuffer.NormalStream != null ) 
     330                                        { 
     331                                                Libx42.DataStream<Vector3> vn = modelDXData.AnimationBuffer.NormalStream.Reinterpret<Vector3>(); 
     332 
     333                                                for( int i = 0; i < m.Vertices.Count; i++ ) 
     334                                                { 
     335                                                        gs.Write( new LineVertex( vp[i], Color.Blue ) ); 
     336                                                        gs.Write( new LineVertex( vp[i] + vn[i], Color.Blue ) ); 
     337                                                } 
     338                                        } 
     339 
     340                                        if( modelDXData.AnimationBuffer.TangentStream != null && modelDXData.AnimationBuffer.BinormalStream != null ) 
     341                                        { 
     342                                                Libx42.DataStream<Vector3> vt = modelDXData.AnimationBuffer.TangentStream.Reinterpret<Vector3>(); 
     343                                                Libx42.DataStream<Vector3> vb = modelDXData.AnimationBuffer.BinormalStream.Reinterpret<Vector3>(); 
     344 
     345                                                for( int i = 0; i < m.Vertices.Count; i++ ) 
     346                                                { 
     347                                                        /* Note: tangents and binormals are not normalized at the 
     348                                                         * vertex animation stage since that's something that could 
     349                                                         * be done faster on the GPU (vertex shaders are pretty much 
     350                                                         * implied when using tangents and binormals). Normalize them 
     351                                                         * here so the display doesn't look screwy. 
     352                                                         */ 
     353 
     354                                                        gs.Write( new LineVertex( vp[i], Color.Red ) ); 
     355                                                        gs.Write( new LineVertex( vp[i] + Vector3.Normalize( vt[i] ), Color.Red ) ); 
     356 
     357                                                        gs.Write( new LineVertex( vp[i], Color.Green ) ); 
     358                                                        gs.Write( new LineVertex( vp[i] + Vector3.Normalize( vb[i] ), Color.Green ) ); 
     359                                                } 
     360                                        } 
     361                                } 
     362                                finally 
     363                                { 
     364                                        topoNTBVb.Unlock(); 
     365                                } 
     366 
     367                                topoPreviewFrameCookieNTb = frameCookie; 
     368                        } 
    318369                } 
    319370 
     
    325376                } 
    326377 
    327                 private void DrawTopologyView() 
     378                private void DrawTopologyStrips() 
    328379                { 
    329380                        Libx42.Model m = model.Model; 
    330                         if( m == null ) 
    331                                 return; 
    332381 
    333382                        UpdateTopologyStripPreviewState(); 
     
    340389                        { 
    341390                                GroupContext ctx = pnGroups.Groups[i]; 
    342                                  
     391 
    343392                                if( !ctx.Visible ) 
    344393                                        continue; 
     
    425474                                mat.Emissive = Color.Black; 
    426475                                dev.Material = mat; 
    427                                  
     476 
    428477                                dev.Indices = topoIb; 
    429478 
     
    449498                                        entry.FirstStripEdgeIndex, entry.NumStripEdges ); 
    450499                        } 
    451  
     500                } 
     501 
     502                private void DrawTopologyView() 
     503                { 
     504                        Libx42.Model m = model.Model; 
     505                        if( m == null ) 
     506                                return; 
     507 
     508                        Device dev = pn3D.Device; 
     509 
     510                        switch( pnPreviewOpts.TopologyShadingMode ) 
     511                        { 
     512                        case TopologyShadingMode.Strips: 
     513                                DrawTopologyStrips(); 
     514                                break; 
     515 
     516                        case TopologyShadingMode.TexCoords: 
     517                                if( m.Vertices.TextureCoordinateStream == null ) 
     518                                        goto case TopologyShadingMode.None; 
     519 
     520                                break; 
     521 
     522                        case TopologyShadingMode.None: 
     523                                DrawSurfacesView(); 
     524                                break; 
     525                        } 
     526 
     527                        if( pnPreviewOpts.TopoShowNormals || pnPreviewOpts.TopoShowTanBasis ) 
     528                        { 
     529                                UpdateTopologyNTbPreviewState(); 
     530 
     531                                dev.RenderState.AlphaBlendEnable = false; 
     532                                dev.RenderState.Lighting = false; 
     533                                dev.RenderState.ColorVertex = true; 
     534 
     535                                dev.VertexDeclaration = lineVertDecl; 
     536                                dev.SetStreamSource( 0, topoNTBVb, 0, LineVertex.Size ); 
     537 
     538                                foreach( GroupContext ctx in pnGroups.Groups ) 
     539                                { 
     540                                        if( !ctx.Visible ) 
     541                                                continue; 
     542 
     543                                        Libx42.Group g = ctx.Group; 
     544 
     545                                        if( pnPreviewOpts.TopoShowNormals && modelDXData.AnimationBuffer.NormalStream != null ) 
     546                                        { 
     547                                                dev.DrawPrimitives( PrimitiveType.LineList, g.Vertices.Offset * 2, g.Vertices.Count ); 
     548                                        } 
     549 
     550                                        if( pnPreviewOpts.TopoShowTanBasis && 
     551                                                modelDXData.AnimationBuffer.TangentStream != null && 
     552                                                modelDXData.AnimationBuffer.BinormalStream != null ) 
     553                                        { 
     554                                                int ofs = modelDXData.AnimationBuffer.NormalStream != null ? m.Vertices.Count * 2 : 0; 
     555                                                dev.DrawPrimitives( PrimitiveType.LineList, ofs + g.Vertices.Offset * 4, g.Vertices.Count * 2 ); 
     556                                        } 
     557                                } 
     558                        } 
    452559                } 
    453560        } 
  • trunk/x42view.net/Gui/ModelWindow.Preview.cs

    r485 r490  
    3434        partial class ModelWindow 
    3535        { 
    36                 private VertexBuffer topoVb
     36                private VertexBuffer topoVb, topoNTBVb
    3737                private VertexBuffer colorsVb; 
    3838 
     
    230230 
    231231                        Helpers.DisposeAndClear( ref topoVb ); 
     232                        Helpers.DisposeAndClear( ref topoNTBVb ); 
    232233                        Helpers.DisposeAndClear( ref topoIb ); 
    233234                        Helpers.DisposeAndClear( ref utilBox ); 
  • trunk/x42view.net/Media/ShadedPreview.fx

    r487 r490  
    6161         
    6262        ret.eyeDir = eyePos; 
    63         ret.tanToObj = float3x3( iTan, iBin, iNorm ); 
     63        ret.tanToObj = float3x3( 
     64                        normalize( iTan ), 
     65                        normalize( iBin ), 
     66                        normalize( iNorm ) ); 
    6467         
    6568        return mul( iPos, mvp ); 
  • trunk/x42view.net/x42view.net.csproj

    r488 r490  
    173173    </Compile> 
    174174    <Compile Include="Gui\Options.cs"> 
    175       <SubType>Form</SubType> 
     175      <SubType>Component</SubType> 
    176176    </Compile> 
    177177    <Compile Include="Gui\Options.Designer.cs">