WPF疑难杂症之一(3D场景)

最近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解决问题(红色显示的代码)。现在感觉仍很是纳闷,真正的原因还有待进一步探索!

posted @ 2006-12-06 12:50 Yiling Lai 阅读(4087) 评论(14)  编辑 收藏 所属分类: WPFXAML

  回复  引用    
#1楼 2006-12-06 12:56 | 笨笨真笨 [未注册用户]
我也想学习WPF,
可以介绍一些书籍吗!

国内目前好像没有中文的相关书籍!
  回复  引用  查看    
#2楼 [楼主]2006-12-06 13:01 | Yiling Lai      
目前好像还没有中文书籍,我现在就靠MS的例子,SDK,MSDN Forum和Google Group
  回复  引用    
#3楼 2006-12-06 14:20 | gps [未注册用户]
好文,收藏了!
  回复  引用  查看    
#4楼 [楼主]2006-12-06 14:26 | Yiling Lai      
@gps
等忙完一段时间,再整理一些文章出来
  回复  引用    
#5楼 2006-12-06 14:38 | GASSNAKE [未注册用户]
实际开发?
兄弟真是超前啊
  回复  引用  查看    
#6楼 [楼主]2006-12-06 14:50 | Yiling Lai      
@GASSNAKE
为以后的OEM准备,算前期产品吧!:)
  回复  引用    
#7楼 2006-12-06 16:07 | feilng [未注册用户]
最好最成xbap,也嵌在这个页面,有.net 3.0的人就能看了
  回复  引用  查看    
#8楼 2006-12-06 23:26 | 一醉解千愁      
默认值?
  回复  引用  查看    
#9楼 2006-12-06 23:47 | Sheva      
我觉得你可以把两个图片合成一个图片然后将他作为3D模型的材料。这种方法也行可以解决你的问题,你可以通过如下方法来把两个图片合成一个图片:
<DrawingImage>
<DrawingImage.Drawing>
<DrawingGroup>
<ImageDrawing ImageSource="E:\2.jpg"/>
<ImageDrawing ImageSource="E:\2.jpg" Rect="0,0,60,60"/>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>

Sheva
  回复  引用  查看    
#10楼 [楼主]2006-12-07 08:35 | Yiling Lai      
@feilng
现在的程序还部方便发布出来,以后可以试试 :)
  回复  引用  查看    
#11楼 [楼主]2006-12-07 08:37 | Yiling Lai      
@一醉解千愁
偶现在还不知道是不是什么默认值的问题, 还需要和大家讨论 :)
  回复  引用  查看    
#12楼 [楼主]2006-12-07 08:37 | Yiling Lai      
@Sheva

谢谢你的方法,虽然DrawingGroup可以解决这个问题,但是多个图像合成后再进行3D变换在效果上有些问题,比如是PerspectiveCamera,变换后的图像并不是需要的效果,因为相机本身有一个渐进的变化过程,所以没有采取这个方法
  回复  引用    
#13楼 2007-02-28 13:49 | Wilfred Liu [未注册用户]
出现条纹是正常的,你试着把中间的小图向外移动一点,或者是直接改动材质再贴上去,就不会这样了,出现这种问题主要是因为三维坐标的精度还不够高。
  回复  引用    
#14楼 2007-02-28 14:02 | Yiling Lia [未注册用户]
@Wilfred Liu

谢谢!

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-12-29 08:52 编辑过


相关链接: