小编San*_*der的帖子

Ray Tracer暗影问题

我正在研究一个光线追踪器,但我在阴影部分被困了几天.我的影子表现得很奇怪.这是光线跟踪器的图像:

在此输入图像描述

阴影的图象与两个球形的

黑色部分应该是阴影.

光线的原点总是(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)

c++ shader trace intersection

7
推荐指数
1
解决办法
186
查看次数

标签 统计

c++ ×1

intersection ×1

shader ×1

trace ×1