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

📄 object3d.h

📁 计算机图形学原理及算法教程(VC++版)程序代码
💻 H
字号:
/////////////////////////////////////////////////////////////////////////////////
//	
// Object3d.h: interface for the CObject3d class.

//三维物体,定义或变换于世界坐标系

#ifndef _COBJECT3D_H
#define _COBJECT3D_H
#include "Vertex3d.h"
#include "Edge.h"
#include "Facet.h"
#include "Matrix3d.h"
#include "Vector3d.h"

class CObject3d : public CObject 
{
DECLARE_DYNAMIC(CObject3d)
public:
	CObject3d();
	virtual ~CObject3d();
	

public:

	//设置自动颜色属性
	void SetAutoColorProperty(BOOL bAutoColor);

	//获取自动颜色属性
	BOOL GetAutoColorProperty() const;

	//获取顶点表的大小
	int GetVertexListSize() const;
	//获取边表大小
	int GetEdgeListSize() const;
	//获取面表大小
	int GetFacetListSize() const;

	//设置顶点颜色
	void SetVertexColor(int nIndex, const FLOATCOLORRGBA& rgba);
	void SetVertexColor(int nIndex, const FLOATCOLORRGB& rgb);
	void SetVertexColor(int nIndex, float fRed, float fGreen, float fBlue, float fAlpha = 1.0f);

	//设置边颜色
	void SetEdgeColor(int nIndex, const FLOATCOLORRGBA& rgba);
	void SetEdgeColor(int nIndex, const FLOATCOLORRGB& rgb);
	void SetEdgeColor(int nIndex, float fRed, float fGreen, float fBlue, float fAlpha = 1.0f);
	
	//设置小面颜色
	void SetFacetColor(int nIndex, const FLOATCOLORRGBA& rgba);
	void SetFacetColor(int nIndex, const FLOATCOLORRGB& rgb);
	void SetFacetColor(int nIndex, float fRed, float fGreen, float fBlue, float fAlpha = 1.0f);


	//几何变换(世界坐标系,顶点)
	void Transform(CMatrix3d m);

	//变换法线,适用于刚体运动
	void TransVertexNormals(CMatrix3d m);
	void TransFacetNormals(CMatrix3d m);


	//获取相对位置
	CMatrix3d GetPosition() const;

	//设置顶点法线
	void SetVertexNormal(int nIndex, const VECTOR3D& normal);
	void SetVertexNormal(int nIndex, float x, float y, float z);

	//设置小面法线
	void SetFacetNormal(int nIndex, const VECTOR3D& normal);
	void SetFacetNormal(int nIndex, float x, float y, float z);

	//计算小面法线
	VECTOR3D CalcSingleFacetNoraml(const HOMOCOORD& v1, const HOMOCOORD& v2, const HOMOCOORD& v3);
	//计算面的法线(由顶点计算)
	void CalcFacetNormals();


	//计算顶点的平均法线(由面的法线计算)
	void EvenVertexNormals();
	


public:

	//需要应用该类的数据的类有: CPRender等,可以设置这些类为该类的友好类,然后增加保护措施和提供访问数据的机制.
	//为了方便访问,我们简单地设置它们为公有成员变量

	//顶点表
	CArray<CVertex3d,CVertex3d> m_vList;

	//边表
	CArray<CEdge,CEdge> m_eList;

	//面表
	CArray<CFacet,CFacet> m_sList;

protected:

	//变换矩阵
	CMatrix3d m_mGeomTrans;

	BOOL m_bAutoColor;
};

#endif 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -