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

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

原文地址:https://www.cnblogs.com/lonelyxmas/p/10799247.html

时间: 2024-08-07 05:30:04

WPF疑难杂症之一(3D场景)的相关文章

css3创建3D场景

浏览器本身是一个2维平面,对于3D的情况,实际上是增加了一个维度(深度),所以我们需要创建一个3D场景.这时浏览器不仅仅是一个平面了,更像是一个窗口,我们透过这个窗口去观察里面的三维世界.所谓的创建3D场景,就是告诉浏览器,我们是在这个窗口的哪个角度对这个3维世界进行观察,窗口里的3维物体距离这个窗口到底有多远. 设置好3D场景后,浏览器中的物体虽然已经变成是3维的了,但是如果我们不进行任何设置,他们看起来还是和二维的效果是一样的.所以我们需要使用一个新的属性 transform 来对这些元素进

wpf做的3d滑动gallery

原文:wpf做的3d滑动gallery wpf做的3d滑动gallery 随着iphone\ipad的流行及热捧,现在做移动产品不管是什么平台的,领导总想做成像ios系统的样子.自从微软发布了window8预览版之后,领导就想着把公司的移动产品移殖到window8上去了.公司的移动产品的主界面是做成3d gallery的立体画册效果的,如下图: window8是不带这样的控件的,究竟有没有实现如此效果的控件我就不清楚了,我认为是没有的,因为我在vs上找不到,也不符合window8风格,我找遍了互

Unity 弹出界面时屏蔽对3D场景的点击

注:这里的UI制作用的是NGUI插件 如题,在游戏中经常会遇到这种情况,场景中点击相关物体或者按钮弹出对应的2D界面,这时候除了2D界面上的可点击按钮等,应该屏蔽掉对3D场景的点击或者拖动事件. 在这里介绍两种方法: 1.对弹出的2D界面添加一个足够大的碰撞器,以覆盖整个屏幕: // 为道路信息面板添加碰撞器,以屏蔽弹出面板时鼠标对3D场景的点击事件 gameObject.AddComponent<BoxCollider>(); gameObject.GetComponent<BoxCo

Libgdx New 3D API 教程之 -- 加载3D场景的背后-第二部分

http://bbs.9ria.com/thread-221699-1-1.html 在本教程的第一部分,我们已经看过LibGDX 3D API中Model类的总体结构.在第2部分中,我们将会分析渲染管道,从加载模型开始,到真正的渲染模型.我们将不会在渲染管道的某个问题上进行深入探讨.我们只会介绍一些非常基本的内容,这是我觉得你使用3D API时,应该了解的. 在这一部分,我们要分析渲染究竟做了什么.明白我们在渲染时所做的事很重要.在前一部分本教程,我们已经看到,一个Model是由很多个Node

UI和3D场景同时都需要响应触摸事件

比如战斗场景,UI和3D场景同时都需要响应触摸事件,如果同时响应可能就会出现触摸UI的时候影响到了3D部分.为了解决这个问题在判断3D响应之前要先判断手指是否点击在UI上. 以前NGUI的时候都是自己来发送射线判断,现在UGUI好了系统提供了更为简便的方法. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #if UNITY_AN

OpenGL编程 基础篇(七)对象的变换——用实心体绘制3D场景

1.函数介绍 GLUT提供几种现成的对象,包括球体.圆锥体.圆环面.5个柏拉图立体,以及著名的茶壶.每个形状都可以作为一种线框的模型,也可以作为一种实心模型,每个面均已覆盖上材质. 以下列表是用于绘制这些对象的函数. void glutWireSphere(GLdouble radius, GLint slices, GLint stacks); 线框球 void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); 实心球

Ngui 五种点击事件实现方式及在3d场景中点透的情况

http://www.unity蛮牛.com/thread-22018-1-1.html ngui作为unity界面插件之一中,无疑是最好用,使用最多的了从自学unity到现在界面一直使用它 由于它的持续更新,我在此不得不说,确实很为开发者作想,为什么这么讲呢?大概在去年吧  当时用的那个版本已经不记得了,反正就是有个需求,要实现“无限循环”拖动,使用过以前ngui的人就知道当时是没有这个功能的,后来被自己弄出来没几天,就发现新版本中就自带了这样的东西,也就是如今ngui列子中的 Endless

WPF特效-实现3D足球效果

原文:WPF特效-实现3D足球效果 WPF 实现 3D足球效果,效果图如下: ?每个面加载不同贴图. <UserControl x:Class="MediaBalll.Model3Ds.BuckyBall"? ? ? ? ? ? ?xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"? ? ? ? ? ? ?xmlns:x="http://schemas.microsoft

WPF中的3D Wireframe

原文:WPF中的3D Wireframe WPF不支持画三维线,但开发人员提供了ScreenSpaceLines3D 类用于实现这个功能.我已经在程序中实现并成功显示3D Wireframe,并能够进行3D Solid和3D Wireframe的切换. 我在熟悉这个类的基础上,自己定义了3D Wireframe xml文件的格式,用于保存3D Wireframe数据. 格式如下: <Wireframe>? <ScreenSpaceLines3D??? Form="Generic