| 103 | | //initialize the z-buffer so we can do a sane single-sided alpha |
|---|
| 104 | | dev.RenderState.Lighting = false; |
|---|
| 105 | | dev.RenderState.ZBufferFunction = Compare.Less; |
|---|
| 106 | | dev.RenderState.ColorWriteEnable = (ColorWriteEnable)0; |
|---|
| 107 | | dev.RenderState.FillMode = pnPreviewOpts.FillMode; |
|---|
| 108 | | |
|---|
| 109 | | modelDXData.BindModelData(); |
|---|
| 110 | | |
|---|
| 111 | | foreach( GroupContext ctx in pnGroups.Groups ) |
|---|
| 112 | | { |
|---|
| 113 | | if( !ctx.Visible ) |
|---|
| 114 | | continue; |
|---|
| 115 | | |
|---|
| 116 | | modelDXData.Draw( ctx.Group ); |
|---|
| 117 | | } |
|---|
| 118 | | |
|---|
| 119 | | //draw the shaded model on top |
|---|
| 120 | | dev.RenderState.Lighting = pnPreviewOpts.EnableLighting; |
|---|
| 121 | | dev.RenderState.SpecularEnable = pnPreviewOpts.EnableSpecularHighlights; |
|---|
| 122 | | |
|---|
| 123 | | dev.RenderState.ZBufferFunction = Compare.Equal; |
|---|
| 124 | | dev.RenderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; |
|---|
| 125 | | |
|---|
| 126 | | dev.RenderState.AlphaBlendEnable = true; |
|---|
| 127 | | dev.RenderState.SourceBlend = Blend.SourceAlpha; |
|---|
| 128 | | dev.RenderState.DestinationBlend = Blend.InvSourceAlpha; |
|---|
| 129 | | |
|---|
| 130 | | modelDXData.BindModelData(); |
|---|
| 131 | | |
|---|
| 132 | | for( int i = 0; i < m.Groups.Count; i++ ) |
|---|
| 133 | | { |
|---|
| 134 | | if( !pnGroups.Groups[i].Visible ) |
|---|
| 135 | | continue; |
|---|
| 136 | | |
|---|
| 137 | | Libx42.Group g = m.Groups[i]; |
|---|
| 138 | | |
|---|
| 139 | | const int alpha = 75; |
|---|
| 140 | | |
|---|
| 141 | | Material mat = new Material(); |
|---|
| 142 | | mat.Diffuse = Color.FromArgb( alpha * 2, 0, 0, 0 ); |
|---|
| 143 | | mat.Ambient = Color.FromArgb( alpha, 50, 50, 50 ); |
|---|
| 144 | | mat.Emissive = Color.FromArgb( alpha, Color.Black ); |
|---|
| 145 | | mat.Specular = Color.FromArgb( alpha, 25, 25, 25 ); |
|---|
| 146 | | mat.SpecularSharpness = 10; |
|---|
| 147 | | |
|---|
| 148 | | dev.Material = mat; |
|---|
| 149 | | |
|---|
| 150 | | modelDXData.Draw( g ); |
|---|
| | 103 | if( model.Model.Vertices.Count > 0 ) |
|---|
| | 104 | { |
|---|
| | 105 | //initialize the z-buffer so we can do a sane single-sided alpha |
|---|
| | 106 | dev.RenderState.Lighting = false; |
|---|
| | 107 | dev.RenderState.ZBufferFunction = Compare.Less; |
|---|
| | 108 | dev.RenderState.ColorWriteEnable = (ColorWriteEnable)0; |
|---|
| | 109 | dev.RenderState.FillMode = pnPreviewOpts.FillMode; |
|---|
| | 110 | |
|---|
| | 111 | modelDXData.BindModelData(); |
|---|
| | 112 | |
|---|
| | 113 | foreach( GroupContext ctx in pnGroups.Groups ) |
|---|
| | 114 | { |
|---|
| | 115 | if( !ctx.Visible ) |
|---|
| | 116 | continue; |
|---|
| | 117 | |
|---|
| | 118 | modelDXData.Draw( ctx.Group ); |
|---|
| | 119 | } |
|---|
| | 120 | |
|---|
| | 121 | //draw the shaded model on top |
|---|
| | 122 | dev.RenderState.Lighting = pnPreviewOpts.EnableLighting; |
|---|
| | 123 | dev.RenderState.SpecularEnable = pnPreviewOpts.EnableSpecularHighlights; |
|---|
| | 124 | |
|---|
| | 125 | dev.RenderState.ZBufferFunction = Compare.Equal; |
|---|
| | 126 | dev.RenderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; |
|---|
| | 127 | |
|---|
| | 128 | dev.RenderState.AlphaBlendEnable = true; |
|---|
| | 129 | dev.RenderState.SourceBlend = Blend.SourceAlpha; |
|---|
| | 130 | dev.RenderState.DestinationBlend = Blend.InvSourceAlpha; |
|---|
| | 131 | |
|---|
| | 132 | modelDXData.BindModelData(); |
|---|
| | 133 | |
|---|
| | 134 | for( int i = 0; i < m.Groups.Count; i++ ) |
|---|
| | 135 | { |
|---|
| | 136 | if( !pnGroups.Groups[i].Visible ) |
|---|
| | 137 | continue; |
|---|
| | 138 | |
|---|
| | 139 | Libx42.Group g = m.Groups[i]; |
|---|
| | 140 | |
|---|
| | 141 | const int alpha = 75; |
|---|
| | 142 | |
|---|
| | 143 | Material mat = new Material(); |
|---|
| | 144 | mat.Diffuse = Color.FromArgb( alpha * 2, 0, 0, 0 ); |
|---|
| | 145 | mat.Ambient = Color.FromArgb( alpha, 50, 50, 50 ); |
|---|
| | 146 | mat.Emissive = Color.FromArgb( alpha, Color.Black ); |
|---|
| | 147 | mat.Specular = Color.FromArgb( alpha, 25, 25, 25 ); |
|---|
| | 148 | mat.SpecularSharpness = 10; |
|---|
| | 149 | |
|---|
| | 150 | dev.Material = mat; |
|---|
| | 151 | |
|---|
| | 152 | modelDXData.Draw( g ); |
|---|
| | 153 | } |
|---|