OPENGL光线追踪

发布时间:2024年01月22日

纪念一下运行出了光线追踪代码,用了glfw和glad。

  1. 光线的数学表达式

一条光线实际上只是一个起点和一个传播方向,因此光线表达式为:

p(t) = e?+ t (s-e)

  1. 光线与球相交

已知球体的隐式方程为:

?

把光线 p(t) = e + t d 代入上述方程,得到?(e + t d - c)·(e + t d - c) - R2=0

求解得到

故已知t,即可确定交点p。

  1. 光线与平面相交

平面在空间几何中可以用一个向量(法向量)和平面中的一点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
}       

文章来源:https://blog.csdn.net/y0205yang/article/details/135755960
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。