LoginSignup
0
1

More than 5 years have passed since last update.

RectangleVisual3Dに画像を貼り付ける方法

Posted at

概要

HelixToolkitは、オブジェクトに対してマテリアルとして画像を貼ることができます。
貼る方法の備忘録です。

XAMLで指定する方法

XAMLで、RectangleVisual3Dに画像を貼り付ける方法は、下記のとおりとなります。
画像は何故か90度転倒した状態で表示されるためRotateTransformを使って補正しています。
カメラ位置の問題かとも思ったのですが、ViewCubeの表示からすると正しいようなので、画像の方で対応しています。

<Window x:Class="HelixToolkitTestSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:helix="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf"
        Title="MainWindow"
        Width="800"
        Height="600"
        Background="Black">

    <Grid>
        <helix:HelixViewport3D x:Name="viewport3d"
                               ShowCameraInfo="True"
                               ShowViewCube="True">
            <!--  カメラ  -->
            <helix:HelixViewport3D.DefaultCamera>
                <PerspectiveCamera FieldOfView="45"
                                   LookDirection="0.0,0.0,-122.334"
                                   NearPlaneDistance="0.125"
                                   Position="0.966,0.831,68.597"
                                   UpDirection="0.0,1.0,0.0" />
            </helix:HelixViewport3D.DefaultCamera>
            <!--  光源  -->
            <helix:SunLight />

            <helix:RectangleVisual3D Width="30" Length="40">
                <helix:RectangleVisual3D.Material>
                    <DiffuseMaterial>
                        <DiffuseMaterial.Brush>
                            <ImageBrush ImageSource="pack://application:,,,/Images/grayscale28.jpg">
                                <ImageBrush.Transform>
                                    <RotateTransform CenterX="0.5" CenterY="0.5" Angle="90" />
                                </ImageBrush.Transform>
                            </ImageBrush>
                        </DiffuseMaterial.Brush>
                    </DiffuseMaterial>
                </helix:RectangleVisual3D.Material>
            </helix:RectangleVisual3D>
        </helix:HelixViewport3D>
    </Grid>
</Window>

RectangleVisual3D画像貼り付け.png

コードビハインドで指定する方法

DiffuseMaterialクラスを使って、画像を指定する方法は一緒です。
HelixToolkitには、MaterialHelperクラスというユーティリティクラスが用意されておりMaterialHelper.CreateImageMaterialメソッドなどを利用すると簡単にBitmapImageをマテリアルへ変換する事ができます。

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var image = new BitmapImage(new Uri("pack://application:,,,/Images/grayscale28.jpg"));
            var brush = new ImageBrush(image);

            brush.Transform = new RotateTransform(90, 0.5, 0.5);

            var material = new DiffuseMaterial(brush);
            var rect = new RectangleVisual3D() { Width = 30, Length = 40, Material = material };

            viewport3d.Children.Add(rect);
        }
    }
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1