Как сделать не размытое изображение в WPF 3d - PullRequest
3 голосов
/ 21 апреля 2010

Я использовал Viewport3D и ModelVisual3D для создания простого ImageBrush с изображением (я пробовал это с JPG, PNG), но оно показывает размытое изображение, но исходное изображение очень резкое и четкое.

Я не знаю, как сделать это с оригинальным качеством в 3D ...

Я также пробовал некоторые 2D-решения, такие как RenderOptions.BitmapScalingMode и SnapsToDevicePixels, но, похоже, не решаю проблему в 3D-случае.

Кто-нибудь сталкивался с этой проблемой или знает решение?

ниже приведен пример кода:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
Title="Window6" Height="600" Width="600">

<Window.Resources>
    <MeshGeometry3D x:Key="Card1" Positions="-0.67,1,0 -0.67,-1,0 0.67,-1,0 0.67,1,0"
        TextureCoordinates="0,0 0,1 1,1 1,0" TriangleIndices="0 1 2 0 2 3" />
</Window.Resources>
<DockPanel Height="600" Width="600">
    <Viewport3D Width="415.67" x:Name="viewport" Margin="0,23.363,0,64.363" DockPanel.Dock="Left">
        <Viewport3D.Camera>
            <PerspectiveCamera x:Name="perCamera" x:Uid="perCamera" FieldOfView="60" Position="0,0,5" />
        </Viewport3D.Camera>
        <ModelVisual3D>
            <ModelVisual3D.Content>
            <Model3DGroup >
                <GeometryModel3D Geometry="{StaticResource Card1}">
                    <GeometryModel3D.Material>
                        <DiffuseMaterial>
                            <DiffuseMaterial.Brush>
                                <ImageBrush ImageSource="images\card.png"/>
                            </DiffuseMaterial.Brush>
                        </DiffuseMaterial>
                    </GeometryModel3D.Material>
                </GeometryModel3D>
                </Model3DGroup>
            </ModelVisual3D.Content>
        </ModelVisual3D>
        <!-- light -->
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <DirectionalLight Color="#FFFFFFFF" Direction="0,0,-1"/>
            </ModelVisual3D.Content>
        </ModelVisual3D>

    </Viewport3D>
</DockPanel>

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

Большинство графического оборудования требует, чтобы размер текстуры был степенью 2 (например, 512x512 пикселей). Предполагается, что WPF сначала «корректирует» размер изображения до степени 2, а затем масштабирует полученный результат до нужного размера. Масштабирование от степени 2 до необходимого целевого размера обычно выполняется с помощью алгоритма, который подчеркивает скорость, а не качество (если вы не сделаете что-то, чтобы указать другое, чего я не вижу выше).

Чтобы проверить эту гипотезу, я создал бы чертеж с размерами, равными двум степеням, а затем отобразил бы его в исходном разрешении. Если это является источником проблемы, это должно минимизировать (или даже устранить) проблему.

1 голос
/ 07 ноября 2012

Используйте UseLayoutRounding="True" свойство для элемента Image.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...