https://blog.csdn.net/bcbobo21cn/article/details/109697065

1 从坐标系看相机

从坐标系看一下相机;右手是X正向,Y正方向是向上;这是WPF;各种3D平台的坐标系是否一样不知道;

相机在 0 0 15;

如果相机上移,相机y坐标增大,看到的物体应朝下;如下;

前面两个图物体都下移了;

如果相机右移,增大x坐标,图形应右移;如下;

2 裁剪

概念图如下;

Camera Space 相机空间
View Frustum  视锥体
Clip-Colume Space

剪裁空间(Clip Space)

视锥体(frustum)裁剪
视锥体(frustum),是指场景中摄像机的可见的一个锥体范围。它有上、下、左、右、近、远,共6个面组成。在视锥体内的景物可见,反之则不可见。为提高性能,只对其中与视锥体有交集的对象进行绘制。

ProjectionCamera 的 NearPlaneDistance 和 FarPlaneDistance 属性限制照相机的投影范围。由于照相机可以位于场景中的任何位置,因此照相机实际上可能会位于模型内部或者紧靠模型,这使正确区分对象变得很困难。 通过 NearPlaneDistance,可以指定一个距离照相机的最小距离,超过该距离后即不绘制对象。 相反,使用 FarPlaneDistance,可以指定一个距离照相机的距离(即,在超过该距离后将不绘制对象),从而确保因距离太远而无法识别的对象将不包括在场景中。

裁剪属性的说明见此;

https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.media.media3d.viewport3dvisual.clip?view=net-5.0
Viewport3DVisual.Clip 属性

初步使用一下裁剪相关属性,代码和效果如下;

3 光线入门

在前面,前一文的代码中看到;画刷一直都是红色,<DiffuseMaterial Brush="Red"/>;但是绘制出的面都是黑色;为什么?

这是在3D场景中,光线默认为0;没有光线,所以看到的任何都是黑色;

下面把画刷改为绿色;再增加光线;如下一段;

<ModelVisual3D x:Name="light">
                    <ModelVisual3D.Content>
                        <AmbientLight></AmbientLight>
                    </ModelVisual3D.Content>
                </ModelVisual3D>

然后画刷绘制的颜色出来了;

也可以设置光线的颜色;

<Pagexmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><Grid>  <Viewport3D><Viewport3D.Camera><PerspectiveCamera Position="5,1,15" x:Name="camera"></PerspectiveCamera></Viewport3D.Camera><Viewport3D.Children><ModelVisual3D><ModelVisual3D.Content><Model3DGroup ><GeometryModel3D><GeometryModel3D.Material><DiffuseMaterial Brush="Green"/></GeometryModel3D.Material><GeometryModel3D.Geometry><MeshGeometry3D Positions="0,0,0 2,0,0 2,2,0 0,2,0" TriangleIndices="0,1,2 0,2,3"></MeshGeometry3D></GeometryModel3D.Geometry></GeometryModel3D></Model3DGroup></ModelVisual3D.Content>         </ModelVisual3D>                <ModelVisual3D x:Name="light"><ModelVisual3D.Content><AmbientLight Color="#007F7F7F"></AmbientLight></ModelVisual3D.Content></ModelVisual3D>                </Viewport3D.Children></Viewport3D>        </Grid>
</Page>

WPF 3D 基础学习 - 相机、裁剪、光线入门(2)相关推荐

  1. WPF 3D基础学习 - 画布、相机、Model3D(1)

    如果绘制3D立方体,需绘制6个面:下面代码绘制一个面:来逐步理解此代码: <Pagexmlns="http://schemas.microsoft.com/winfx/2006/xam ...

  2. python教学视频k_GitHub - y000k/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...

    PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...

  3. python入门教材论坛_Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...

    PythonShare ============= *Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐* ------------------------ 本文 ...

  4. python入门教材论坛_GitHub - aisuhua/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...

    PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...

  5. 零基础学习C语言如何入门(内附工具书推荐+视频教程)

    C语言同C++.Python等都是通用性的编程语言,它们不针对某一个特定的方向,能做的事情很多.C语言主要用于底层开发,Windows.Linux.Unix 等操作系统的内核90%以上都使用C语言开发 ...

  6. python零基础自学英语软件下载_GitHub - geniux-TI/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...

    PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...

  7. python教程1009python教程_GitHub - gyl1009/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...

    PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...

  8. 廖python入门视频_GitHub - aisuhua/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...

    PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...

  9. python go 入门_GitHub - gochao/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...

    PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...

最新文章

  1. c语言日期星期程序,C语言程序设计: 输入年月日 然后输出是星期几
  2. 虚拟机的联网模式正确的选择
  3. maven引用公共包_Maven项目怎样引用其他项目/或者jar包-阿里云开发者社区
  4. Html5 Canvas斗地主游戏
  5. 简化java_JAVA之旅-简化java开发
  6. html登陆l判断,html作业登陆界面
  7. element ui el-carousel 滚动图 vue 基于vue-lazyload图片懒加载、延迟加载 解决方案
  8. 为什么单独循环中的元素加法比组合循环中的要快得多?
  9. visio各版本下载
  10. hp刀片服务器性能分析,IBM刀片服务器与高性能计算-20210723075634.ppt-原创力文档...
  11. PayPal支付流程
  12. 怎么解决ZBrush保存历史记录太多问题
  13. 重装战姬服务器正在维护,《重装战姬》4月23日更新维护公告
  14. 二十一、从句_非限定性定语从句
  15. 泽塔云:用超融合撑起软件定义数据中心的梦想
  16. js控制form提交的action
  17. maya 白天室内灯光_maya 灯光怎么打?
  18. CE认证电气间隙和爬电距离要求
  19. excel----检验
  20. Android面试题和答案

热门文章

  1. delphi 读取ini所有项_财务机器人真的会代替财务人员所有工作吗?
  2. 微信小程序使用高德地图API获取准确定位地址描述
  3. vue中slot(插槽)详解,slot、slot-scope和v-slot
  4. shiro的用户认证
  5. Create an Apex class that returns contacts based on incoming parameters
  6. 自定义Realm实现认证
  7. jQuery中的slideUp()、slideDown()、hide()、show()
  8. mysql实现汉字转拼音
  9. 每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现
  10. 用两个栈(C++)实现插入排序