none
3d анимация для интерактивных элементов RRS feed

  • Вопрос

  • Как реализовать 3d анимацию (поворот) для интерактивных элементов?

    просмотрел кучу примеров для 3d объектов, но не нашел ничего для обычных WPF контролов

    25 декабря 2012 г. 12:11

Ответы

  • Для этого нужно использовать Viewport3D в нутри которого используете Viewport2DVisual3D и ужен внутри него ставите ваши контролы

    почитайте вот тут http://stackoverflow.com/questions/7168420/wpf-rotating-button

    • Помечено в качестве ответа a_basic_man 25 декабря 2012 г. 14:59
    25 декабря 2012 г. 12:46

Все ответы

  • Для этого нужно использовать Viewport3D в нутри которого используете Viewport2DVisual3D и ужен внутри него ставите ваши контролы

    почитайте вот тут http://stackoverflow.com/questions/7168420/wpf-rotating-button

    • Помечено в качестве ответа a_basic_man 25 декабря 2012 г. 14:59
    25 декабря 2012 г. 12:46
  • еще вопрос..

    Содержимое Viewport2DVisual3D отображается в квадратном окне, как-то по размеру окна надо бы, а то не привычно смотрится

    пример взял по вашей ссылке

    26 декабря 2012 г. 2:53
  • странно у меня на полное окно растянуто, покажите вашу разметку
    26 декабря 2012 г. 5:58
  • <UserControl x:Class="DataPresentation.MyControls.FoldersViewer"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                 xmlns:my="clr-namespace:DataPresentation.MyControls"
                 d:DesignHeight="300"
                 d:DesignWidth="400"
                 Loaded="UserControl_Loaded"
                 mc:Ignorable="d">
        
    
        <Grid Name="grid" Opacity="0">
            <Grid.RowDefinitions>
                <RowDefinition Height="35" />
                <RowDefinition />
            </Grid.RowDefinitions>
            
    
            <Label Name="titleLabel"
                   HorizontalAlignment="Center"
                   FontSize="14"
                   FontWeight="Black"
                   Foreground="White" />
    
            <Viewport3D Grid.Row="1" Name="viewPort3d">
                <Viewport3D.RenderTransform>
                    <MatrixTransform>
                        <MatrixTransform.Matrix>                        
                            <Matrix OffsetX="-420" OffsetY="-95" M11="1.65" M12="0" M21="0" M22="1.27" />
                        </MatrixTransform.Matrix>
    
                    </MatrixTransform>
                </Viewport3D.RenderTransform>
                <Viewport3D.Camera>
                    <PerspectiveCamera Position="0, 0, 4"/>
                </Viewport3D.Camera>
                <Viewport2DVisual3D x:Name="v2dv3d">
                    <Viewport2DVisual3D.Transform>
                        <RotateTransform3D>
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Angle="0" Axis="0, 1, 0" />
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>                    
                    </Viewport2DVisual3D.Transform>
                    <Viewport2DVisual3D.Geometry>
                        <MeshGeometry3D Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0" TextureCoordinates="0,0 0,1 1,1 1,0" 
                                        TriangleIndices="0 1 2 0 2 3"/> <!--Regular Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0"-->
                    </Viewport2DVisual3D.Geometry>
    
                    <Viewport2DVisual3D.Material>
                        <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" />
                    </Viewport2DVisual3D.Material>
                    <Grid Name="grid3d"  Background="Transparent" >
                                            
                        <ScrollViewer Name="scrollViewer"                      
                          Background="Transparent"
                          HorizontalScrollBarVisibility="Disabled"
                          VerticalScrollBarVisibility="Auto">
                            <WrapPanel Name="wrapPanel" Background="Transparent" ItemHeight="400"/>
                        </ScrollViewer>                    
                    </Grid>
                </Viewport2DVisual3D>
                <ModelVisual3D>
                    <ModelVisual3D.Content>
                        <DirectionalLight Color="#FFFFFFFF" Direction="0,0,-1"/>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
            </Viewport3D>        
        </Grid>
    </UserControl>
    Контролы в WrapPanel-и 
    26 декабря 2012 г. 6:18
  • пришлось для Viewport3D трансформацию вставить чтобы растянуть по экрану

    <MatrixTransform.Matrix>                        
        <Matrix OffsetX="-420" OffsetY="-95" M11="1.65" M12="0" M21="0" M22="1.27" />
    </MatrixTransform.Matrix>

    но это никуда не годится

    26 декабря 2012 г. 6:21
  • покажите разметку где вы используете этот контрол, и кстати а зачем вы в контроле у грида ставите
     Opacity="0"
    ?
    26 декабря 2012 г. 6:37
  • <Page x:Class="DataPresentation.Pages.PartsShow"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          xmlns:my="clr-namespace:DataPresentation.MyControls"
          Title="PartsShow"      
          d:DesignHeight="300"
          d:DesignWidth="300"
          Loaded="Page_Loaded"
          mc:Ignorable="d">
        
        <Grid Name="grid" Grid.RowSpan="2"/>        
     </Page>

    private void Page_Loaded(object sender, RoutedEventArgs e)
            {
                viewer = new FoldersViewer(MainWindow.DirectoryPath, this);
                grid.Children.Add(viewer);
            }

    26 декабря 2012 г. 6:45
  • покажите разметку где вы используете этот контрол, и кстати а зачем вы в контроле у грида ставите
     Opacity="0"
    ?

    при загрузке анимация с прозрачностью есть
    26 декабря 2012 г. 6:50
  • Странно у меня показывается на все окно, правда я в XAML разметку напрямую помещаю контрол, попробуйте переписать контрол что бы можно было не использовать параметризированный конструктор, а уже после назначить свойства, может быть в этом проблема
    26 декабря 2012 г. 6:54
  • ах да, Page находится внутри Frame:

    <Window x:Class="DataPresentation.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Height="650" Width="725" Loaded="Window_Loaded" 
            WindowState="Maximized" WindowStyle="None" Background="Black" >
        
        <Grid >        
            <Frame Grid.RowSpan="2" Name="aFrame" LoadCompleted="aFrame_LoadCompleted" NavigationUIVisibility="Hidden"/>                
        </Grid>
    </Window>

    26 декабря 2012 г. 6:56
  • <Window x:Class="WpfApplication3d.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window1" Height="300" Width="300">
        <Grid Name="grid">
            <Grid.RowDefinitions>
                <RowDefinition Height="35" />
                <RowDefinition />
            </Grid.RowDefinitions>
            
            <Label Name="titleLabel"
                   HorizontalAlignment="Center"
                   FontSize="14"
                   FontWeight="Black"
                   Foreground="Black" >
                Вне Viewport3D
            </Label>
            <Viewport3D Grid.Row="1" Name="viewPort3d">            
                <Viewport3D.Camera>
                    <PerspectiveCamera Position="0, 0, 4"/>
                </Viewport3D.Camera>
                <Viewport2DVisual3D x:Name="v2dv3d">
                    <Viewport2DVisual3D.Transform>
                        <RotateTransform3D>
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Angle="0" Axis="0, 1, 0" />
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                    </Viewport2DVisual3D.Transform>
                    <Viewport2DVisual3D.Geometry>
                        <MeshGeometry3D Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0" TextureCoordinates="0,0 0,1 1,1 1,0" 
                                        TriangleIndices="0 1 2 0 2 3"/>                    
                    </Viewport2DVisual3D.Geometry>
                    <Viewport2DVisual3D.Material>
                        <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" />
                    </Viewport2DVisual3D.Material>
                    <Grid Name="grid3d"  Background="Transparent" >
                                            
                        <ScrollViewer Name="scrollViewer"                      
                          Background="Transparent"
                          HorizontalScrollBarVisibility="Disabled"
                          VerticalScrollBarVisibility="Auto">
                            <WrapPanel Name="wrapPanel" Background="Green" ItemHeight="400">
                                <Rectangle Width="200" Height="200" Fill="AliceBlue"/>
                                <Rectangle Width="200" Height="200" Fill="Blue"/>
                                <Rectangle Width="200" Height="200" Fill="Violet"/>
                                <Rectangle Width="200" Height="200" Fill="AliceBlue"/>
                                <Rectangle Width="200" Height="200" Fill="Blue"/>
                                <Rectangle Width="200" Height="200" Fill="Violet"/>
                                <Rectangle Width="200" Height="200" Fill="AliceBlue"/>
                                <Rectangle Width="200" Height="200" Fill="Blue"/>
                                <Rectangle Width="200" Height="200" Fill="Violet"/>
                            </WrapPanel>
                        </ScrollViewer>
                        <Label FontSize="20">
                            Внутри  Viewport2DVisual3D
                        </Label>
                    </Grid>
                </Viewport2DVisual3D>
                <ModelVisual3D>
                    <ModelVisual3D.Content>
                        <DirectionalLight Color="#FFFFFFFF" Direction="0,0,-1"/>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
            </Viewport3D>
        </Grid>
    </Window>

    а все равно квадратом рисуется

    27 декабря 2012 г. 2:58
  • в вашем случае это так камера стоит, попробуцте поиграться с расположением камеры
    27 декабря 2012 г. 7:05
  • в вашем случае это так камера стоит, попробуцте поиграться с расположением камеры

    с камерой можно приблизить/отдалить или изменить угол зрения, но квадрат так и остается квадратом :)
    27 декабря 2012 г. 11:12
  • Вид контролов зависит и от вида камер, попробуйте  OrthographicCamera тогда у вас будет растянуты контролы на весь экран

    http://msdn.microsoft.com/ru-ru/library/system.windows.media.media3d.orthographiccamera.aspx

    28 декабря 2012 г. 7:39
  • Спасибо Brash_O!

    с этой лучше смотрится

    28 декабря 2012 г. 12:20