纪念一下运行出了光线追踪代码,用了glfw和glad。
一条光线实际上只是一个起点和一个传播方向,因此光线表达式为:
p(t) = e?+ t (s-e)
已知球体的隐式方程为:
?
把光线 p(t) = e + t d 代入上述方程,得到?(e + t d - c)·(e + t d - c) - R2=0
求解得到
故已知t,即可确定交点p。
平面在空间几何中可以用一个向量(法向量)和平面中的一点P0来表示。
将光线p(t)=p0+tu,代入平面方程n·p+d=0,最后求得t:
故已知t,可以确定交点p。
shader.frag
#version 330 core
out vec4 FragColor;
in vec3 ourColor;
void main()
{
FragColor = vec4(ourColor, 1.0f);
}
shader.vert
#version 330 core
layout (location = 0) in vec3 aPos; // the position variable has attribute position 0
layout (location = 1) in vec3 aColor; // the color variable has attribute position 1
out vec3 ourColor; // output a color to the fragment shader
void main()
{
gl_Position = vec4(aPos, 1.0);
ourColor = aColor; // set ourColor to the input color we got from the vertex data
}