- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
**
**
图形学3D图形渲染实验报告
功能:
实现母线为Bezier曲线的旋转集合体,两个光源,基于扫描线z缓冲算法的3D图形渲染。
程序结构:
Csrgp类:
srgp类为一个二维光栅软件包,实现了基本的二维图形的绘制能力(点,直线,圆,多边形,扫描转换多边形)并实现了双缓冲技术(内存缓冲技术)。在此基础上,添加了扫描线z缓冲算法的三维集合体的渲染。
Csrgp类声明如下:
public:
HDC m_hdc;
DWORD m_iColor;
POINT m_Oring;
HDC m_memHdc;
double **Z_Buf;
bool m_onMemery;
int m_Umin, m_Vmin, m_Eu, m_Ev;//设备坐标系视区
double m_VCUmin, m_VCUmax, m_VCVmin, m_VCVmax;//观察坐标系uv平面窗口
double m_Fdistance, m_Bdistance;//前后裁减面,在观察坐标系中指定
Vector3d m_VRP;//观察参考点
Vector3d m_VPN;//观察坐标系法向
Vector3d m_VUP;//观察正向
Vector3d m_PRP;//投影参考点,在观察坐标系中指定
Vector3d m_VrcU, m_VrcV, m_VrcN;//观察坐标系
int width ;
int high ;
double m_Xmin, m_Ymin, m_Ex, m_Ey, m_a;//0-2//设备坐标系视区
Vector3d m_MatrixWindows2Device[3];
Vector4d m_MatrixWorldCoord2VRC[4];
Vector4d m_Npar[4];//平行投影视见体规范化变换
Vector4d m_Nper[4];//透视投影视见体规范化变换
Vector4d m_Npar2per[4];//透视投影到平行投影视见体
Vector4d m_FinalMatrix[4];//最终投影变换矩阵
Vector4d m_MatrixLocal2WorldCoord[4];//局部坐标系到世界坐标系变换
bool m_FinalMatrixInvalidly;
//////////////////////////////////
Vector3d L1, L2;//两个点光源位置,世界坐标系中
Vector3d Ia;//环境光强
Vector3d I1;//点光源1强度
Vector3d I2;//点光源强度
double Ic;//亮度控制
double C0, C1, C2;//衰减控制
double m_maxI;//最大光强度
//////////////////////////
// Operations
public:
void PutPixel(int x, int y);
void PutPixel(int x, int y, DWORD color);
void DrawOnMemery(bool onMemery = true);
void LineCoord(int x0, int y0, int x1, int y1);
void CirclePoints(int x, int y, int offsetX, int offsetY);
void CircleCoord(int offsetX, int offsetY, int radius);
DWORD GetColor();
void SetColor(DWORD color);
void Draw ();
void FillPolygon(const CPolygon );
void LineCoord3D(Vector3d, Vector3d);
void DisplayParametricPolynomialCurve(Vector3d PG[],double M[MAX][MAX], int n, int count);
void DisplayCubicHemiteCurve(Vector3d P[2], Vector3d PR[2], int count);
void DisplayBezierCurve(Vector3d P[], int n, double DELTA);
void Windows2Device(Vector3d P);
void WorldCoord2VRC(Vector3d P);
void SetDeviceViewArea(int Umin, int Vmin, int
文档评论(0)