转自:http://www.flab3d.com/tutor-tag-free-subtag-view-top-t22.html

回想一下当年我们玩的PS或土星游戏机,我们会记得常常在画面里看到破面,缺面,或者旋转镜头时某个物体突然跑到另一个物体前面这类问题。在目前本地游戏靠越来越强劲的三维加速卡,拥有如虚幻,上古,DOOM这种画面近乎完美引擎的今天,我们网页三维正在经历和PS当年相同问题的时代。

破面,缺面,错误面等等都是描述同一个问题:Z-sorting,和他相关的有occlusion culling,摄像机的clipping/Culling等等。网页3D目前并没有完美的解决方法。所以以后在flash3d中再看到这样那样的破面/乱面,请不要再过多追究这个只能靠硬件解决的问题(因为会立即被罚看这篇^_^),如有完美的解决方案我们一定会第一时间通知您的,呵呵。

我们知道,每个三维模型的面都是由三角形构成,三角形离摄像机的垂直距离,我们一般称作Z-depth,或者‘深度’。三维图形就是靠这个深度来决定哪个面出现在哪个面前面。

这个Z目前是怎么决定的呢?
在不能使用三维加速卡的时候,Z一般我们是靠组成每个三角形的三个点的平均深度决定,也就是说,每个三角形的中心点决定(或有些情况由最远点决定)。也就是说,每1/30(一般来说)秒,flash播放器都会靠Z深度来重新排列一次画面上所有的三角形。

由于是依据中心点和摄像机的垂直距离决定Z深度,所以这个深度信息常常不能够正确地反映面的真实深度,特别当面相对相邻面较大的时候。(图1左边)

和这个问题的相关的还有摄像机裁切,在我们使用中,我们常常会遇到近处的面还不该消失就被裁切掉的问题。也是相同的道理。目前没有完美快速的的解决方法。只能靠美工手段(比如加多靠近摄像机的polygon,viewport设置得比实际flash窗口尺寸大等等很多)稍加注意。

两三角形相交的情况
在没有高级算法的情况下,一个三角形是组成模型的最基本的元素,是不可分割的(比粒子还不可分割)。
也就是说,当两个三角形交叉的时候,必须要强行决定谁在谁前面,不能说‘谁的一半’在"谁的一半"前面,因为这种不可分割。(图1右边)

网页三维的Z-sorting目前是没有所谓‘完美的救赎’。但是希望下面这些东西对你会有些启发和帮助。

用viewportLayer做整体排列
这是一个非常快捷的方法,但绝对不是完美解决的办法。
这个办法是靠整个模型的中心点(或最近/最远点)来排列整个模型的图层,也就是说两个模型间的相交/邻近的破面现象会大大减小/完全消除。把每个整块模型看成一个图层,排列各个物体的远近就是排列每个图层的前后。
使用这个方法的代价是整个物体常常突然跳到另一个物体的前面。特别当我们使用‘扁,长,大,’的物体,中心点的距摄像机的距离几乎不能反映此物体的真实深度
这个方式的好处是速度效率相对较高,如果观众不介意物体整个排列错误的问题建议使用这个方法。sandy,away3d都有很容易可以使用这种方法,pv3d稍稍需要多一两步,具体使用方法欢迎去我们的 -> 超简易
第五篇 ViewportLayer分层排列

加多模型的面数
当一个宏大的草原只由2个三角形构成的时候,稍稍破面,就等于消失了一半的草原,非常明显。但当一个草原由1000个面组成的时候,每个面就很小了,即使破面也不是太明显。那么一百万个面组成呢?(当然不是叫我们真的要用这么多面,适当就是了)
当然这个方法的代价是效率明显下降,导入文件体积变大变慢。使用这个办法的前提是用户的效率不大大减小的情况下。

四叉树
Away3D里首先出现了QuadTree摄像机,可以基本解决破面的问题。10月pv3d终于也有了自己四叉树渲染器QuadrantRenderEngine,可惜它们的实用价值都很小,因为在实际运用中非常缓慢(我的意思是真的’非常缓慢’,不是人类能够接受的缓慢,我们的包里没有提供这个渲染器也是这个原因)。
到底是什么原因让四叉树没有成为flash3d的 ‘救世神器’呢?
交叉,遮挡这种高端图形处理,现在游戏都是靠图形加速卡完成,而目前网页3D只能靠CPU运算。
四叉树的基本思路是:以互相交叉的面的相交线,靠程序把两个面继续细分成6个或更多的面。只要发生相交,都要进行海量的运算,即使我们保证每个用户都是现在的n核CPU,也难以完成多于几百个面的游戏场景(现在的游戏一个场景一般有可能上十多万面)。

美工掩饰
尽量避免两个面相交
尽量避免两个面非常靠近
尽量避免使用‘扁长’物体,尽量保持每个物体‘胖圆’,并避免两个物体靠近。
如果确定为不会显示的面,比如外壳遮住的内部,尽量在三维软件中删除掉。

图形加速
个人属于网络程序盲,所以不能解释的太清楚这方面。网络某些协议的问题,导致网页程序基本不能使用本地机器的openGL/D3D。这个问题需要各大厂商协力解决。不过既然flash10能支持一些DisplayObject的各种composition加速,那么未来对flash3d的加速也是完全可以期待的。

