自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 PAT甲级 1016 Phone Bills

PAT甲级 1016 Phone Bills解题思路

2022-08-03 15:43:17 143 1

原创 PAT甲级 1015 Reversible Primes

PAT甲级 1015 Reversible Primes解题思路

2022-07-27 16:13:26 172

原创 MFC实现三维图像绘制(5.2)光照明暗处理

光照的明暗处理可以采用两种,一种是Gouraud明暗处理,主要方法是计算出各个点光照后的颜色,之后对面进行颜色的双线性插值。CRGB CFill::Interpolation(double t, double t1, double t2, CRGB c1, CRGB c2)//颜色线性插值{ CRGB c; c = (t - t2) / (t1 - t2)*c1 + (t - t1) / (t2 - t1)*c2; return c;}另一种是Phong明暗处理,主要方法是计算出各个点的

2021-12-24 17:35:50 758

原创 MFC中点类的实现

二维点类:#include "RGB.h"class CP2{public: CP2(void); virtual ~CP2(void); CP2(double x, double y); CP2(double x, double y, CRGB c); friend CP2 operator + (const CP2& p1, const CP2& p2);//运算符重载 friend CP2 operator - (const CP2& p1, const

2021-12-24 17:31:22 475

原创 MFC中面类的实现

#include "T2.h"class CFace{ public: CFace(); virtual ~CFace(); void SetEN(int); public: int En;//面的边数 int* p;//面的顶点号 CT2* ptTexture;//顶点纹理数组};#include "Face.h"CFace::CFace(){ p = NULL;}CFace::~CFace(){ if (p) { delete[] p;.

2021-12-24 17:28:18 436

原创 MFC实现三维图形绘制(6)纹理实现

将图片贴到物体上,可以通过颜色映射来实现,即将纹理的颜色作为材质的漫反射光反射率和环境光反射率。material->SetDiffuse(tf.c);//用纹理颜色作为材质的漫反射光反射率material->SetAmbient(tf.c);//用纹理颜色作为材质的环境光反射率为了使物体大小与纹理大小像贴合,用CT2类保存面上各顶点相对于纹理图像的坐标,在绘图时通过线性插值的方式实现一一对应。#include"RGB.h"class CT2 {public: CT2(

2021-12-24 17:27:03 2595

原创 MFC实现三维图像绘制(5.1)光照模型

光照的实现主要是通过环境光,漫反射光,镜面反射光和材质属性的不同确定的,因此首先通过CLightSource类保存光源,CMaterial类保存材质属性,CLight类进行光照。CLightSource类:#include"P3.h"class CLightSource{public: CLightSource(void); virtual ~CLightSource(void); void SetDiffuse(CRGB diffuse);//设置光源的漫反射光 void Set

2021-12-24 17:20:12 1378

原创 MFC实现三维图像绘制(4)面的绘制

绘制物体的面时考虑两个问题:1. 如何绘制?2. 如何消隐不可见面?针对这两个问题,分别采取有效边表算法和Z-Buffer缓冲器算法。有效边表:#include "Pi3.h"#include "T2.h"class CAET{public: CAET(); virtual ~CAET();public: double x;//当前扫描线与有效边交点的x坐标 int yMax;//边的最大y值 double k;//斜率的倒数(x的增量) CPi3

2021-12-24 17:14:25 1891 2

原创 MFC实现三维图像绘制(3)直线光栅化

进行直线绘制时,考虑两个问题:1. 如何绘制直线?2. 如何使直线看起来更自然?针对这两个问题,分别使用DDA算法和反走样直线算法进行解决。直线类的设计如下:class CLine{public: CLine(); virtual ~CLine(); void MoveTo(CDC *, CP2);//移动到指定位置 void MoveTo(CDC *, double, double); void LineTo(CDC *, CP2);//绘制直线,不含终点 void

2021-12-24 17:08:20 1747

原创 MFC实现三维图像绘制(2)投影变换

将三维物体投影到二维平面需要考虑投影变换,分为三步,即照相机变换,投影变换和视口变换。照相机变换:考虑到照相机和物体相对静止,故将照相机规范化为(1)放在坐标原点 (2)看向负z轴 (3)向上的方向为Y正向。此过程中物体做相同运动,则看到的效果与变换前一致。投影变换:分为正交投影和透视投影,此处具体算法的实现主要参考闫令琪老师的课程GAMES101-现代计算机图形学入门-闫令琪视口变换:将物体规范化投影到屏幕上。类的设计如下:(此处需要用到CVector3类,即向量类的相关运算)#pr

2021-12-24 17:00:58 1586

原创 MFC中CVector3类的实现

为了方便向量的相关运算,需要设计一个向量类。类的设计如下:#pragma once#include <math.h>#include "P3.h"class CVector3{public: CVector3(void); virtual ~CVector3(void); CVector3(double x, double y, double z);//绝对向量 CVector3(CP3 p); CVector3(CP3 p0, CP3 p1);//相对向量 d

2021-12-24 16:59:41 448

原创 MFC实现三维图像绘制(1)仿射变换

进行三维图形绘制的第一步是物体建模,考虑到物体的运动(仿射变换),三维物体到二维平面的的投影(投影变换)和物体本身的建模(建立点表和面表),这里先进行物体的仿射变换。通过三维仿射变换实现物体的运动,由于物体的平移变换无法通过三维矩阵实现,所以这里通过四维矩阵来实现。#pragma once#include "P3.h"#define PI 3.1415926//圆周率#include "math.h"//数学头文件class CModelTransform3{public: CMo

2021-12-24 16:47:51 1668

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除