在
Get Reversed Normal Faces(获取反法线面),我只是说明了一下我的思维路线,没涉及到任何实现原理,现在我可以跟大家分享一下,我具体是怎么做的。
实际上我并没有去开发算法来判断面的正反面,而是使用了opengl里的不可见面算法。
什么是不可见面?
例如我们有两物体A和B,它们的某一部分重叠了,A在前B在后,那么我们只能看到B的一部分,如果B看不见的那部分也显示出来是没有任何意义的,这一部分的面就是不可见的。
判断不可见面的算法有不少,我使用的是最简单的,就是通过计算面的法线和相机【眼睛】的角度,如果角度大于180(应该是,我不太记得了),那就是不可见的面。
但这个算法并不能直接用来判断法线面的正反,因为就算是没有反向法线面对物体也会有不可见面。而且如果反向法线的面如果刚好就在物体的背面,它就变成了可见面了。如果你仔细分析反向法线的面就能知道它的边是硬边。
当时我就是这么做的,但实际的情况是非常复杂的,如果你模型有一大片连续的或是断断续续的面是反向法线的,就不行了,只能检测到一小部分的面是反向法线的,因为连续的反向法线面中间的面的边是软边。
之后呢,我就想尝试其它的不可见面对算法,可是都是非常难懂的算法,后来我又做了些修改,我不记得都怎么改了,因为我改的那些版本已经丢失了,我也是在几个月前才知道,他们一直在用第一个版本,就是硬边判断的版本。
那到底要怎么做才能完美的获取反法线面。
其实使用判断不可见面的算法是可以的,只是不能对三维模型来使用,因为实际上的模型非常复杂。但对于平面模型来说就显而易见了。
所以正确的做法应该是这样:
- 先定一个相机视图,不能是三维的相机视图,必须是二维的相机视图
- 然后将模型以uv的排列进行投影,就是把三维模型,在上面定的视图中进行uv的映射,来得到平面的模型,同时要注意不能有uv重叠,因为投影出来的模型也会重叠
- 使用判断不可见面的算法找出不可见面,这时的不可见面就只有两种结果,如果你的相机视图是看着模型的正面,它们就是反法线面
uv重叠也是可以的,我忘了上面的不可见面的算法是很简单的,它并不会去处理重叠的部分,只处理背面的面,就是背向眼睛的面
分享到:
相关推荐
本程序实现了一种功能,图片灰度的反转,采用了两种方式,一种是利用matlab中已存在的反转函数,一种自己编绘的函数
#include "stdafx.h" #include "iostream" #include "fstream" #include "algorithm" #include "string" #include "vector" #include "cmath" using namespace std; int main(int argc, char* argv[]) ...
有些时候,程序需要进行反向遍历,此时可通过 reversed() 函数,该函数可接收各种序列(元组、列表、区间等)参数,然后返回一个“反序排列”的法代器,该函数对参数本身不会产生任何影响。 在交互式解释器中,测试...
UID_CP_WriteID_Reversed.cpp
使用Python内置函数reversed() for i in reversed(arr): pass reversed返回的是迭代器,所以不用担心内存问题。 方法二 使用range()倒序 for i in range(len(arr) - 1, -1, -1): pass 方法三 先使用list自带的...
本文实例讲述了Python内置函数reversed()用法。分享给大家供大家参考,具体如下: reversed()函数是返回序列seq的反向访问的迭代器。参数可以是列表,元组,字符串,不改变原对象。 1》参数是列表 >>> l=[1,2,3,4,5...
添加对反向排序列表支持的 polyfill。 看: 只需将脚本包含在任何页面中(在 DOM 加载结束时或之后),它就会自动使 'reversed' 属性在有序列表上工作(该... 如果你想要一个使用 jQuery 的版本,你可以从获取代码。
1.双击无法打开 cas 或者路径出现乱码; 2.读入网格时,error:File haswrong dimensions(2) 3.the use of axis boundary conditions is not appropriate for 2D/3D flow problem. 4.error:divergence detected in ...
Nike_Reversed
This challenge can be overcome by wavefront shaping technique, in which a time-reversed (TR) wavefront of scattered light is generated to suppress the scattering. In previous TR optical focusing ...
Reversed Spectral Hashing
reverselink which supports two directions link nodes reverse
reversed(seq) Return a reverse iterator. seq must be an object which has a __reversed__() method or supports the sequence protocol (the __len__() method and the __getitem__() method with integer ...
1、简单解释就是:反转一个序列对象 例子1: def fun3(): x = [3,6,9] ...以上这篇浅谈python内置变量-reversed(seq)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持
sort()是可变对象(字典、列表)的方法,无参数,无返回值,sort()会改变可变对象,因此无需返回值。 sort()方法是可变对象独有的方法或者属性,而作为不可变对象如元组、字符串是不具有这些方法的,如果调用将会返回...
或者将"loveorigami/yii2-reversed-pagination": "~2.0"到composer.json的 require 部分 使用 用于 Yii2 的反向分页。 在控制器中 public function actionIndex () { $ query = Article :: find ()-> all (); ...
这个项目已经搬了!... Minecraft4k-Reversed是通过反编译此jarfile并记录大多数代码的作用而创建的。 修复了一些与运动和碰撞检测有关的错误之后,我们开始扩展游戏。 由于CPU上的多线程射线行进,因此可以适当地
一种对时间反转镜进行原理性matlab实现源代码