`
schi
  • 浏览: 205889 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Get Reversed Normal Faces(获取反法线面) [原理]

阅读更多
Get Reversed Normal Faces(获取反法线面),我只是说明了一下我的思维路线,没涉及到任何实现原理,现在我可以跟大家分享一下,我具体是怎么做的。

实际上我并没有去开发算法来判断面的正反面,而是使用了opengl里的不可见面算法。

什么是不可见面
例如我们有两物体A和B,它们的某一部分重叠了,A在前B在后,那么我们只能看到B的一部分,如果B看不见的那部分也显示出来是没有任何意义的,这一部分的面就是不可见的。

判断不可见面的算法有不少,我使用的是最简单的,就是通过计算面的法线和相机【眼睛】的角度,如果角度大于180(应该是,我不太记得了),那就是不可见的面。

但这个算法并不能直接用来判断法线面的正反,因为就算是没有反向法线面对物体也会有不可见面。而且如果反向法线的面如果刚好就在物体的背面,它就变成了可见面了。如果你仔细分析反向法线的面就能知道它的边是硬边。

当时我就是这么做的,但实际的情况是非常复杂的,如果你模型有一大片连续的或是断断续续的面是反向法线的,就不行了,只能检测到一小部分的面是反向法线的,因为连续的反向法线面中间的面的边是软边。

之后呢,我就想尝试其它的不可见面对算法,可是都是非常难懂的算法,后来我又做了些修改,我不记得都怎么改了,因为我改的那些版本已经丢失了,我也是在几个月前才知道,他们一直在用第一个版本,就是硬边判断的版本。

那到底要怎么做才能完美的获取反法线面。
其实使用判断不可见面的算法是可以的,只是不能对三维模型来使用,因为实际上的模型非常复杂。但对于平面模型来说就显而易见了。
所以正确的做法应该是这样:
  • 先定一个相机视图,不能是三维的相机视图,必须是二维的相机视图
  • 然后将模型以uv的排列进行投影,就是把三维模型,在上面定的视图中进行uv的映射,来得到平面的模型,同时要注意不能有uv重叠,因为投影出来的模型也会重叠
  • 使用判断不可见面的算法找出不可见面,这时的不可见面就只有两种结果,如果你的相机视图是看着模型的正面,它们就是反法线面

uv重叠也是可以的,我忘了上面的不可见面的算法是很简单的,它并不会去处理重叠的部分,只处理背面的面,就是背向眼睛的面
分享到:
评论
2 楼 schi 2014-05-10  
啊,我太傻了,都想到使用uv了,可以有更简单的方法,只要把uv当成xz,然后算出w(y)就行了啊
1 楼 schi 2014-02-11  
我也是今天才偶然想到的,我以后可能用不着了,所有分享给有需要的人。

相关推荐

    lena-reversed.rar_Grayscale inversion_lena_matlab 反转灰度_matlab灰度反

    在给定的“lena-reversed.rar”压缩包中,我们探讨的是如何在MATLAB环境下对著名的Lena图像进行灰度反转。 首先,MATLAB是一种强大的数值计算和可视化工具,特别适合于图像处理任务。在MATLAB中,有一系列内置的...

    Adding Reversed Numbers

    #include "stdafx.h" #include "iostream" #include "fstream" #include "algorithm" #include "string" #include "vector" #include "cmath" using namespace std; int main(int argc, char* argv[]) ...

    Python内置函数reversed()用法分析

    在使用reversed()函数时需要注意的事项包括:确保输入序列是可迭代的(列表、元组、字符串等),并且要理解reversed()返回的是一个迭代器,如果需要多次获取反向序列,则必须多次调用reversed()函数。此外,如果对...

    反置数 1

    2. `sum_reversed(a, b)`:这个函数接收两个整数a和b,首先分别调用`reverse_integer(a)`和`reverse_integer(b)`,得到它们的反置数,然后将这两个反置数相加得到sum,最后调用`reverse_integer(sum)`计算sum的反置...

    Python reversed函数及使用方法解析

    有些时候,程序需要进行反向遍历,此时可通过 reversed() 函数,该函数可接收各种序列(元组、列表、区间等)参数,然后返回一个“反序排列”的法代器,该函数对参数本身不会产生任何影响。 在交互式解释器中,测试...

    UID_CP_WriteID_Reversed.cpp

    UID_CP_WriteID_Reversed.cpp

    Python列表倒序输出及其效率详解

    使用Python内置函数reversed() for i in reversed(arr): pass reversed返回的是迭代器,所以不用担心内存问题。 方法二 使用range()倒序 for i in range(len(arr) - 1, -1, -1): pass 方法三 先使用list自带的...

    reversed_time_时间反转_时间反转matlab_时间反转镜_

    1. **信号采集**:首先,我们需要生成或获取一个代表时间反转目标的信号。这可能是一个声波、光波或其他形式的波动信号。在MATLAB中,我们可以使用内置的函数如`sin`、`cos`或`randn`来创建这样的信号。 2. **信号...

    浅谈python内置变量-reversed(seq)

    #### 二、`reversed(seq)`的实现原理 当调用`reversed()`函数时,它实际上是通过以下步骤来实现逆序功能的: 1. **创建迭代器**:`reversed()`内部首先检查传入的对象是否支持迭代。 2. **反向遍历**:对于支持...

    揭秘kotlin编程原理

    **Kotlin编程原理详解** Kotlin,由JetBrains公司开发,是一种现代、静态类型的编程语言,主要用于Java虚拟机(JVM)以及Android平台。自2017年被Google宣布为Android开发的首选语言以来,Kotlin在移动开发领域迅速...

    python中sort sorted reverse reversed函数的区别说明

    这里主要讨论的是`sort()`、`sorted()`、`reverse()`和`reversed()`四个函数的区别和用法。 首先,`sort()`函数是Python列表的一个内建方法,只适用于可变对象如列表。它没有返回值,而是直接在原列表上进行排序...

    reversed link v2

    本话题“reversed link v2”聚焦于双向链表的反转操作,这是一个常见的编程问题,尤其在Java编程中。双向链表与单向链表不同,它允许节点在两个方向上都有指针,这使得前向和后向遍历变得容易。现在,我们将深入探讨...

    HTML5-Reverse-Ordered-Lists:用于有序列表的 'reversed' 属性的 polyfill,HTML5 中的新功能,但目前不支持浏览器

    添加对反向排序列表支持的 polyfill。 看: 只需将脚本包含在任何页面中(在 DOM 加载结束时或之后),它就会自动使 'reversed' 属性在有序列表上工作(该... 如果你想要一个使用 jQuery 的版本,你可以从获取代码。

    Python代码源码-实操案例-框架案例-使用Python逆序输出字符串.zip

    Python的切片功能强大,可以方便地获取字符串的一部分。要逆序字符串,可以使用步长为-1的切片操作。例如: ```python string = "Hello, World!" reversed_string = string[::-1] print(reversed_string) ``` ...

    博创联动开放平台接口数据获取1

    此接口用于获取车辆的历史轨迹数据,其重要请求参数与车辆CAN数据查询接口基本相同,主要是`did`、`gpsEndTime`、`pageSize`、`pageType`、`reversed`、`startRowKey`、`gpsStartTime`、`token`和`vin`。...

    实用高效液相色谱法的建立纠错版-第6章-中性样品:反相与正相hplc(常用版).doc

    本章节主要聚焦于中性样品的反相色谱(Reversed-Phase Chromatography,RPC)与正相色谱(Normal-Phase Chromatography,NPC)的应用。 反相色谱是HPLC中最常用的分离模式,尤其适用于大多数常规样品。RPC的分离...

    Python reversed反转序列并生成可迭代对象

    Python中的`reversed()`函数是一个内置的迭代工具,它能够将序列对象的元素顺序反转,生成一个新的可迭代对象。这个可迭代对象可以被用于for循环或者其他需要迭代的情况,以反向遍历序列的元素。 1. **反转序列** ...

    电子政务-极偶反接偏磁式磁阻电机.zip

    极偶反接偏磁式磁阻电机(Polar Opposite Reversed-Biased Magneto-Resistance Motor,简称PORBM)是一种创新的电机设计,它结合了磁阻效应和电磁原理,提高了电机的性能和能效。磁阻效应是指在磁场作用下,某些材料...

Global site tag (gtag.js) - Google Analytics