网络服务器运算
前段时间已经开始有人尝试用强劲的网络服务器进行一些图形信息方面的运算,然后把信息传递到每个本地用户,这个想法很新颖,虽然成本非常高,但对使用用户机器配置要求就大大降低。当然前提是网络速度不慢的情况。

目前要避免Z排列错误的注意和技巧还有很多,欢迎能有更多朋友研究出些更多能够提高效率,或投机取巧的美工小方法来提高效率来蒙蔽观众。多媒体相关职业的奥义就是蒙蔽观众嘛

三维图形原理 为什么我的模型老破面/缺面相关推荐

  1. vue-threeJS数据驱动的三维图形可视化

    数据驱动的三维图形可视化 在信息暴涨的2010-2016年间,冷暴力的扁平化确实有效降低用户的信息焦虑感,使有限的精力更高效处理过多的信息流.二维平面化扁平化在苹果等大头引领下,成为大众用户机器交流默 ...

  2. OpenGL三维图形编程技术(转)

    人们对三维图形技术的研究已经经历了一个很长的历程,而且涌现了许多三维图形开发工具,其中SGI公司推出的GL(Graphics Library)三维图形库表现尤为突出,它易于使用且功能强大.随着计算机技 ...

  3. 13 MATLAB 三维图形绘制

    在实际工程应用中,常常遇到三维甚至更多维的数据,需要在图形中表示出来,MATLAB中提供了相应的三维图形 绘制功能,这些绘制功能与二维图形的绘制十分类似,特别是曲线的属性,例如线型.颜色等的设置,是完 ...

  4. 计算机显示图形原理,计算机图形学:图形的计算与显示原理

    第1章 计算机图形学介绍 1 1.1 计算机图形学的发展 1 1.2 计算机图形学的应用 2 1.2.1 计算机辅助设计与制造 2 1.2.2 科学计算可视化 3 1.2.3 真实感图形绘制 3 1. ...

  5. 【WPF】用三角形网格构建三维图形

    虽然WPF只能支持部分三维模型,不过从应用功能开发的角度看,也已经够用了(非游戏开发).WPF 的三维图形,说得简单一点,也就两种而已. 1.把二维对象放到三维空间中,这个应该较为好办,像 Image ...

  6. OpenGL三维图形编程技术【转】

    一.OpenGL 的发展历史 人们对三维图形技术的研究已经经历了一个很长的历程,而且涌现了许多三维图形开发工具,其中SGI公司推出的GL(Graphics Library)三维图形库表现尤为突出,它易 ...

  7. CVPR2020:点云分析中三维图形卷积网络中可变形核的学习

    CVPR2020:点云分析中三维图形卷积网络中可变形核的学习 Convolution in the Cloud: Learning Deformable Kernels in 3D Graph Con ...

  8. layui循环数据并渲染_从简单到复杂三维图形渲染管线

    一.什么是三维图形渲染管线 3D Graphics Rendering Pipeline 1.三维 3D,三维空间的简称. 在笛卡尔空间坐标系内,一般使用x.y.z三个分量表示一个位置. 2.图形 图 ...

  9. 计算机模拟数学实验动画,计算机图形学实验-简单动画的实现、三维图形变换.docx...

    安徽大学计算机实验教学中心PAGE 安徽大学计算机实验教学中心 PAGE 1 学号 专业 姓名 实验日期2018.12.11 教师签字 成绩 实验报告 [实验名称]简单动画的实现.三维图形变换 [实验 ...

最新文章

  1. CodeForces 获得数据
  2. Ruby错误:iconv will be deprecated in the future, use String#encode instead.
  3. python错误-Python错误解决
  4. php源码编译常见错误解决方案大全
  5. jQuery EasyUI布局容器layout实例精讲
  6. Pattern-No.07 设计模式之单例模式
  7. module 'queue' has no attribute 'Queue'解决
  8. c语言超市账务管理源代码,C语言 超市管理系统源程序.doc
  9. C++ Merge sort(归并排序)
  10. 区块链的七阶段位,你属于哪一段?
  11. mysql 删除时间一个星期_我用财务管理系统花费一天时间做账,别人用一个星期也追赶不上...
  12. 【装机必备】电脑优化清理工具
  13. STL原理与构建——阅读笔记
  14. html写一个猜数字游戏,JS实现网页端猜数字小游戏
  15. Fully Convolutional Networks for Semantic Segmentation
  16. JUST技术:利用轨迹拼接分析实时可达区域
  17. iOS备忘录之XCode插件
  18. 电子政务源代码java_基于jsp的电子政务系统项目-JavaEE实现电子政务系统项目 - java项目源码...
  19. 大顶堆小顶堆优先队列
  20. 如何写SHELL脚本?尝试自己编写一个简单脚本

热门文章

  1. 小猫钓鱼——栈、队列的应用(C++)
  2. 【省流版】延年益寿 | 减肥 | 证据 | 防杠
  3. 浪漫满屋家居家饰想买一些回家用,有人知道这些产品怎么样?
  4. GDAL for python 教程(1)
  5. 2020-01-29
  6. 数字化转型(Digital Transform)
  7. PYTHON爬虫神站——curl.trillworks 爬取数据只需两步!
  8. 得市场者得天下 2013款长城哈弗H5
  9. python(opencv2、PIL)将图片透明背景转换成白色背景的两种方法
  10. 全网最全的 php8 新特性