问题标签 [fresnel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
115 浏览

reflection - 我应该如何准确混合折射和反射颜色,菲涅耳

我正在raytracer为学校建立一个 C 语言。昨天我成功实现了我的第一次递归折射,但是我对结果不是很满意。带有 2 个反光球的我的照片raytracer

我发现水球看起来不像水球,所以如果你对我接下来应该做什么有一些建议,请告诉我,从我读到的内容:

啤酒法

使阴影的黑暗取决于光线穿过折射材料的时间(我想我可以使用啤酒定律)

我怀疑这可能来自我的实现,这就是我所做的:

首先我设置一个这样的材料:

这是我的水料的特点。

由于我使用菲涅耳来计算我应该使用多少透射和折射颜色来计算我的最终颜色,所以我想知道我的反射和折射系数是否不应该是简单的布尔值。现在我正在使用它们来考虑我应该使用多少反射和折射颜色,但是因为我也在使用菲涅尔,所以不是太多了吗?我对这部分有点困惑,很多大学的很多 PDF 都变红了,但是他们没有涵盖精确的混合,他们只是告诉我们使用菲涅尔来选择我们应该使用多少反射或透射光,但是当他们放了伪代码,您可以阅读它们递归地调用它们的函数: if (material->is_reflective) if (material->is_refractive)

0 投票
2 回答
707 浏览

matlab - 绘制(菲涅耳)椭圆和长轴

我正在尝试绘制菲涅耳椭圆和两点(x1,y1)和(x2,y2)之间的线。此外,我正在尝试使用 atan2 旋转椭圆。首先,我不明白为什么绘制的红色轴与椭圆的想象主轴不同。它们具有不同的角度和长度。其次,我不确定我是否使用正确的公式来绘制带旋转的椭圆。

菲涅耳椭圆

0 投票
2 回答
154 浏览

python - 光学:绘制 TE 和 TM 的相移

我正在尝试绘制具有可变入射角(0 到 180 度)的垂直波和平行波的相移。波从折射率为 1.33 传播到折射率为 1.5 的介质。

我使用了以下方程:方程理论<-- 第 18 页

我使用了以下代码:

问题是我得到[ nan nan nan nan nan nan nan nan nan nan]了回报。

0 投票
2 回答
4567 浏览

python - Python - OpenDrive 地图 - 使用菲涅耳积分的螺旋 / 回旋线 / 欧拉螺旋 / Cornu 螺旋插值

地图格式OpenDrive提供(除其他外)道路的几何形状。道路的每一段都可以有不同的几何形状(例如线、弧线、螺旋线、多项式)。为道路几何“螺旋”提供的信息如下:

我的目标是在给定“分辨率”参数的情况下沿螺旋线插入点(例如分辨率 = 1,每米沿螺旋线插入一个点)。螺旋几何是这样的,它引入了一个恒定的曲率变化(1/半径),因此它产生了从直线到圆弧的平滑和稳定的过渡,因此车辆上的横向加速度力小于从直线到圆弧直接(直线曲率 = 0,圆弧曲率 = 常数)。

螺旋总是有一个曲率为 0 的端点(它连接到道路的线段),另一个为常数(例如,0.05 连接到弧线)。根据连接顺序,curvStart可以等于 0 或常数,curvEnd也可以等于 0 或常数。它们不能同时等于 0 或常数。

下面的代码是一个函数,它将前面讨论的参数(由格式给出)和分辨率作为参数。

目前,我遇到以下问题:

  • 插入相隔 1 米的等距点(检查图 1)
  • 获得点的正确航向(检查图 2)
  • 找到最后 2 个案例的解决方案

从我对如何完成任务的研究中,我找到了一些有用的资源,但没有一个能帮助我获得最终的解决方案:

0 投票
1 回答
1082 浏览

matlab - transfer matrix method for dielectric structures

I am writing a code to simulate the behaviour of a five-layer dielectric structure. The method used is the TMM methods.. Inputs are the incident angle on the structure. With this strcture, what I expected is a zero transmission after the critical angle (which is 65.1 for this refractive index stacks) and an unexpected peak after a while (this is due to an optical tunneling effect). The formula used are taken from paper: http://ieeexplore.ieee.org/document/6417944/

Do you know why the structure acts like a Fabry-Perot instead? Am I missing something in the loop in your opinion?

Thank you very much

`

0 投票
0 回答
536 浏览

opengl - 如何在片段着色器中实现折射光?

我正在开发一个 OpenGL 光线追踪器,它能够加载 obj 文件并对其进行光线追踪。我的应用程序使用 assimp 加载 obj 文件,然后使用着色器存储对象将所有三角形面(以及原始坐标和 te 材质系数)发送到片段着色器。基本结构是将结果从片段着色器渲染到四边形。

我在片段着色器中的光线追踪部分遇到了麻烦,但首先让我们介绍一下。对于漫射光,使用兰伯特余弦定律,对于镜面光使用 Phong-Blinn 模型。在全反射的情况下,使用一个weight变量来使反射光也对其他物体产生影响。权重是通过 Schlick 方法通过近似菲涅耳方程计算的。在下图中,您可以看到,飞机就像一面镜子,反射上方立方体的图像。

在此处输入图像描述

我想让立方体看起来像一个玻璃物体(如玻璃球),它也有折射和反射效果。或者至少折射光线。在上图中,您可以看到立方体上的折射效果,但效果并不理想。我搜索了如何实现它的示例,但直到现在,我认识到必须像在反射部分一样使用菲涅耳方程。

这是我的着色器的片段:


更新 1

我更新了着色器中的跟踪方法。就我对光的物理理解而言,如果有一种材料会反射和折射光,我就得按照这个来处理两种情况。

  1. 在这种反射的情况下,我在漫反射光计算中添加了一个权重: weight *= fresnel
  2. 在折射光的情况下,重量为weight*=1-fresnel

此外,我计算了ray.origray.dir连接的情况,折射计算仅在不是全内反射的情况下发生(fresnel小于1)。

修改后的trace方法:

这是连接到更新的快照。稍微好一点,我猜。

在此处输入图像描述


更新 2:

我发现了一个迭代算法,它使用堆栈来可视化 opengl 中的折射和反射光线:它在第 68 页

我根据这个修改了我的碎片着色器。几乎没问题,除了背面完全是黑色的。附上一些图片。在此处输入图像描述

这是我的碎片着色器的跟踪方法:

0 投票
0 回答
223 浏览

c++ - 光线追踪器中的折射产生奇怪的结果,如何组合所有颜色分量?

我正在用 C++ 编写一个光线追踪器,到目前为止只有球体,在实现了 Phong 的反射模型、阴影和反射之后,一切似乎都运行良好。当我实现折射和菲涅尔时,我似乎无法让事情看起来正确。我一直在考虑这是否可能是因为当我在球体对象内部/外部时如何移动 rayOrigin 但在尝试和谷歌搜索之后我仍然无法正确处理。

下面是一张图片。灰色背景是一个大的漫射球体,红色球体后面的较小的蓝色球体也是漫射的。其他是反射和折射的,ior 为 1.5-1.6。有两个点灯,一个稍微偏左,一个稍微偏右。 在此处输入图像描述

如图所示,球体看起来根本不透明。球体上也有明显的圆形颜色差异。也许这可能是因为我在跟踪函数中组合每个像素的颜色的方式:

以下是其他相关函数:computeRefraction:

菲涅耳:

反射:

对于理解和解决这些渲染问题的任何帮助将不胜感激,因为上周没有其他帖子或理论帮助我自己解决这个问题。谢谢!

0 投票
0 回答
15 浏览

python - 人们如何在使用离散傅立叶变换进行数值积分时处理调整大小的网格步骤?

我正在尝试按照维基百科上给出的菲涅耳衍射方程使用 FFT 来模拟 Python 上的光传播:

使用 fft 的菲涅耳(抱歉不能直接发布图片)

这样做的问题是 DFT 的输出矩阵将以坐标 (p,q) 给出,这将与我的可变传播距离 z 成反比。要使用新的 (x,y) 坐标来解释 FFT 之外的值,我需要从我的坐标网格中至少考虑 z 值以获得 1 对 1 匹配,但这样做会增加我的随着 z 的增加网格步长。

像这样的事情的正常解决方案是什么?