WPF疑难杂症之一(3D场景)
2006-12-06 12:50
211 查看
最近2个月一直在学习WPF,在实际的开发中遇到下面一个3D场景有关的问题,我先给出问题代码:
首先是在资源中定义了一个3D变换组:
<Window x:Class="Viewer3D.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Viewer3D"
<Window.Resources>
<!--Add a Transform resource-->
<Transform3DGroup x:Key="Trans3D">
//这里省略若干代码
</Transform3DGroup>
</Window.Resources>
然后建立一个Viewport3D,其中包含有多个的3D模型:(不包括红色代码)
<Viewport3D Name="View3D">
<!-- Add a camera. -->
<Viewport3D.Camera>
<PerspectiveCamera ....../>
</Viewport3D.Camera>
<!-- Add a model. -->
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup Transform="{StaticResource Trans3D}">
<AmbientLight Color="White"/>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions="-1 -1 0 1 -1 0 1 1 0 -1 1 0"
Normals="0 0 1 0 0 1 0 0 1 0 0 1"
TextureCoordinates="-1 1 0 1 0 0 -1 0"
TriangleIndices="0 1 2 0 2 3"/>
</GeometryModel3D.Geometry>
<!--添加一个3D模型 Material.-->
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush ImageSource="E:\2.jpg"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions="-0.5 -0.5 0 0.5 -0.5 0 0.5 0.5 0 -0.5 0.5 0"
Normals="0 0 1 0 0 1 0 0 1 0 0 1"
TextureCoordinates="0 0.5 0.5 0.5 0.5 0 0 0"
TriangleIndices="0 1 2 0 2 3"/>
</GeometryModel3D.Geometry>
<!--Add a image material.-->
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush ImageSource="E:\2.jpg"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
<GeometryModel3D.Transform>
<TranslateTransform3D
OffsetX="-0.2" OffsetY="0.1" OffsetZ="-0.5" >
</TranslateTransform3D>
</GeometryModel3D.Transform>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
我在场景中添加了两个图片,并给ModelGroup应用了资源中的3D变换。最后的效果如下:
但是这个效果图片中出现了一个非常奇怪的问题,大家可以看小图中有向左倾斜的条纹出现。这不是我期望的结果。最后通过多次的试验发现图像的TranslateTransform对此有影响,但是我上面的3D变换中没有用到TranslatsForm,只是使用了旋转变换和坐标大小的映射。最后不得已在GeometryModel3D添加了一个TranslatsForm解决问题(红色显示的代码)。现在感觉仍很是纳闷,真正的原因还有待进一步探索!
首先是在资源中定义了一个3D变换组:
<Window x:Class="Viewer3D.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Viewer3D"
<Window.Resources>
<!--Add a Transform resource-->
<Transform3DGroup x:Key="Trans3D">
//这里省略若干代码
</Transform3DGroup>
</Window.Resources>
然后建立一个Viewport3D,其中包含有多个的3D模型:(不包括红色代码)
<Viewport3D Name="View3D">
<!-- Add a camera. -->
<Viewport3D.Camera>
<PerspectiveCamera ....../>
</Viewport3D.Camera>
<!-- Add a model. -->
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup Transform="{StaticResource Trans3D}">
<AmbientLight Color="White"/>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions="-1 -1 0 1 -1 0 1 1 0 -1 1 0"
Normals="0 0 1 0 0 1 0 0 1 0 0 1"
TextureCoordinates="-1 1 0 1 0 0 -1 0"
TriangleIndices="0 1 2 0 2 3"/>
</GeometryModel3D.Geometry>
<!--添加一个3D模型 Material.-->
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush ImageSource="E:\2.jpg"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions="-0.5 -0.5 0 0.5 -0.5 0 0.5 0.5 0 -0.5 0.5 0"
Normals="0 0 1 0 0 1 0 0 1 0 0 1"
TextureCoordinates="0 0.5 0.5 0.5 0.5 0 0 0"
TriangleIndices="0 1 2 0 2 3"/>
</GeometryModel3D.Geometry>
<!--Add a image material.-->
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush ImageSource="E:\2.jpg"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
<GeometryModel3D.Transform>
<TranslateTransform3D
OffsetX="-0.2" OffsetY="0.1" OffsetZ="-0.5" >
</TranslateTransform3D>
</GeometryModel3D.Transform>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
我在场景中添加了两个图片,并给ModelGroup应用了资源中的3D变换。最后的效果如下:
但是这个效果图片中出现了一个非常奇怪的问题,大家可以看小图中有向左倾斜的条纹出现。这不是我期望的结果。最后通过多次的试验发现图像的TranslateTransform对此有影响,但是我上面的3D变换中没有用到TranslatsForm,只是使用了旋转变换和坐标大小的映射。最后不得已在GeometryModel3D添加了一个TranslatsForm解决问题(红色显示的代码)。现在感觉仍很是纳闷,真正的原因还有待进一步探索!
相关文章推荐
- WPF 3D模型 3D场景
- 使用WPF实现3D场景[一]
- wpf学习笔记-3D场景中的鼠标相应事件
- 使用WPF实现3D场景[二]
- WPF 3D 获取鼠标在场景的3d坐标
- Genesis-3D学习手册——4.创建场景
- WPF 3D 知识点大全以及实例
- Improving 3D performance in WPF
- WPF 3D模型的一个扩展方法
- WPF3D学习,立方体的绘制
- Unity 3D视频播放器场景C#脚本
- Genesis-3D学习手册——29.场景幕后资源工作流程
- 3DGIS第六章 北京奥林匹克公园三维场景网络发布应用
- WPF 3D中多个模型如何设置某一个在最前?
- WPF 3D Transparency Depth-Order Sorting
- Silverlight.XNA(C#)跨平台3D游戏研发手记:(十)3D 场景与控制设计①
- [Axiom 3D]3.SceneManager场景管理器
- 3d场景中的平面转2维平面
- 显示3D场景的类-GLSurfaceView
- 二、 创建3D场景的一般步骤