我正在研究一个光线追踪器,但我在阴影部分被困了几天.我的影子表现得很奇怪.这是光线跟踪器的图像:
黑色部分应该是阴影.
光线的原点总是(0.f,-10.f,-500.f),因为这是一个透视投影,它是相机的眼睛.当射线击中一个平面时,击中点始终是射线的原点,但是与球体不同.它是不同的,因为它基于球体的位置.平面和球体之间从不存在交叉,因为原点是巨大的差异.我也尝试在盒子上添加阴影,但这也不起作用.两个球体之间的阴影确实有效!
如果有人想看到交叉口代码,请告诉我.
感谢您抽出宝贵时间来帮助我!
相机
Camera::Camera(float a_fFov, const Dimension& a_viewDimension, vec3 a_v3Eye, vec3 a_v3Center, vec3 a_v3Up) :
m_fFov(a_fFov),
m_viewDimension(a_viewDimension),
m_v3Eye(a_v3Eye),
m_v3Center(a_v3Center),
m_v3Up(a_v3Up)
{
// Calculate the x, y and z axis
vec3 v3ViewDirection = (m_v3Eye - m_v3Center).normalize();
vec3 v3U = m_v3Up.cross(v3ViewDirection).normalize();
vec3 v3V = v3ViewDirection.cross(v3U);
// Calculate the aspect ratio of the screen
float fAspectRatio = static_cast<float>(m_viewDimension.m_iHeight) /
static_cast<float>(m_viewDimension.m_iWidth);
float fViewPlaneHalfWidth = tanf(m_fFov / 2.f);
float fViewPlaneHalfHeight = fAspectRatio * fViewPlaneHalfWidth;
// The bottom left of the plane
m_v3ViewPlaneBottomLeft …Run Code Online (Sandbox Code Playgroud)