WPF3.5の新機能④ UIElement3D その2

UIElement3D にはもうひとつ大きな利点があります。UIElement3DにはOnModelUpdateとInvalidateModelメソッドがあり、これによりデータバインディングを使ったモデルの修正が可能になりました。 これまで、WPF 3D の限界に挑戦するとき、新しい ModelVisual3D  を作成して、古いものと入れ替えるという戦略をとってきました。これは描画中の ModelVisual3D を修正する手段がなかったからです。しかし、UIElement3D を使えば描画中のモデルを修正できるので、このような入れ替えは必要なくなりました。UIElement3D は、以前紹介したWPFでの環境マッピングやモーフィングなどにも適用できるはずです。SDK の中に UIElement3D Sphere のサンプルがありますので参照してください。 例えば、スキニングを行うとき WPF 3.0 ではスライダのコールバックを次のように記述していました。 private void SliderMoved(object sender, RoutedEventArgs e) {     myScene.Children.Clear();      ModelVisual3D myMV3D = new ModelVisual3D();      myMV3D.Content =        (Model3D)CreateModel3D(mySlider.Value, 0.0);     myScene.Children.Add(myMV3D);  }   しかし、WPF 3.5 ではCylinderクラスを作成し、そこに一方の角度を表わすAngle依存プロパティを設定し、スライダの値をAngleにデータバインディングさせれば、このようなコールバックを作成する必要がありません。Windows1.xaml.cs にはなにも追加せずに、Cylinderクラスを利用することができます。よりオブジェクト指向的なプログラミングができるようになったと言ってしまえばそれまでですが…   XAML の記述 <Slider Width=“300” Maximum=“60”       …

1

WPF3.5の新機能③ UIElement3D その1

