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

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

  1. 使用WPF实现3D场景[二]

    原文:使用WPF实现3D场景[二] 在上一篇的文章里我们知道如何构造一个简单的三维场景,这次的课程我将和大家一起来研究如何用代码,完成对建立好了的三维场景的观察. 首先看一下DEMO的界面:     ...

  2. 使用WPF实现3D场景[一]

    原文:使用WPF实现3D场景[一] 在这篇文章里,将介绍如何实现一个简单的三维场景,一个三维的空间,包括空间内的三维物体的组合. 首先介绍一下一个三维场景里的基本元素: 先是定义一个简单的三维的场景环 ...

  3. WPF中的3D特性和常见的几个类

    原文:WPF中的3D特性和常见的几个类 WPF 3D 常用的几个类及其关系 1.  Visual 类      所有二维可视化元素的基类,为 WPF 中的呈现提供支持,其中包括命中测试.坐标转换和边界 ...

  4. 3D场景中的鼠标响应事件

    原文:3D场景中的鼠标响应事件 今天要讲的是3D场景中的鼠标响应事件的处理,首先Button的响应是大家熟知的,只要加上一个click事件,然后写一个响应的处理时间就行了.对于二维平面上的一些控件也很 ...

  5. 在WPF中添加3D特性

    原文:在WPF中添加3D特性 35.4  在WPF中添加3D特性 本节介绍WPF中的3D特性,其中包含了开始使用该特性的信息. 提示: WPF中的3D特性在System.Windows.Media.M ...

  6. OSG 3D场景渲染编程概述

    OSG是Open Scene Graphic的缩写,是基于C++平台的使用OpenGL技术的开源3D场景开发. vs环境安装或者是在Ubuntu中环境的安装网上教程很多,都是大同小异的,认真操作容易成 ...

  7. Python>>>创建一个简单的3D场景

    首先安装PyOpengl pip install PyOpenGL PyOpenGL_accelerate

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

    比如战斗场景,UI和3D场景同时都需要响应触摸事件,如果同时响应可能就会出现触摸UI的时候影响到了3D部分.为了解决这个问题在判断3D响应之前要先判断手指是否点击在UI上. 以前NGUI的时候都是自己 ...

  9. Seen.js – 使用 SVG 或者 Canvas 渲染 3D 场景

    Seen.js 渲染3D场景为 SVG 或者 HTML5 画布.Seen.js 包含对于 SVG 和 HTML5 Canvas 元素的图形功能的最简单的抽象.所有这个库的其它组件都是不用关心将要渲染的 ...

随机推荐

  1. 整体二分(模板) 求区间第k小

    整体二分,将询问与初值一起放入一个结构体里,然后每次二分判断询问在哪边,树状数组维护,时间复杂度O((n+Q)lognlogMAX_a[i] 代码 #include<iostream> # ...

  2. jeecms9自定义标签以及使用新创建的数据库表

    转载 https://blog.csdn.net/nice_meng/article/details/89179089 本系统使用的是jeecmsv9版本,收集网上知识后,进行个人汇总 首先,自己创建 ...

  3. https方式nginx 代理tomcat访问不带www的域名301重定向跳转到www的域名帮助seo集中权重

    比如我要把 http://gucanhui.com http://www.gucanhui.com 跳转到https://www.gucanhui.com 用F12的network可以看到状态码301 ...

  4. 洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes【取回文数/数论/字符串】

    题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 <= a < b <= 100,000 ...

  5. springMVC--动态验证码实现

    在网站开发过程中我们一般都会为了防止用户连续提交都会提供验证码的功能,简单来说就是生成一个动态图片,在图片中保存一些校验信息,将校验信息放到session中和用户提交的验证码信息进行对比,如果出现错误 ...

  6. 二零一七年工作中常用的基本Linux命令记录(Ubuntu)

    Linux命令如下(Ubuntu): 1. apt-get install openssh-server 下载远程工具 2. apt-get install lrzsz 上传下载工具 3. apt-g ...

  7. JSP-request(httpServletRequest)

    HttpServletRequest 1 HttpServletRequest概述 2 request运行流程 3 通过抓包工具抓的http请求 4 请求行信息的相关方法 //1.获得请求方式 Str ...

  8. Leetcode77. Combinations组合

    给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3] ...

  9. 【CS Round #44 (Div. 2 only) A】Frequent Numbers

    [链接]h在这里写链接 [题意] 在这里写题意 [题解] 大水题 [错的次数] 0 [反思] 在这了写反思 [代码] /* */ #include <cstdio> #include &l ...

  10. oracle -视图 序列 约束

    1.视图 视图是基于一个或者多个表数据库对象,视图允许用户创建一个无数据的”伪表“,视图只是一个获取特定列好行的sql查询组成,通过视图检索数据就像从表中检索数据 一样. 视图可以提供一个附加的安全层 ...