📄 scene.h
字号:
// Scene.h: interface for the CScene class.
//
// 说明:
// 功能: 场景类
//
// 创建时间: 2004.5
// 作者: 悦鑫 0004170140
// 目的: 南京理工大学毕业设计 基于光线跟踪算法的场景绘制研究
// 参考书目: <<VC++绘图程序设计技巧与实例>>
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SCENE_H__8A1823DA_BA8B_4F5C_A844_CDBCF7ACC05E__INCLUDED_)
#define AFX_SCENE_H__8A1823DA_BA8B_4F5C_A844_CDBCF7ACC05E__INCLUDED_
#include "Vector.h" // Added by ClassView
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CScene //场景类
{
public:
//构造函数,初始化场景
CScene();
//计算视点到屏幕象素的方向向量
CVector InitDirection(int ScreenX,int ScreenY);
//一个象素的光线跟踪
CVector Raytracing(CRay* InitRay);
//全场景光线跟踪
void BeginTrace();
//析构函数
virtual ~CScene()
{
}
//获得背景光亮度
CVector CScene::GetBackground(CRay *Hitray)
{
return CVector( 250, 250, 250 );
}
//增加景物,参数object是所要增加的景物指针
void CScene::AppendObject(CRTObject *object)
{
ObjectList.AppendNode( object );
}
//删除景物,参数object是所要删除的景物指针
void CScene::DeleteObject(CRTObject* object)
{
ObjectList.DeleteNode( object );
}
//删除景物,参数i是所要删除的景物在链表中的序号
void CScene::DeleteObject(int i)
{
DeleteObject( (CRTObject*)ObjectList.GetNode(i) );
}
//增加光源,参数light是所要增加的光源指针
void CScene::AppendLight(CLight *light)
{
LightList.AppendNode( light );
}
//删除光源,参数light是所要删除的光源指针
void CScene::DeleteLight(CLight* light)
{
LightList.DeleteNode( light );
}
//删除光源,参数i是所要删除的光源在链表中的序号
void CScene::DeleteLight(int i)
{
DeleteLight( (CLight*)LightList.GetNode(i) );
}
public:
int nXRes,nYRes; //图形长宽
CVector ObservePosition; //视点坐标
double dFocalLength; //焦距
CVector LookAt; //视线方向向量
double rgb[1024][768][3]; //存放生成象素值,最多支持屏幕分辨率是1024*768
int nMaxDepth; //最大迭代深度
private:
double dRotateAngle; //视点相对于场景坐标系z轴的旋转角
double dTiltAngle; //视点相对于场景坐标系z轴的俯仰角
CRTList LightList; //光源列表
CRTList ObjectList; //景物列表
CStack RayStack; //光线堆栈
CStack PointStack; //交点堆栈
int nDepth; //当前光线迭代深度
//各类光(颜色)的权值
CVector LocalWeight; //环境光强
CVector ReflectWeight; //反射光强
CVector TransmitWeight; //透射光强
CVector MinWeight; //最小光强
CVector MaxWeight; //最大光强
CVector ViewDir;
CVector U;
CVector V;
};
#endif // !defined(AFX_SCENE_H__8A1823DA_BA8B_4F5C_A844_CDBCF7ACC05E__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -