void RayTracer::render(Attr_Render* _renderAttribute){ m_pRenderAttribute = _renderAttribute; this->InitializePixelBuffer(_renderAttribute->m_iScreenWidth, _renderAttribute->m_iScreenHeight); InitializeViewToWorldMatrix(); InitializeRayList(); for(;m_RayBuffer.size()!=0;){ std::cout<<"expanding"<<std::endl; ExpandRayTracingTree(); ShadingRay(); } CollapseRayTracingTree(); ExtractRayListToPixelBuffer(); FlushPixelBuffer(); }
void LightSample::make_shading_point( ShadingPoint& shading_point, const Vector3d& direction, const Intersector& intersector) const { assert(m_triangle && !m_light); intersector.manufacture_hit( shading_point, ShadingRay( m_point, direction, 0.0, 0.0, ShadingRay::Time(), VisibilityFlags::CameraRay, 0), ShadingPoint::PrimitiveTriangle, // note: we assume light samples are always on triangles (and not on curves) m_triangle->m_assembly_instance, m_triangle->m_assembly_instance->transform_sequence().get_earliest_transform(), m_triangle->m_object_instance_index, m_triangle->m_region_index, m_triangle->m_triangle_index, m_triangle->m_triangle_support_plane); }