If you are programmatically assigning an image as a DiffuseMaterial to your 3D model, then you need to make sure that you have created TextureCoordinates.
I was using some sample code that created a 3D object - and tried to change the brush from a color to an image. The color worked fine, but the image never showed (it was invisible). The reason was that the sample code only did mesh.Positions.Add() and mesh.TriangleIndicies.Add(). When I added the appropriate mesh.TextureCoordinates.Add() lines the image then showed. eg:
MeshGeometry3D mesh = new MeshGeometry3D();
mesh.Positions.Add(new Point3D(1, 1, 1));
mesh.Positions.Add(new Point3D(1, 1, -1));
mesh.Positions.Add(new Point3D(-7, 1, -1));
mesh.Positions.Add(new Point3D(-7, 1, 1));
mesh.TriangleIndices.Add(0);
mesh.TriangleIndices.Add(1);
mesh.TriangleIndices.Add(2);
mesh.TriangleIndices.Add(0);
mesh.TriangleIndices.Add(2);
mesh.TriangleIndices.Add(3);
// These are the lines you need to allow an image to be painted onto the 3d model
mesh.TextureCoordinates.Add(new Point(0, 0));
mesh.TextureCoordinates.Add(new Point(0, 1));
mesh.TextureCoordinates.Add(new Point(1, 1));
mesh.TextureCoordinates.Add(new Point(1, 0));
ImageBrush imgBrush = new ImageBrush(new BitmapImage(new Uri("pack://siteoforigin:,,,/myimage.png")));
//GeometryModel3D geometry = new GeometryModel3D(mesh, new DiffuseMaterial(Brushes.Green)); // this line works without the TextureCoordinates
GeometryModel3D geometry = new GeometryModel3D(mesh, newDiffuseMaterial(imgBrush));
geometry.Transform = new Transform3DGroup();
Model3DGroup group = new Model3DGroup();
group.Children.Add(geometry);
HTH
Tim