// TestView.cpp: CTestView 类的实现
//
#include "pch.h"
#include "framework.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "Test.h"
#endif
#include "TestDoc.h"
#include "TestView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CTestView
IMPLEMENT_DYNCREATE(CTestView, CView)
BEGIN_MESSAGE_MAP(CTestView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_COMMAND(ID_GRAPH_ANIMATION, &CTestView::OnGraphAnimation)
ON_UPDATE_COMMAND_UI(ID_GRAPH_ANIMATION, &CTestView::OnUpdateGraphAnimation)
ON_WM_TIMER()
ON_WM_KEYDOWN()
END_MESSAGE_MAP()
// CTestView 构造/析构
CTestView::CTestView() noexcept
{
// TODO: 在此处添加构造代码
bPlay = FALSE;
double R = 200;
double m = 0.5523;
CP2 P2[14];//二维控制点
P2[0] = CP2(0,-1);//7个二维点模拟半圆
P2[1] = CP2(0.3,-1);
P2[2] = CP2(0.6,-1);
P2[3] = CP2(1,-1);
P2[4] = CP2(1,-0.9);
P2[5] = CP2(1, -0.8);
P2[6] = CP2(1,-0.5);//7个二维点模拟半圆 v
P2[7] = CP2(1,m-0.5);
P2[8] = CP2(m,0.5);
P2[9] = CP2(0,0.5);
P2[10] = CP2(1, 0.5);
P2[11] = CP2(1, 1);
P2[12] = CP2(m, 1.5);
P2[13] = CP2(0, 1.5);
CP3 DownPoint[4];//鼠标底座的三维控制点
DownPoint[0] = CP3(P2[0].x, P2[0].y, 0.0);
DownPoint[1] = CP3(P2[1].x, P2[1].y, 0.0);
DownPoint[2] = CP3(P2[2].x, P2[2].y, 0.0);
DownPoint[3] = CP3(P2[3].x, P2[3].y, 0.0);
revoDown.ReadCubicBezierControlPoint(DownPoint);
tranDown.SetMatrix(revoDown.GetVertexArrayName(), 48);
tranDown.Scale(R, R, 2*R);
CP3 UpPoint[4];//鼠标侧面的三维控制点
UpPoint[0] = CP3(P2[3].x, P2[3].y, 0.0);
UpPoint[1] = CP3(P2[4].x, P2[4].y, 0.0);
UpPoint[2] = CP3(P2[5].x, P2[5].y, 0.0);
UpPoint[3] = CP3(P2[6].x, P2[6].y, 0.0);
revoUp.ReadCubicBezierControlPoint(UpPoint);
tranUp.SetMatrix(revoUp.GetVertexArrayName(), 48);
tranUp.Scale(R, R, 2*R);
CP3 DownPoint1[4];//鼠标上面的三维控制点
DownPoint1[0] = CP3(P2[6].x, P2[6].y, 0.0);
DownPoint1[1] = CP3(P2[7].x, P2[7].y, 0.0);
DownPoint1[2] = CP3(P2[8].x, P2[8].y, 0.0);
DownPoint1[3] = CP3(P2[9].x, P2[9].y, 0.0);
revoDown1.ReadCubicBezierControlPoint(DownPoint1);
tranDown1.SetMatrix(revoDown1.GetVertexArrayName(), 48);
tranDown1.Scale(R, R, 2 * R);
CP3 UpPoint1[4];//鼠标按钮的三维控制点
UpPoint1[0] = CP3(P2[10].x, P2[10].y, 0.0);
UpPoint1[1] = CP3(P2[11].x, P2[11].y, 0.0);
UpPoint1[2] = CP3(P2[12].x, P2[12].y, 0.0);
UpPoint1[3] = CP3(P2[13].x, P2[13].y, 0.0);
revoUp1.ReadCubicBezierControlPoint(UpPoint1);
tranUp1.SetMatrix(revoUp1.GetVertexArrayName(), 48);
tranUp1.Scale(R / 4, R / 3, R / 3);
tranUp1.Translate(0, -50, 300);
InitializeLightingScene();
revoDown.patch.SetScene(pLight, pMaterial);//设置场景
revoUp.patch.SetScene(pLight, pMaterial);//设置场景
revoDown1.patch.SetScene(pLight, pMaterial);//设置场景
revoUp1.patch.SetScene(pLight, pMaterial);//设置场景
/*-> 设置纹理*/
texture[0].PrepareBitmap(IDB_BITMAP1);//准备位图
texture[1].PrepareBitmap(IDB_BITMAP2);//准备位图
texture[2].PrepareBitmap(IDB_BITMAP1);//准备位图
texture[3].PrepareBitmap(IDB_BITMAP3);//准备位图
revoDown.patch.SetTexture(&texture[0]);
revoUp.patch.SetTexture(&texture[1]);
revoDown1.patch.SetTexture(&texture[2]);
revoUp1.patch.SetTexture(&texture[3]);
}
CTestView::~CTestView()
{
if (pLight != NULL)
{
delete pLight;
pLight = NULL;
}
if (pMaterial != NULL)
{
delete pMaterial;
pMaterial = NULL;
}
for(int i=0;i<8;i++)
{
texture[i].DeleteObject();
}
}
void CTestView::InitializeLightingScene(void)//初始化光照环境
{
//设置光源属性
nLightSourceNumber = 1;//光源个数
pLight = new CLighting(nLightSourceNumber);//一维光源动态数组
pLight->LightSource[0].SetPosition(1000, 1000, 1000);//设置光源位置坐标
for (int i = 0; i < nLightSourceNumber; i++)
{
pLight->LightSource[i].L_Diffuse = CRGB(1.0, 1.0, 1.0);//光源的漫反射颜色
pLight->LightSource[i].L_Specular = CRGB(1.0, 1.0, 1.0);//光源镜面高光颜色
pLight->LightSource[i].L_C0 = 1.0;//常数衰减因子
pLight->LightSource[i].L_C1 = 0.0000001;//线性衰减因子
pLight->LightSource[i].L_C2 = 0.00000001;//二次衰减因子
pLight->LightSource[i].L_OnOff = TRUE;//光源开启
}
//设置材质属性
pMaterial = new CMaterial;
pMaterial->SetAmbient(CRGB(0.847, 0.10, 0.075));//环境反射率
pMaterial->SetDiffuse(CRGB(0.852, 0.006, 0.026));//漫反射率
pMaterial->SetSpecular(CRGB(1.0, 1.0, 1.0));//镜面反射率
pMaterial->SetEmission(CRGB(0.0, 0.0, 0.0));//自身辐射的颜色
pMaterial->SetExponent(50);//高光指数
}
BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CView::PreCreateWindow(cs);
}
// CTestView 绘图
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
DoubleBuffer(pDC);
}
void CTestView::DoubleBuffer(CDC* pDC)//双缓冲
{
CRect rect;//定义客户区矩形
GetClientRect(&rect);//获得客户区的大小
pDC->SetMapMode(MM_ANISOTROPIC);//pDC自定义坐标系
pDC->SetWindowExt(rect.Width(), rect.Height());//设置窗口范围
pDC->SetViewportExt(rect.Width(), -rect.Height());//设置视区范围,x轴水平向右,y轴垂直向上
pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);//客户区中心为原点
CDC memDC;//内存DC
memDC.CreateCompatibleDC(pDC);//创建一个与显示pDC兼容的内存memDC
CBitmap NewBitmap, *pOldBitmap;//内存中承载的临时位图
NewBitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());//创建兼容位图
pOldBitmap = memDC.SelectObject(&NewBitmap);//将兼容位图选入memDC
//memDC.FillSolidRect(rect, pDC->GetBkColor());//按原来背景填充客户区,否则是黑色
memDC.SetMapMode(MM_ANISOTROPIC);//memDC自定义坐标系
memDC.SetWindowExt(rect.Width(), rect.Height());
memDC.SetViewportExt(rect.Width(), -rect.Height());
memDC.SetViewportOrg(rect.Width() / 2, rect.Height() / 2);
rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);
DrawObject(&memDC);//向memDC绘制图形
pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), &memDC, -rect.Width() / 2, -rect.Height() / 2, SRCCOPY);//将内存memDC中的位图拷贝到显示pDC中
memDC.SelectObject(pOldBitmap);//恢复位图
NewBitmap.DeleteObject();//删除位图
}
void CTestView::DrawObject(CDC* pDC)//绘制图形
{
CZBuffer* pZBuffer = new CZBuffer;
pZBuffer->InitialDepthBuffer(1000, 1000, 2000);//初始化深度缓冲器
revoUp.DrawRevolutionSurface(pDC, pZBuffer);
revoDown.DrawRevolutionSurface(pDC, pZBuffer);
revoUp1.DrawRevolutionSurface(pDC, pZBuffer);
revoDown1.DrawRevolutionSurface(pDC, pZBuffer);
delete pZBuffer;
}
// CTestView 打印
BOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加额外的打印前进行的初始化过程
}
void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加打印后进行的清理过程
}
// CTestView 诊断
#ifdef _DEBUG
void CTestView::AssertValid() const
{
CView::AssertValid();
}
void CTestView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTestDoc* CTestView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_C
没有合适的资源?快使用搜索试试~ 我知道了~
计算机图形学设计鼠标实验
共157个文件
obj:50个
h:27个
cpp:24个
0 下载量 150 浏览量
2024-01-05
16:28:30
上传
评论
收藏 117.07MB ZIP 举报
温馨提示
计算机图形学设计鼠标实验
资源推荐
资源详情
资源评论
收起资源包目录
计算机图形学设计鼠标实验 (157个子文件)
Test.aps 947KB
Texture2.bmp 473KB
Texture3.bmp 207KB
Texure1.bmp 149KB
bitmap1.bmp 1KB
Toolbar.bmp 238B
TestView.cpp 10KB
BezierPatch.cpp 6KB
ZBuffer.cpp 6KB
Revolution.cpp 5KB
Test.cpp 5KB
Transform3.cpp 4KB
TestDoc.cpp 3KB
RGB.cpp 2KB
Vector3.cpp 2KB
Lighting.cpp 2KB
MainFrm.cpp 2KB
Projection.cpp 2KB
P2.cpp 1KB
P3.cpp 1KB
T2.cpp 1KB
Point2.cpp 1KB
LightSource.cpp 903B
Material.cpp 656B
Texture.cpp 545B
Point3.cpp 183B
pch.cpp 158B
Patch.cpp 103B
Facet.cpp 103B
Mesh.cpp 95B
Browse.VC.db 74.63MB
Test.exe 1.42MB
Test.exe 875KB
Test.vcxproj.filters 6KB
TestView.h 2KB
framework.h 2KB
Transform3.h 1KB
ZBuffer.h 1KB
BezierPatch.h 1KB
TestDoc.h 892B
Vector3.h 868B
RGB.h 861B
resource.h 771B
MainFrm.h 715B
P2.h 692B
LightSource.h 653B
P3.h 645B
T2.h 635B
Revolution.h 634B
Point2.h 583B
pch.h 544B
Material.h 532B
Test.h 527B
Projection.h 468B
Lighting.h 451B
targetver.h 299B
Texture.h 259B
Point3.h 186B
Facet.h 159B
Mesh.h 148B
Patch.h 117B
Test.ico 66KB
TestDoc.ico 5KB
vc141.idb 1.4MB
vc141.idb 1.4MB
Test.ilk 2.63MB
Test.ilk 2.46MB
f77e5f180225b6e7.ipch 133.69MB
84958b06425253e1.ipch 133.69MB
Test.lastbuildstate 225B
Test.lastbuildstate 223B
Test.Build.CppClean.log 3KB
Test.Build.CppClean.log 3KB
Test.log 109B
Test.log 101B
pch.obj 1.01MB
pch.obj 976KB
BezierPatch.obj 137KB
TestDoc.obj 120KB
ZBuffer.obj 104KB
TestDoc.obj 92KB
TestView.obj 88KB
MainFrm.obj 85KB
BezierPatch.obj 77KB
TestView.obj 72KB
MainFrm.obj 67KB
ZBuffer.obj 67KB
Test.obj 66KB
Cube.obj 57KB
Transform3.obj 55KB
Lighting.obj 54KB
Point2.obj 54KB
Test.obj 53KB
Transform3.obj 41KB
Projection.obj 41KB
Revolution.obj 39KB
Cube.obj 39KB
Point2.obj 36KB
P2.obj 36KB
Lighting.obj 36KB
共 157 条
- 1
- 2
资源评论
发疯的熏熏
- 粉丝: 1335
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功