これまでVisual3D の派生クラスは ModelVisual3D だけでしたが、3.5では次の図のように新しくUIElement3D と Viewport3DVisula2D が加わりました。今回は UIElement3D を紹介します。 UIElement3D では2DのUIElementと同じように、マウスクリックやマウスオーバーのようなイベントをハンドリングできます。以前説明したように、3.0では3Dオブジェクトがクリックされたとき、どのオブジェクトが選択されたかどうかを処理するヒットテストを自分でコーディングする必要がありました。WPF 3.5ではModelVisual3Dの代わりにContainerUIElement3DかModelUIElement3Dを使い、その要素内にイベントハンドラを定義し、コードビハインドにコールバック関数を実装するだけで2Dと同じようなイベントハンドリングが可能になっています。 Visual Studio 2008のサンプルに「Handling Events in 3-D Sample」があります。これは2つの立方体(ModelUIElement3D)をクリックすると立方体の色が代わり、上の階層のシーン(ContainerUIElement3D)が回転します。ルーティングイベントもサポートされていることをデモしています。XAMLの一部と対応するコールバックを以下に示します。 <ModelUIElement3D MouseDown=“Cube1MouseDown”>  <ModelUIElement3D.Transform>   <TranslateTransform3D OffsetZ=“1.5” />  </ModelUIElement3D.Transform>  <ModelUIElement3D.Model>   <GeometryModel3D Geometry=”{StaticResource CubeMesh}”>    <GeometryModel3D.Material>     <DiffuseMaterial x:Name=“cube1Material” Brush=“Blue” />    </GeometryModel3D.Material>   </GeometryModel3D>  </ModelUIElement3D.Model> </ModelUIElement3D>   private void Cube1MouseDown(object sender, MouseButtonEventArgs e)  {     cube1Material.Brush =       (cube1Material.Brush == Brushes.Blue) ?…

1

VS 2008 用の Silverlight 1.0 テンプレート

Silverlight 1.1 Alpha for Visual Studio 2008 のことはお知らせしましたが、 Silverlight 1.0 のスタートアップやテンプレートはどこにあるのか?という質問をいただきました。 実は、同じツールをインストールするとSilverlight 1.0 をテンプレート付きで作成できます。次のように新規作成します。 File => New => Web Site => Silverlight Script Web  File => New => Project… に行ってしまうと見つからないので、注意してください。


WPF3.5の新機能② SoundPlayerAction

WPF 3.5 では軽量なサウンド再生プレーヤとして、SoundPlayerAction が追加されました。 しかし、これは、MediaElementのように音楽再生に使うようなものではなく、EventTrigger に対する応答性を向上させた反応音のようなものに使うプレーヤです。MediaElement が FrameworkElement を継承しているのと違って、SoundPlayerAction は TriggerAction の派生クラスです。 SDK にある Media Gallary サンプルの「Sound from User Event Sample」タブは、EediaElement + Storyboard と SoundPlayerAction が比較できるサンプルです。SoundPlayerAction は次のように EventTrigger 内で使います。 <Page xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”   xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” >   <Page.Triggers>     <EventTrigger RoutedEvent=”Button.Click”         SourceName=”clickButton”>       <EventTrigger.Actions>         <SoundPlayerAction Source=”media\lowbat.wav”/>       </EventTrigger.Actions>     </EventTrigger>     <EventTrigger RoutedEvent=”Button.MouseEnter”        SourceName=”hoverButton”>      …


WPF3.5の新機能①レイヤーウィンドウの高速化

Visual Studio 2008 のリリースと同時に .NET Framework 3.5 もリリースされました。これに伴い Windows Presentation Foundation にもいくつかの新機能が追加されました。その新機能を紹介していきます。 まず、レイヤーウィンドウがハードウェア レンダリングされるようになりました。レイヤーウィンドウというのはフレーム枠なして背景を透明にして描画するものです。WPF 3.0 ではレイヤーウィンドウはソフトウェア レンダリングだったため、CPU負荷が高く動作が遅くて使い出がよくありませんでした。しかし、WPF 3.5 ではレイヤーウィンドウがハードウェア レンダリングになったので、かなりサクサク動くようになりました。 特筆すべきは、WPF 3.0 でビルドしたアプリもこの恩恵を受けることです。つまり、WPF 3.0 でビルドしたレイヤーウィンドウのアプリを WPF 3.5 ランタイムの環境(つまり Vista SP1 など)で動かせれば、ハードウェア レンダリングで高速に動作するようになります。 私のテスト結果では、以前紹介したことのあるレイヤーウィンドウでティーポットがくるくる回るアプリが、Windows Vista の新しいデスクトップ (Core2 2.4GHz GeForce8800) では 16fps だったのが、Windows Vista SP1 RC1 の少し前のノートPC (PentiumM 2.2GHz, Mobility Radeon X800XT) で59fps になりました。Perforator の結果を紹介します、FrameRateを見てください。 Widows Vista…

3

Silverlight 1.1 Tools Alpha for Visual Studio 2008

先日リリースされた Visual Studio 2008 (RTM) 用の Silverlight 1.1 Alpha の Tools が公開されました。特に Sivlerlight 1.1 Alpha の中身が変わったわけではなく、すでにあった VS 2008 Beta2 用の tools の VS 2008 RTM 対応版ということです。


3D プリミティブ XAML ファイル

WPF で使える 3D プリミティブ(例えば球など)を持っていると、簡単な 3D シーンを作るとき使い回しができるので便利です。私は ResourceDictionary として MeshGeometry3D を定義したファイルを作って使っています。球と円錐と円柱と立方体のプリミティブ ファイルを公開しますので、ダウンロードしてお使いください。 使い方は、プロジェクトエクスプローラで[追加]→[既存の項目]で、プリミティブのxamlファイル(例えばsphere.xaml)を追加してから、Windows1.xaml などの Resource 中で次のように定義します。   <Window.Resources>     <ResourceDictionary>       <ResourceDictionary.MergedDictionaries>         <ResourceDictionary  Source=”sphere.xaml” />       </ResourceDictionary.MergedDictionaries>      </ResourceDictionary>   </Window.Resources> そして、Viewport3D 内の ModelVisual3D で次のように使います。 <ModelVisual3D x:Name=”myScene”>   <ModelVisual3D.Content>      <GeometryModel3D Geometry=”{StaticResource mySphere}” >         <GeometryModel3D.Material>            <DiffuseMaterial Brush=”Red” />         </GeometryModel3D.Material>      </GeometryModel3D>    </ModelVisual3D.Content> </ModelVisual3D> Primitives.zip


WPF Designer on VS 2008

11月20日に Visual Studio 2008 (英語版)が RTM になり、MSDN でダウンロードできるようになりました。 以前、WPF for .NET Framework 3.5 の機能については紹介しましたが、Visual Studio 2008 では これまで遅くてすぐ Oops が出て表示できなくなるので使い物にならなかった、WPF Designer (以前 Cider と呼ばれていました)がかなり使えるものになっています。Tools からコンポーネントを選んでドラッグ&ドロップも軽快ですし、ダブルクリックすればコードビハインド側にコールバックも自動生成してくれます。さすがに Viewport3D はToolbox にありませんでしたが… ぜひお試しください。


Blend Book

WPF関連の本がいくつか出ています。ざっと見ただけでも… WPF 3D プログラミング 赤坂 玲音 著 工学社 ISBN9784777512850 Windows Presentation Foundation プログラミング入門 大西 武 著 秀和システム ISBN9784798016375 エッセンシャル WPF Chris Anderson著 翔泳社 ISBN9784798114200 Blend Book  セカンドファクトリー著 翔泳社 ISBN9784798114866 その中で異色の本が Blend Book です。もちろん Expression Blend と WPF について書かれているのですが、前半の第1章では、ソフトウェアやWebにおけるユーザーエクスペリエンスの必要性、ユーザーエクスペリエンスを構築するためのプロセス・組織などが実践的に書かれています。こういう内容は見逃されがちですが、WPFやSilverlightが目指しているリッチなユーザーエクスペリエンスの実現のために、技術的議論の前に必要な(デザイナだけではなく)プログラマにも役立つ情報だと思います。


DirectX SDK Novermber 2007

DirectX SDK November 2007 が公開されました。 主に更新されたのはXAudio2 ベータを含むAudio系の内容ですが、Direct3D に次の3つの新しいサンプルが追加されました。 AdvancedParticle サンプルは環境と相互作用するパーティクル システムを示します。このシステムは完全に GPUで管理されています。 GPUBoids サンプルは完全に GPU で管理された群れ (flocking) アルゴリズムを示します。 NBodyGravity サンプルは完全に GPU で管理された N体パーティクル システムを示します。

1