WPF 3D текстуры с альфа каналом - PullRequest
4 голосов
/ 03 июня 2009

С WPF 3D возможно ли иметь текстуру с альфа-каналом?

Я хочу сделать трехмерную сцену, где все плоские поверхности (как будто все вырезы для бумаги). Я думал, что самый простой способ добиться этого - создать плоскость, разделить ее на несколько треугольников (например, ткань), а затем применить текстуру с прозрачным фоном. Таким образом, я мог бы использовать ту же геометрию и просто поменять текстуру, чтобы получить совершенно разные формы.

Я пытался добавить PNG с прозрачным фоном к модели в качестве кисти, но он отображается с белым фоном. Предоставляет ли WPF 3D эту функциональность? как это можно сделать?

Ответы [ 2 ]

5 голосов
/ 20 июня 2009

текстура с альфа работает в wpf (у меня работает!). Вы уверены, что с вашей альфа-версией в порядке?

PNG с альфа в DiffuseMaterial и все, что вам нужно. вот кусок xaml с камерой над двумя текстурированными плоскими сетками.

замените путь png, поместите его в файл xaml и запустите. Вы должны быть в состоянии видеть материал2 за альфой материала1.

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="640.0" Height="480.0"   >
  <Grid.Resources>
    <MeshGeometry3D x:Key="Mesh" Positions="-4.999,-4.999,0.001 5.001,-4.999,0.001 -4.999,5.001,0.001 5.001,5.001,0.001 " TriangleIndices="2 0 3  1 3 0  " TextureCoordinates="0,0 1,0 0,1 1,1 "  />

      <DiffuseMaterial x:Key="material1" >
        <DiffuseMaterial.Brush>
          <ImageBrush ImageSource="C:\mypng.png" Transform="1,0,0,-1,0,1" />
        </DiffuseMaterial.Brush>
      </DiffuseMaterial>

      <DiffuseMaterial x:Key="material2" >
        <DiffuseMaterial.Brush>
         <ImageBrush ImageSource="C:\image_4.png"  Transform="1,0,0,-1,0,1"  />
        </DiffuseMaterial.Brush>
      </DiffuseMaterial>

  </Grid.Resources>
  <Viewport3D Width="640.0" Height="480.0" >
    <Viewport3D.Camera>
      <PerspectiveCamera  Position="0,0,20"/>
    </Viewport3D.Camera>

    <ModelVisual3D>
      <ModelVisual3D.Content>
        <Model3DGroup >

            <AmbientLight />

            <GeometryModel3D Geometry="{StaticResource Mesh}" Material="{StaticResource material2}">
             <GeometryModel3D.Transform>
              <MatrixTransform3D Matrix="1.0,0.0,0.0,0,0.0,1.0,0.0,0,0.0,0.0,1.0,0,0.0,0.0,-5.0,1" />
            </GeometryModel3D.Transform>
            </GeometryModel3D>

            <GeometryModel3D Geometry="{StaticResource Mesh}" Material="{StaticResource material1}">
            <GeometryModel3D.Transform>
              <MatrixTransform3D Matrix="1.0,0.0,0.0,0,0.0,1.0,0.0,0,0.0,0.0,1.0,0,0.0,0.0,0.0,1" />
            </GeometryModel3D.Transform>
            </GeometryModel3D>

        </Model3DGroup>
      </ModelVisual3D.Content>
    </ModelVisual3D>
  </Viewport3D>
</Grid>
2 голосов
/ 13 июня 2011

Можно использовать текстуру с альфа-каналом, хотя WPF плохо с этим справляется. Я сделал то же самое, что и вы, и получил такой же белый фон. Это связано с тем, что вы должны отображать свои геометрические модели в z-порядке. Снизу вверх.

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

...