News
15 Nov WPF
Bij het testen van de huidige implementatie op verschillende computers bleek dat de everywhere display lang niet overal evengoed werkte. Een computer gaf zelfs een totaal onbegrijpbare abstracte vorm. Terwijl ik op zoek was naar de reden hiervoor ontdekte ik dat Managed DirectX eigenlijk al verouderd is, en niet meer onderhouden wordt. Het alternatief is nu Windows Presentation Foundation (wat intern eigenlijk ook een laag bovenop DirectX vormt.)
Ik heb dus beslist om de rendering engine te herschrijven en WPF in plaats van Managed DirectX te gebruiken. WPF werkt blijkbaar zelfs erg goed voor ons doel. Je kan elk Visual object als Brush gebruiken, zo is het mij gelukt om een tabblad als brush te gebruiken voor een 3d vlak. Hoewel lang niet alle low-level details van DirectX verborgen blijven, handelt WPF bijna alle details zelf af zodat het programmeren ook aangenamer blijft en de kans groter is dat het in een willekeurige opstelling werkt.
<Window x:Class="WpfApplication1_TEST.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Projector 2" Height="314" Width="338">
<Window.Background>
<SolidColorBrush Color="black" />
</Window.Background>
<Viewport3D Name="mainViewport" ClipToBounds="True">
<!-- Camera: huidige positie in de ruimte -->
<Viewport3D.Camera>
<PerspectiveCamera
FarPlaneDistance="100"
LookDirection=".2,1,0"
UpDirection="0,0,1"
NearPlaneDistance="1"
Position="0,0,0"
FieldOfView="90" />
</Viewport3D.Camera>
<!-- Wit licht (noodzakelijk, anders wordt alles zwart) -->
<ModelVisual3D>
<ModelVisual3D.Content>
<AmbientLight Color="White" />
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Ons rechthoekige oppervlak -->
<ModelVisual3D>
<ModelVisual3D.Content>
<GeometryModel3D>
<!-- Het model: coordinaten, normalen en texture mappings -->
<GeometryModel3D.Geometry>
<MeshGeometry3D>
<MeshGeometry3D.Positions>
<Point3D X="-5" Y="10" Z="-5" />
<Point3D X="5" Y="10" Z="-5" />
<Point3D X="5" Y="10" Z="5" />
<Point3D X="-5" Y="10" Z="5" />
</MeshGeometry3D.Positions>
<MeshGeometry3D.Normals>
<Vector3D X="0" Y="10" Z="0" />
<Vector3D X="0" Y="10" Z="0" />
<Vector3D X="0" Y="10" Z="0" />
<Vector3D X="0" Y="10" Z="0" />
<Vector3D X="0" Y="10" Z="0" />
<Vector3D X="0" Y="10" Z="0" />
</MeshGeometry3D.Normals>
<MeshGeometry3D.TriangleIndices>
0,1,2 0,2,3
</MeshGeometry3D.TriangleIndices>
<MeshGeometry3D.TextureCoordinates>
<Point X="0" Y="1" />
<Point X="1" Y="1" />
<Point X="1" Y="0" />
<Point X="0" Y="0" />
</MeshGeometry3D.TextureCoordinates>
</MeshGeometry3D>
</GeometryModel3D.Geometry>
<!-- Het 'materiaal' -->
<GeometryModel3D.Material>
<MaterialGroup>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush>
<VisualBrush.Visual>
<TabControl>
<TabPanel>
<TextBlock>Content of tabpage 1</TextBlock>
</TabPanel>
<TabPanel>
<TextBlock>Content of tabpage 2</TextBlock>
</TabPanel>
</TabControl>
</VisualBrush.Visual>
</VisualBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
<!-- Het volgende zou een afbeelding op dat vlak tonen -->
<!--
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush TileMode="None" Stretch="Fill" Viewport="0,0,1,1">
<VisualBrush.Visual>
<Image Source="test.png" />
</VisualBrush.Visual>
</VisualBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
-->
</MaterialGroup>
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</Window>

Comments