IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

[WPF]Placer camera à l'intérieur d'une sphere


Sujet :

Windows Presentation Foundation

  1. #1
    Membre chevronné Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Par défaut [WPF]Placer camera à l'intérieur d'une sphere
    Bonjour,
    J'utilise la classe SphereMeshGenerator pour créer une sphère en WPF dont la surface est composée d'un mediaelement (video).
    Etant novice en 3d, je souhaiterais savoir s'il était possible de placer la camera au centre de cette sphère afin d'avoir une vue de l'intérieur?
    Il faudrait donc également mapper la video sur la surface interne de la sphère, je suppose?!

    Je souhaiterais donc savoir dans les grandes lignes si cela est possible?

    Merci.

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    Bonjour Roster
    Absolument .
    Quoique ca me parait for bizarre......
    Une camera doit avoir 3 parametres :
    -Position : si le centre de ta sphere est le centre par defaut ce sera le centre du ViewPort3d soit .c.à.d (0,0,0)
    -LookUp : direction vers laquelle l'observateur regarde la scene et c'est là ou le bat blesse.......quand on est enferme dans une sphere...

    -UpDirection: ou hauteur (en general c'est l'axe Y)

    -FieldOfView:un champ suffisant sinon on ne voit rien......

    Et un diametre consistant pour la sphere sinon tu seras à l'etroit........
    Il faudrait donc également mapper la video sur la surface interne de la sphère, je suppose
    Absolument avec GeometryModel3D.BackMaterial .

    ici le code xaml qui utilise le class SphereMeshGenerator cite par toi......
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    <Window x:Class="WpfSphereMeshGenerator.SphereMeshGeneratorMediaInto"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfSphereMeshGenerator"
            Title="SphereMeshGeneratorMediaInto" 
            Height="300" Width="300"
            Loaded="Window_Loaded">
        <!--rappel :les axes OXYZ en WPF sont au centre  du ViewPort3D-->
     
        <Window.Resources>
          <!--donnez un diametre suffisant à la sphere--> 
            <local:SphereMeshGenerator 
            x:Key="MySphereMeshGenerator"
            Center="0 0 0"
            Radius="100.0" />
        </Window.Resources>
        <Grid>
            <Viewport3D>
                <!--la camera au centre du ViewPort => 0,0,0--> 
                <!--un champ de vision de la camera suffisant --> 
                <Viewport3D.Camera>
                    <PerspectiveCamera 
                            x:Name="Camera"
                            UpDirection="0,1,0"
                            LookDirection="-2,-2,-2"
                            Position="0,0,0" 
                            FieldOfView="100" >
     
                    </PerspectiveCamera>
                </Viewport3D.Camera>
                <ModelVisual3D>
                    <ModelVisual3D.Content>
                        <AmbientLight 
                                Color="White">
                        </AmbientLight >
                    </ModelVisual3D.Content>
                </ModelVisual3D>
                <!--le ModelVisualD est place  par defaut au centre du ViewPort-->
                <ModelVisual3D
                    x:Name="ModelA">
                    <ModelVisual3D.Content>
                        <GeometryModel3D 
                                Geometry="{Binding 
                                Source={StaticResource 
                                MySphereMeshGenerator}, 
                                Path=Geometry}">
                            <!--la sphere tourne-->
                            <GeometryModel3D.Transform>
                                <RotateTransform3D >
                                    <RotateTransform3D.Rotation>
                                        <AxisAngleRotation3D
                                                    x:Name="Rotate"
                                                    Axis="0,1,0"/>
                                    </RotateTransform3D.Rotation>
                                </RotateTransform3D>
                            </GeometryModel3D.Transform>
                            <!--la video est place sur un BackMaterial-->
                            <!--face interne-->
                            <GeometryModel3D.BackMaterial>
                                <DiffuseMaterial>
                                    <DiffuseMaterial.Brush>
                                        <VisualBrush>
                                            <VisualBrush.Visual>
                                                <MediaElement>
                                                    <MediaElement.Triggers>
                                                        <EventTrigger RoutedEvent="MediaElement.Loaded">
                                                            <EventTrigger.Actions>
                                                                <BeginStoryboard>
                                                                    <Storyboard>
                                                                        <MediaTimeline 
                                                                            x:Name="mediaTimeline"
                                                                            RepeatBehavior="Forever" />
                                                                    </Storyboard>
                                                                </BeginStoryboard>
                                                            </EventTrigger.Actions>
                                                        </EventTrigger>
                                                    </MediaElement.Triggers>
                                                </MediaElement>
                                            </VisualBrush.Visual>
                                        </VisualBrush>
                                    </DiffuseMaterial.Brush>
                                </DiffuseMaterial>
                            </GeometryModel3D.BackMaterial>
                        </GeometryModel3D>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
            </Viewport3D>
        </Grid>
        <Window.Triggers>
            <EventTrigger  
                RoutedEvent="FrameworkElement.Loaded">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation
                            Storyboard.TargetName="Rotate"
                            Storyboard.TargetProperty="Angle"
                            From="0" To="360" Duration="0:0:10"
                            RepeatBehavior="Forever">
                        </DoubleAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Window.Triggers>
    </Window>
    code-behind cs
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Shapes;
    using System.IO;
    namespace WpfSphereMeshGenerator
    {
        /// <summary>
        /// Logique d'interaction pour SphereMeshGeneratorMediaInto.xaml
        /// </summary>
        public partial class SphereMeshGeneratorMediaInto : Window
        {
            private string appPath = Directory.GetCurrentDirectory();
            public SphereMeshGeneratorMediaInto()
            {
                InitializeComponent();
            }
     
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                mediaTimeline.Source =
                    new Uri(appPath + @"\Resources\Bear.wmv");
            }
        }
    }
    J'ai un pris un movie d'un ours entrain de chasser des canards.....sur les bords de lac Ontario................
    Bon code.........

  3. #3
    Membre chevronné Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Par défaut
    Merci pour cette réponse aussi détaillée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Placer tous les liens à l'intérieur d'une div
    Par d10g3n dans le forum jQuery
    Réponses: 1
    Dernier message: 13/01/2010, 18h17
  2. Réponses: 2
    Dernier message: 26/11/2006, 11h51
  3. Rotation d une sphere
    Par venomelektro dans le forum DirectX
    Réponses: 4
    Dernier message: 24/01/2005, 00h28
  4. Réponses: 2
    Dernier message: 10/12/2004, 16h43
  5. Réponses: 6
    Dernier message: 03/03/2004, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo