Ich bin neu in "wpf" und ich bin über das folgende Problem gekommen: In meinem Projekt versuche ich, kleine Auflösung .png als Textur für ein Modell zu verwenden. Wenn ich in Blender deaktivieren Mipmapping (wo ich den Würfel gebaut) das Ergebnis genau das, was ich will:Mipmapping in wpf
Aber in der WPF-Projekt stellt sich die verschwommenen Effekt nie aus:
Hier ist mein Code:
<Window x:Class="GCS.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="504" Width="525" ShowInTaskbar="True">
<Grid>
<Viewport3D Name="myViewport"
xmlns="http://schemas.microsoft.com/netfx/2007/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Viewport3D.Resources>
<MaterialGroup x:Key="Material">
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush RenderOptions.BitmapScalingMode="NearestNeighbor" ViewportUnits="Absolute" ImageSource="char.png"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</MaterialGroup>
</Viewport3D.Resources>
<Viewport3D.Camera>
<PerspectiveCamera Position="7.8,-11,-0.8" NearPlaneDistance="1" FarPlaneDistance="50" LookDirection="-0.4,0.9,-0.3" UpDirection="0,0,1" FieldOfView="15"/>
</Viewport3D.Camera>
<Viewport3D.Children>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D Material="{StaticResource Material}">
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D OffsetZ="0" OffsetX="0" OffsetY="-7"/>
<ScaleTransform3D ScaleZ="1" ScaleY="1" ScaleX="1"/>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="1,0,0" Angle="92"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
<TranslateTransform3D OffsetZ="0" OffsetX="0" OffsetY="7"/>
<TranslateTransform3D OffsetZ="-6.622" OffsetX="0" OffsetY="-0.023"/>
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Normals="-1,0,0 -1,0,0 -1,0,0 -1,0,0 0,0,-1 0,0,-1 0,0,-1 0,0,-1 1,0,0 1,0,0 1,0,0 1,0,0 0,0,1 0,0,1 0,0,1 0,0,1 0,-1,0 0,-1,0 0,-1,0 0,-1,0 0,1,0 0,1,0 0,1,0 0,1,0"
Positions="-1,6,-1 -1,6,1 -1,8,1 -1,8,-1 -1,8,-1 1,8,-1 1,6,-1 -1,6,-1 1,8,-1 1,8,1 1,6,1 1,6,-1 -1,6,1 1,6,1 1,8,1 -1,8,1 -1,6,1 -1,6,-1 1,6,-1 1,6,1 1,8,1 1,8,-1 -1,8,-1 -1,8,1"
TextureCoordinates="0,0.5 0.125,0.5 0.125,0.25 0,0.25 0.5,0.25 0.375,0.25 0.375,0.5 0.5,0.5 0.375,0.25 0.25,0.25 0.25,0.5 0.375,0.5 0.125,0.5 0.25,0.5 0.25,0.25 0.125,0.25 0.375,0.25 0.375,0 0.25,0 0.25,0.25 0.25,0.25 0.25,0 0.125,0 0.125,0.25"
TriangleIndices="0 1 2 0 2 3 4 5 6 4 6 7 8 9 10 8 10 11 12 13 14 12 14 15 16 17 18 16 18 19 20 21 22 20 22 23"/>
</GeometryModel3D.Geometry>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<AmbientLight Color="#ffffff"/>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D.Children>
</Viewport3D>
</Grid>
Ich habe eine Menge Suche im Internet gemacht und viele Ansätze ausprobiert: erzwungenes Software-Rendering, verwende DrawingBrush anstelle von ImageBrush, aber das Ergebnis ist dasselbe. Gibt es eine Möglichkeit, ein solches Rendering zu überwinden?
Sie setzen 'RenderOptions.BitmapScalingMode' auf die' ImgaeBrush'. Ich weiß nicht, ob das die Lösung ist (daher ein Kommentar und nicht eine Antwort), aber Sie können es auch auf 'GeometryModel3D',' ModelVisual3D' und 'ViewPort3D', sowie' Window' und '' setzen Gitter'. Haben Sie eine oder alle dieser Optionen ausprobiert, um zu sehen, ob es einen Unterschied macht? Es scheint mir möglich zu sein, dass der ImageBrush selbst nicht die Skalierung in einem 3D-Szenario durchführt und daher das Setzen von RenderOptions auf das Pinselobjekt nicht den gewünschten Effekt hat. –
Danke für eine Antwort. Tatsächlich habe ich alle diese Varianten einmal und sogar zusammen ausprobiert. Das Ergebnis ist das gleiche (( – user1662530
Ah - aus Ideen dann! Meine Vermutung ist, dass das Rendering von der 3D-Hardware in Ihrer Grafikkarte gemacht wird, über die WPF anscheinend weniger Kontrolle hat, als wir möchten. Das ist wirklich ein denke aber, und ich habe keine Ahnung, wie oder ob es möglich ist, es zu überschreiben, wenn das der Fall ist.Langschuss, aber sind Ihre Grafikkartentreiber auf dem neuesten Stand? –