我有一个小的路径跟踪器,我试图弄清楚如何实现一些基本的BRDF。这是我使用的管道的简要说明(无递归):
1) For each pixel:
1.1) For each sample:
1.1.1) I construct a path.
1.1.2) I calculate the contribution of this path.
1.1.3) I calculate the "probability" of this path.
1.1.4) Finally, I calculate the overall color value(taking into account number of samples, "probability" and contribution of the path).
1.2) Take the sum of all samples' values and write it to the pixel.
Run Code Online (Sandbox Code Playgroud)
因此,我在步骤中计算反射光线的方向1.1.1) I construct a path。
目前,我已经实现了漫反射,镜面反射,光泽反射和折射。现在,我想实现一个复杂的BRDF,比方说Cook-Torrance BRDF。我看到它包含几个成分(漫反射和镜面反射)。我应该如何追踪这些光线以获得组合?我应该像往常一样在diffuse_ray / specular_ray之间进行选择,然后像往常一样累加值(乘以一些系数)吗?(例如,如果随机值大于0.5,那么我将跟踪漫射射线,否则为-镜面反射)还是应该跟踪多条射线从每个路口?
通常在基于物理的渲染器中如何实现?
PS:如果有人知道关于该主题的一些好文章,我将很高兴看到他们。我尝试阅读pbrt,但对我来说似乎非常复杂且庞大。某些地方的实现方式有所不同,例如相机模型和其他东西。
我有以下顶点着色器:
#version 330
layout (location = 0) in vec3 Position;
uniform mat4 gWVP;
out vec4 Color;
void main()
{
gl_Position = gWVP * vec4(Position, 1.0);
};
Run Code Online (Sandbox Code Playgroud)
例如,如何获得vec3的第三个值?我的第一个想法是:"也许我可以通过将这个向量(位置)乘以某个东西得到它?" 但我不确定是否存在类似"垂直矢量类型"的东西.那么,最好的方法是什么?我需要这个值来设置像素的颜色.
我正在为脚本编写一个小的命令行实用程序,但无法弄清楚如何从参数中正确获取完整路径。
这就是我的意思。
parser = ArgumentParser()
parser.add_argument("-src",
required = True, help="path to some folder")
args = parser.parse_args()
print(args.src)
Run Code Online (Sandbox Code Playgroud)
如果用户通过完整路径,例如"/home/username/projectname/folder",一切都很好。
但是,如果用户从假设"projectname"文件夹运行脚本并传递相对路径,则"./folder"我"./folder"在解析参数而不是完整路径时会得到完全相同的字符串"/home/username/projectname/folder"。
因此,我一直想知道是否存在某种内置功能Argparse,可以从相对路径获取完整路径?
我有QListWidget并且需要获取所选项目的索引。(我可以按值使用列表中的项目,但是我有std::vector一个包含列表中每个项目的对象,还需要从中删除它们。)有一个功能,indexFromItem但是它是protected(?),所以我可以用它。
有任何想法吗?
QList<QListWidgetItem *> itemList = lw1->selectedItems();
Run Code Online (Sandbox Code Playgroud) c++ ×2
argparse ×1
glsl ×1
graphics ×1
opengl ×1
pbr ×1
python ×1
python-3.x ×1
qt ×1
qwidget ×1
raytracing ×1
reflection ×1
render ×1