/// <summary> /// Sets the texture parameter from the appropriate picture sets. /// </summary> /// <returns> /// If true, a valid texture was set on the device by this function. /// </returns> static bool SetTexture(Board board, int textureIndex) { LightingEffect lightingEffect = board.LightingEffect; Texture2D texture = null; if (board.CurrentPictureSet != null) { texture = board.CurrentPictureSet.GetTexture(textureIndex); } if ((texture == null) && (board.NextPictureSet != null)) { texture = board.NextPictureSet.GetTexture(textureIndex); } lightingEffect.DiffuseTexture.SetValue(texture); return(texture != null); }
public void Draw(Board board, Model chipModel, Matrix baseTransform, Matrix[] chipTransforms) { Matrix world = OrientationMatrix * baseTransform; LightingEffect lightingEffect = board.LightingEffect; // Set model level render states lightingEffect.GlowScale.SetValue(GlowScale); lightingEffect.ColorOverride.SetValue(ColorOverride); lightingEffect.TexCoordScale.SetValue(TexCoordScale); foreach (ModelMesh mesh in chipModel.Meshes) { // Calculate matricies Matrix modelWorld = chipTransforms[mesh.ParentBone.Index] * world; Matrix modelWorldView = modelWorld * board.Camera.ViewMatrix; Matrix modelWorldViewProjection = modelWorldView * board.Camera.ProjectionMatrix; // Set matricies lightingEffect.World.SetValue(modelWorld); lightingEffect.WorldView.SetValue(modelWorldView); lightingEffect.WorldViewProjection.SetValue(modelWorldViewProjection); foreach (ModelMeshPart meshPart in mesh.MeshParts) { // Get the material identifier out of the mesh part tag bool textureSet = false; string materialIdentifier = meshPart.Tag as string; if (materialIdentifier != null) { // The material identifier is used to determine which textures // to draw with switch (materialIdentifier) { case "Front": lightingEffect.TexCoordTranslation.SetValue( this.TexCoordTranslationFront); textureSet = SetTexture(board, 0); break; case "Back": lightingEffect.TexCoordTranslation.SetValue( this.TexCoordTranslationBack); // Reuse the front side texture on single sided boards if (board.TwoSided) { textureSet = SetTexture(board, 1); } else { textureSet = SetTexture(board, 0); } break; default: lightingEffect.DiffuseTexture.SetValue((Texture2D)null); break; } } // set the appropriate technique, depending on how many textures // are being rendered if (textureSet) { lightingEffect.Effect.CurrentTechnique = lightingEffect.SingleTextureTechnique; } else { lightingEffect.Effect.CurrentTechnique = lightingEffect.NoTextureTechnique; } // draw the mesh lightingEffect.Effect.Begin(); DrawHelper.DrawMeshPart(mesh, meshPart, lightingEffect.Effect); lightingEffect.Effect.End(); } } }