图形学光线追踪
眼睛观察到的光的总强度有环境光,漫反射光和镜面反射光三部分组成。如
果场景中有多个光源,那么每个光源都会产生漫反射和镜面反射光线。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-06-01 14:46 图形学光线追踪
目录 0 2016-06-01 14:42 图形学光线追踪Graphic_ray_tracing
文件 1440015 2016-06-01 14:40 图形学光线追踪Graphic_ray_tracing 00a.ppm
文件 3088 2009-04-26 23:27 图形学光线追踪Graphic_ray_tracingcommon.h
文件 3 2016-05-30 17:30 图形学光线追踪Graphic_ray_tracingin.txt
文件 0 2016-05-30 17:32 图形学光线追踪Graphic_ray_tracingout.txt
文件 12903 2016-06-01 14:40 图形学光线追踪Graphic_ray_tracing
aytracer.cpp
文件 4180 2016-05-30 10:04 图形学光线追踪Graphic_ray_tracing
aytracer.dsp
文件 541 2004-07-08 16:04 图形学光线追踪Graphic_ray_tracing
aytracer.dsw
文件 1525 2016-06-01 14:35 图形学光线追踪Graphic_ray_tracing
aytracer.h
文件 91136 2016-06-01 14:41 图形学光线追踪Graphic_ray_tracing
aytracer.ncb
文件 51712 2016-06-01 14:41 图形学光线追踪Graphic_ray_tracing
aytracer.opt
文件 1831 2016-06-01 14:40 图形学光线追踪Graphic_ray_tracing
aytracer.plg
文件 882 2009-04-23 02:05 图形学光线追踪Graphic_ray_tracing
aytracer.sln
文件 18432 2009-05-05 11:41 图形学光线追踪Graphic_ray_tracing
aytracer.suo
文件 6674 2009-04-23 02:05 图形学光线追踪Graphic_ray_tracing
aytracer.vcproj
文件 1413 2009-05-05 11:41 图形学光线追踪Graphic_ray_tracing
aytracer.vcproj.STREAKLY.Starseeker.user
文件 7664 2016-06-01 12:18 图形学光线追踪Graphic_ray_tracingscene.cpp
文件 4369 2016-06-01 11:01 图形学光线追踪Graphic_ray_tracingscene.h
文件 4711 2009-04-23 00:18 图形学光线追踪Graphic_ray_tracingsurface.cpp
文件 856 2009-04-23 00:18 图形学光线追踪Graphic_ray_tracingsurface.h
文件 3929 2016-06-01 12:40 图形学光线追踪Graphic_ray_tracing estapp.cpp
文件 171230898 2016-06-01 13:38 图形学光线追踪
ay_tracing_刘恒.avi
文件 163177 2016-06-01 14:28 图形学光线追踪图形学大作业.pdf
#include “raytracer.h“
#include “scene.h“
#include “common.h“
#include “windows.h“
#include “winbase.h“
#include “math.h“
#include
#define M_PI 3.141592653589
namespace Raytracer {
Ray::Ray( vector3& a_Origin vector3& a_Dir ) :
m_Origin( a_Origin )
m_Direction( a_Dir )
{
}
Engine::Engine()
{
m_Scene = new Scene();
}
Engine::~Engine()
{
delete m_Scene;
}
// -----------------------------------------------------------
// Engine::SetTarget
// Sets the render target canvas
// -----------------------------------------------------------
void Engine::SetTarget( Pixel* a_Dest int a_Width int a_Height )
{
// set pixel buffer address & size
m_Dest = a_Dest;
m_Width = a_Width;
m_Height = a_Height;
}
// -----------------------------------------------------------
// Engine::Raytrace
// Naive ray tracing: Intersects the ray with every primitive
// in the scene to determine the closest intersection
// -----------------------------------------------------------
Primitive* Engine::Raytrace( Ray& a_Ray Color& a_Acc int a_Depth float a_RIndex float& a_Dist )
{
if (a_Depth > TRACEDEPTH) return 0;
// trace primary ray
a_Dist = 1000000.0f;
vector3 pi;
Primitive* prim = 0;
int result;
// find the nearest intersection
for ( int s = 0; s < m_Scene->GetNrPrimitives(); s++ )
{
Primitive* pr = m_Scene->GetPrimitive( s );
int res;
if (res = pr->Intersect( a_Ray a_Dist ))
{
prim = pr;
result = res; // 0 = miss 1 = hit -1 = hit from inside primitive
}
}
// no hit terminate ray
if (!prim) return 0;
// handle intersection
if (prim->IsLight())
{
// we hit a light stop tracing
a_Acc = Color( 1 1 1 );
}
else
{
// determine color at point of intersection
pi = a_Ray.GetOrigin() + a_Ray.GetDirection() * a_Dist;//交?
// trace lights
for ( int l = 0; l < m_Scene->GetNrPrimitives(); l++ )
{
Primitive* p = m_Scene->GetPrimitive( l );
if (p->IsLight())
{
Primitive* light = p;
//intersection part
float shade = 1.0f;
if (light->GetType() == Primitive::SPHERE)
{
vector3 L = ((Sphere*)light)->GetCentre() - pi;
float tdist = LENGTH( L );
L *= (1.0f / tdist);
Ray r = Ray( pi + L * EPSILON L );
for ( int s = 0; s < m_Scene->GetNrPrimitives(); s++ )
{
Primitive* pr = m_Scene->GetPrimitive( s );
if ((pr != light) && (pr->Intersect( r tdist )))
{
shade = 0;
break;
}
}
}
// if (light->GetType() == Primitive::CYLINDER)
// {
// vector3 L = ((Sphere*)light)->GetCentre() - pi;
// float tdist = LENGTH( L );
// L *= (1.0f / tdist);
// Ray r = Ray( pi + L * EPSILON L );
// for ( int s = 0; s < m_Scene->GetNrPrimitives(); s++ )
// {
// Primitive* pr = m_Scene->GetPrimitive( s );
// if ((pr != light) && (pr->Intersect( r tdist )))
// {
// shade = 0;
//
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-06-01 14:46 图形学光线追踪
目录 0 2016-06-01 14:42 图形学光线追踪Graphic_ray_tracing
文件 1440015 2016-06-01 14:40 图形学光线追踪Graphic_ray_tracing 00a.ppm
文件 3088 2009-04-26 23:27 图形学光线追踪Graphic_ray_tracingcommon.h
文件 3 2016-05-30 17:30 图形学光线追踪Graphic_ray_tracingin.txt
文件 0 2016-05-30 17:32 图形学光线追踪Graphic_ray_tracingout.txt
文件 12903 2016-06-01 14:40 图形学光线追踪Graphic_ray_tracing
aytracer.cpp
文件 4180 2016-05-30 10:04 图形学光线追踪Graphic_ray_tracing
aytracer.dsp
文件 541 2004-07-08 16:04 图形学光线追踪Graphic_ray_tracing
aytracer.dsw
文件 1525 2016-06-01 14:35 图形学光线追踪Graphic_ray_tracing
aytracer.h
文件 91136 2016-06-01 14:41 图形学光线追踪Graphic_ray_tracing
aytracer.ncb
文件 51712 2016-06-01 14:41 图形学光线追踪Graphic_ray_tracing
aytracer.opt
文件 1831 2016-06-01 14:40 图形学光线追踪Graphic_ray_tracing
aytracer.plg
文件 882 2009-04-23 02:05 图形学光线追踪Graphic_ray_tracing
aytracer.sln
文件 18432 2009-05-05 11:41 图形学光线追踪Graphic_ray_tracing
aytracer.suo
文件 6674 2009-04-23 02:05 图形学光线追踪Graphic_ray_tracing
aytracer.vcproj
文件 1413 2009-05-05 11:41 图形学光线追踪Graphic_ray_tracing
aytracer.vcproj.STREAKLY.Starseeker.user
文件 7664 2016-06-01 12:18 图形学光线追踪Graphic_ray_tracingscene.cpp
文件 4369 2016-06-01 11:01 图形学光线追踪Graphic_ray_tracingscene.h
文件 4711 2009-04-23 00:18 图形学光线追踪Graphic_ray_tracingsurface.cpp
文件 856 2009-04-23 00:18 图形学光线追踪Graphic_ray_tracingsurface.h
文件 3929 2016-06-01 12:40 图形学光线追踪Graphic_ray_tracing estapp.cpp
文件 171230898 2016-06-01 13:38 图形学光线追踪
ay_tracing_刘恒.avi
文件 163177 2016-06-01 14:28 图形学光线追踪图形学大作业.pdf
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)