- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试创建一种算法来计算模型/网格的法线。人们一直告诉我使用两个向量之间的叉积,起初这似乎是个好主意,直到我发现它可能并不总是有效。例如,想象一个盒子,其正面位于原点,背面位于 Z 轴下方。这是一张图片:
对于糟糕的笔迹,我深表歉意,但这应该没有任何意义。如您所见,我将 v 和 u 交叉以获得指向正 z 轴的法线。但是,如果我使用相同的计算来计算背面的法线,那么显然法线将是指向形状内部的矢量。结果是我用不准确的法线来计算光的亮度。我希望法线始终背对模型。
我知道一定有更好的方法来计算法线,但我不知道它是什么。任何人都可以向我建议另一种算法来计算可以摆脱这个问题的法线吗?如果不是,则必须有一种方法来检查法线是否面向对象/模型内部。如果是这样,那么您能否在答案中提出建议,我会在哪里找到有关它的解释,因为我很想对这些方法的工作原理有一个直觉。
最佳答案
大多数软件包都遵循三角形索引的可配置循环排序 - 顺时针或逆时针。因此,它们导出的所有网格都具有自洽的顺序,只要您的程序使用相同的约定,您就无需担心。
话虽如此,我想您想知道在索引排序不一致的假设(?)情况下该怎么做。
我们可以使用的一种方法是射线相交。重要的定理是,源在网格外的光线只会与网格相交偶数次,如果在内部,则为奇数次。
为此,我们可以执行以下操作:
N
1e-4
用于单个和1e-8
表示 double ) => P
[dir = N, src = P]
与网格中的所有 三角形相交(一个好的算法是 Möller–Trumbore )次要(-ish?)题外话:对上面的一个天真的方法,循环遍历网格中的所有三角形,将是 O(n)
- 因此整个过程将具有二次时间复杂度。这对于约 20 个三角形的非常小网格(例如一个盒子)来说非常好,但对于任何更大的网格都不理想!
您可以使用空间分割技术来降低这个相交步骤的成本:
O(n log n)
(最佳算法,即 - 请参阅 Ingo Wald's paper)来构造,但交叉点是如果操作正确,保证为 O(log n)
。总体复杂度将是 O(n log n)
,这几乎是您可以获得的最好结果O(n)
并且内存效率更高。交集时间仍然是 O(n)
,但常数因子比原始方法小很多。关于algorithm - 如何计算盒子的法线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45603469/
这个问题在这里已经有了答案: CSS3 Flexbox: display: box vs. flexbox vs. flex (3 个答案) 关闭 1 年前。 今天我们中的许多人都知道 displa
$('.finalLink').html(" Click to Follow"); 我正在尝试创建一个以 super 框模式打开的链接。尝试了灯箱,结果相同。这些链接有效,但只是转到该网站。如果我静态
我使用了 RayHandler.useDiffuseLight(true) ,现在无论我设置什么环境光值,屏幕上未照亮的部分都是黑色的。这是正常的吗?我见过其他用 libgdx 制作的应用程序,它同时
我需要帮助解决一个简单的问题。我的任务即将结束,我们要制作不同的艺术人物。我制作了一个“正方形内的正方形”盒子,需要生成该盒子的 4 行和 4 列。 我认为最好的解决方案是多一些 for 循环,但不能
我怎样才能实现this effect使用 CSS 和/或 jQuery? 我会发布到目前为止我编写的代码,但它没有用...... 最佳答案 使用jQuery Masonry或Isotope为了达成这个
我写了下面的代码: for row in range(len(listOfLists)): print('+' + '-+'*len(listOfLists)) print('|',
我想知道如何在 CSS3 中制作成 Angular 盒子。喜欢这个网站: http://themeluxe.com/themes/glissando/ (白人) 我怎样才能使边框看起来更好、更平滑。
我正在尝试实现具有三个垂直部分的简单布局: 页面顶部的小标题。 主要内容,必要时展开,以便页脚保留在页面底部。 页面底部的页脚。 主要内容部分应进一步分为两部分:一个带有输入框和按钮的非常小的表单,以
我正在尝试构建如下图所示的网格 IMG 链接:http://postimg.org/image/qo3b4nof1/ 但我得到的 DIV E 几乎在 D-DIV 旁边 这是我的代码
如何修改fancybox盒子的定位?我希望它被定位,以便它漂浮在我的容器 div 中... 感谢您的宝贵时间和帮助! 最佳答案 jquery.fancybox-1.2.6 的第 255 行有这段代码
这个问题在这里已经有了答案: Inset border-radius with CSS3 (8 个答案) 关闭 9 年前。 border-radius 属性可以使盒子的 Angular 变圆。但是如
我创建了一个包装器元素,其中包含 2 个彼此相邻的行内 block 框(图片中为浅绿色和黄色)。然后我创建了另外两个 div,它们都嵌套在其中一个内联 block 中以使内容居中。它可以工作,但由于某
我在使用 WordPress 时遇到问题,在盒子中嵌套盒子。在 WordPress 之外,这工作正常。我确定只有一两个参数有误。 外框为dp23,内框为dp22由于某种原因,内框 (dp22) 之间存
我目前尝试在容器内排列盒子的结果是这样的输出。 但我想要实现的是, 用最大数量的框填充每一行,但每个框都有固定的填充和边距。我相信我已经做到了。 我需要每行中的单个框来覆盖剩余空间,间隙仅为 1 像素
我在下面有多个 flexbox 的代码。当页面展开时,我如何将它们垂直居中放置在页面中?我尝试在我的 flex-container 中使用 justify-content: center; 但当我使用
我有这样的布局: 我
我是编程新手,我注意到有人提到了 flex box。在阅读了很多相关内容之后,它似乎对我有用。唯一的问题是我在安装它时遇到了很多麻烦,即使在搜索了大约一个小时的帮助之后也是如此。我从 github 下
Vagrantfile有问题: # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config
我正在尝试下载一个 Vagrant 的盒子,但他们的服务器此时非常缓慢。他们有公共(public)镜子吗?我想下载precision64.box 文件。 谢谢 最佳答案 尝试更可靠的: Vagrant
在一个父容器内,三个 div 彼此重叠。顶部 div 是固定高度。底部 div 的内容占用了未知数量的垂直空间,但需要显示其中的所有内容。顶部 div 应填充剩余的垂直空间。每一个 // 100%
我是一名优秀的程序员,十分优秀!