2010-08-25 2 views
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> 

Вопрос о WPF. Размер в Viewport3D

Я пытаюсь построить 2-боковое окно с помощью Viewport3D. Но потом у меня были проблемы с размером.

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

Я хочу, чтобы это изображение было того же размера, что и исходное изображение.

Ни указанное значение, ни «авто» не будут работать.

Как я могу получить то, что хочу?

ответ

2

Мое знание 3d ограничено, и кто-то может ответить на это лучше, но в 3D-среде размер объекта зависит от множества вещей. Положение камеры, ближняя/дальняя плоскость, размер/расположение объект, преобразовывается к этому объекту, размер видового экрана и, возможно, другие вещи, которые я забываю. 3D-движок учитывает все вещи при рендеринге вещей. Установка размера изображения - всего лишь одна его часть.

Возможно, попробуйте возиться с позицией камеры или добавить в изображение изображение с масштабированием.

+0

Спасибо. Пройдя несколько документов несколько часов назад, я тоже это понял. Но я не нашел, как рассчитать коэффициент масштабирования. Надеюсь, кто-то может мне помочь. До этого я собираюсь попытаться получить соотношение путем эксперимента. – MaoWoo

1

То, что вы ищете, это the projection matrix of the camera. Эта матрица преобразует трехмерную точку в двумерную точку. Таким образом, передавая 3D-координаты MeshGeometry3D, вы можете найти 2D-координаты и размеры.