⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scene.h

📁 蒙特卡罗方法可以有效地解决复杂的工程问题
💻 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 + -