views:

50

answers:

1
<Window x:Class="Viewport2DVisual3DExample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Button on 3D"  
    WindowStyle="None"
    Background="{x:Null}"
    Foreground="{x:Null}"
    AllowsTransparency="True"
    >

    <Viewport3D>
        <Viewport3D.Camera>
            <PerspectiveCamera Position="0, 0, 4"/>
        </Viewport3D.Camera>

        <!-- Front -->
        <Viewport2DVisual3D>
            <!-- Give the plane a slight rotation -->
            <Viewport2DVisual3D.Transform>
                <RotateTransform3D>
                    <RotateTransform3D.Rotation>
                        <AxisAngleRotation3D x:Name="frontTransform" Angle="0" Axis="0, 1, 0" />
                    </RotateTransform3D.Rotation>
                </RotateTransform3D>
            </Viewport2DVisual3D.Transform>

            <!-- The Geometry, Material, and Visual for the Viewport2DVisual3D -->
            <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" Brush="White"/>
            </Viewport2DVisual3D.Material>

            <!-- Here Here Here Here Here  -->
            <Image Source="i:\\tempa\\tm.png" Width="534" Height="458" />

    </Viewport2DVisual3D>

        <!-- Back -->
        <Viewport2DVisual3D>
            <!-- Give the plane a slight rotation -->
            <Viewport2DVisual3D.Transform>
                <RotateTransform3D >
                    <RotateTransform3D.Rotation>
                        <AxisAngleRotation3D x:Name="backTransform" Angle="180" Axis="0, 1, 0" />
                    </RotateTransform3D.Rotation>
                </RotateTransform3D>
            </Viewport2DVisual3D.Transform>

            <!-- The Geometry, Material, and Visual for the Viewport2DVisual3D -->
            <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" Brush="White"/>
            </Viewport2DVisual3D.Material>

            <Button Name="btnBack">Back</Button>
        </Viewport2DVisual3D>

        <ModelVisual3D>
            <ModelVisual3D.Content>
                <DirectionalLight Color="#FFFFFFFF" Direction="0,0,-1"/>
            </ModelVisual3D.Content>
        </ModelVisual3D>

    </Viewport3D>

I am trying to build a 2-Side window using Viewport3D. But then I had some trouble about size.

                <!-- Here Here Here Here Here  -->
            <Image Source="i:\\tempa\\tm.png" Width="534" Height="458" />

I want this Image to be the exact same size as its source image.

Neither a specified value or "auto" would work.

How can I get what I want?

A: 

My 3d knowledge is limited and someone can probably answer this better, but in a 3d environment, the size of an object is dependent on a lot of things.. camera position,near/far plane, the size/location of the object, transforms applied to that object, viewport size, and probably other stuff I'm forgetting. The 3d engine takes all the stuff into account when rendering stuff. Setting the size of the image is just one piece of it.

Maybe try messing with the camera position or adding a scaletransform to the image.

mdm20
Thanks. After going through some document a few hours ago, I realized that too. But I haven't found how to calculate the scale ratio. I hope someone can help me with that. Before that, I am going to try get the the ratio by experiment.
MaoWoo