WPF 3D 基础学习 - 相机、裁剪、光线入门(2)
接
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)相关推荐
- WPF 3D基础学习 - 画布、相机、Model3D(1)
如果绘制3D立方体,需绘制6个面:下面代码绘制一个面:来逐步理解此代码: <Pagexmlns="http://schemas.microsoft.com/winfx/2006/xam ...
- python教学视频k_GitHub - y000k/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...
- python入门教材论坛_Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
PythonShare ============= *Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐* ------------------------ 本文 ...
- python入门教材论坛_GitHub - aisuhua/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...
- 零基础学习C语言如何入门(内附工具书推荐+视频教程)
C语言同C++.Python等都是通用性的编程语言,它们不针对某一个特定的方向,能做的事情很多.C语言主要用于底层开发,Windows.Linux.Unix 等操作系统的内核90%以上都使用C语言开发 ...
- python零基础自学英语软件下载_GitHub - geniux-TI/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...
- python教程1009python教程_GitHub - gyl1009/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...
- 廖python入门视频_GitHub - aisuhua/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...
- python go 入门_GitHub - gochao/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...
最新文章
- c语言日期星期程序,C语言程序设计: 输入年月日 然后输出是星期几
- 虚拟机的联网模式正确的选择
- maven引用公共包_Maven项目怎样引用其他项目/或者jar包-阿里云开发者社区
- Html5 Canvas斗地主游戏
- 简化java_JAVA之旅-简化java开发
- html登陆l判断,html作业登陆界面
- element ui el-carousel 滚动图 vue 基于vue-lazyload图片懒加载、延迟加载 解决方案
- 为什么单独循环中的元素加法比组合循环中的要快得多?
- visio各版本下载
- hp刀片服务器性能分析,IBM刀片服务器与高性能计算-20210723075634.ppt-原创力文档...
- PayPal支付流程
- 怎么解决ZBrush保存历史记录太多问题
- 重装战姬服务器正在维护,《重装战姬》4月23日更新维护公告
- 二十一、从句_非限定性定语从句
- 泽塔云:用超融合撑起软件定义数据中心的梦想
- js控制form提交的action
- maya 白天室内灯光_maya 灯光怎么打?
- CE认证电气间隙和爬电距离要求
- excel----检验
- Android面试题和答案
热门文章
- delphi 读取ini所有项_财务机器人真的会代替财务人员所有工作吗?
- 微信小程序使用高德地图API获取准确定位地址描述
- vue中slot(插槽)详解,slot、slot-scope和v-slot
- shiro的用户认证
- Create an Apex class that returns contacts based on incoming parameters
- 自定义Realm实现认证
- jQuery中的slideUp()、slideDown()、hide()、show()
- mysql实现汉字转拼音
- 每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现
- 用两个栈(C++)实现插入排序