資源簡介
剛剛接觸曲面細分

代碼片段和文件信息
//?Loop.cpp:?implementation?of?the?Loop?class.
//
//////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“ZfxOpenGlframe.h“
#include?“Loop.h“
#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif
#define?PI?3.1415926
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
//?查找本三角形是否有偶點e1?e2
//?若有?則返回則兩個偶點對應的奇點的下標
//?若無?則返回-2
int?Triangle::FindTwoEven(int?e1?int?e2)
{
int?differ??=?GetEvenSum()-e1-e2;
if(differ?==?even[0])
{
TwoTwoCmp(12)
}
else?if(differ?==?even[1])
{
TwoTwoCmp(02)
}
else?if(differ?==?even[2])
{
TwoTwoCmp(01)
}
else
{
return?-2;
}
}
//?查找三角形中除偶點e1?e2外的另一個偶點(不做這兩個偶點是否在這三角形中的檢查)
int?Triangle::FindOtherEven(int?e1?int?e2)
{
return?GetEvenSum()-e1-e2;
}
//?將細分成的4個三角形插入pArrTriangle中
void?Triangle::Subdivision(CArray?*pArrTriangle)
{
//?為了保證光照效果?三個點的順序必須是同一個方向
pArrTriangle->Add(Triangle(even[0]?odd[1]?odd[2]));
pArrTriangle->Add(Triangle(odd[1]?even[1]?odd[0]));
pArrTriangle->Add(Triangle(odd[2]?odd[0]?even[2]));
pArrTriangle->Add(Triangle(odd[1]?odd[0]?odd[2]));
}
//?返回其偶點的和
int?Triangle::GetEvenSum()
{
return?even[0]+even[1]+even[2];
}
/////////////////////////////////////////////////////////////////////
Loop::Loop()
{
m_pArrTriangle?=?new?CArray();
m_pArrTriangle->RemoveAll();
m_pNewArrTriangle?=?new?CArray();
m_pNewArrTriangle->RemoveAll();
m_pArrPoint?=?new?CArray();
m_pArrPoint->RemoveAll();
m_pNewArrPoint?=?new?CArray();
m_pNewArrPoint->RemoveAll();
}
Loop::~Loop()
{
}
//?將多面體進行一次細分
void?Loop::Subdivision()
{
m_pNewArrTriangle->RemoveAll();
m_pNewArrPoint->RemoveAll();
m_pNewArrPoint->Append(*m_pArrPoint);
//?1.計算所有奇點
for(int?i=0;?iGetSize();?i++)
{
//?計算下標為i的三角形中的三個奇點
EvenToOdd(0?1?i);
EvenToOdd(1?2?i);
EvenToOdd(2?0?i);
//?保存每個三角形細分成的四個小三角形
Triangle?triangle?=?m_pArrTriangle->GetAt(i);
triangle.Subdivision(m_pNewArrTriangle);
}
//?2.計算所有偶點
for(int?j=0;?jGetSize();?j++)
{
//?將下標為pointIndex對應偶點轉化為偶點
EvenToEven(j);
}
//?保存新生成的面
m_pArrTriangle->RemoveAll();
m_pArrTriangle->Append(*m_pNewArrTriangle);
//保存新生成的點
m_pArrPoint->RemoveAll();
m_pArrPoint->Append(*m_pNewArrPoint);
}
//?計算下標為triangleIndex的三角形中的兩個偶點對應的奇點
void?Loop::EvenToOdd(int?evenIndex1?int?evenIndex2?int?triangleIndex)
{
//?先賦兩個無效值
int?triangleIndex1?=?-1;
int?triangleIndex2?=?-1;
Triangle?triangle?=?m_pArrTriangle->GetAt(triangleIndex);
//?獲取以這兩個有點所組成的邊為公共邊的兩個三角形的下標
int?oddIndex?=?FindTwoTriangle(triangle.even[evenIndex1]?
???triangle.even[evenIndex2]
?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????79079??2008-12-22?13:16??ZfxOpenGlLoopSubdivision\Debug\Loop.obj
?????文件??????30657??2008-12-22?13:16??ZfxOpenGlLoopSubdivision\Debug\Loop.sbr
?????文件??????18320??2008-12-23?01:19??ZfxOpenGlLoopSubdivision\Debug\MainFrm.obj
?????文件??????25600??2008-12-23?00:42??ZfxOpenGlLoopSubdivision\Debug\MainFrm.pdb
?????文件???????3238??2008-12-23?01:19??ZfxOpenGlLoopSubdivision\Debug\MainFrm.sbr
?????文件?????107473??2008-12-21?16:33??ZfxOpenGlLoopSubdivision\Debug\StdAfx.obj
?????文件????1400461??2008-12-21?16:33??ZfxOpenGlLoopSubdivision\Debug\StdAfx.sbr
?????文件?????361472??2008-12-23?01:39??ZfxOpenGlLoopSubdivision\Debug\vc60.idb
?????文件?????380928??2008-12-23?01:39??ZfxOpenGlLoopSubdivision\Debug\vc60.pdb
?????文件????3793920??2008-12-22?00:28??ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlfr
?????文件????2211986??2008-12-23?01:39??ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlfr
?????文件????2613600??2008-12-23?01:39??ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlfr
?????文件??????22896??2008-12-21?18:56??ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlfr
?????文件????4260864??2008-12-23?01:39??ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlfr
?????文件??????14644??2008-12-21?16:29??ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlfr
?????文件??????????0??2008-12-21?18:56??ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlfr
?????文件??????14412??2008-12-21?16:33??ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlfr
?????文件??????????0??2008-12-21?16:33??ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlfr
?????文件??????56779??2008-12-23?01:39??ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlfr
?????文件??????28748??2008-12-23?01:39??ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlfr
?????文件???????8011??2008-12-22?13:16??ZfxOpenGlLoopSubdivision\Loop.cpp
?????文件???????2997??2008-12-21?18:56??ZfxOpenGlLoopSubdivision\Loop.h
?????文件???????2678??2008-12-23?01:19??ZfxOpenGlLoopSubdivision\MainFrm.cpp
?????文件???????3413??2008-12-23?00:42??ZfxOpenGlLoopSubdivision\MainFrm.dsp
?????文件????????539??2008-12-23?00:43??ZfxOpenGlLoopSubdivision\MainFrm.dsw
?????文件???????1581??2008-09-10?10:18??ZfxOpenGlLoopSubdivision\MainFrm.h
?????文件??????33792??2008-12-23?00:43??ZfxOpenGlLoopSubdivision\MainFrm.ncb
?????文件??????48640??2008-12-23?00:43??ZfxOpenGlLoopSubdivision\MainFrm.opt
?????文件???????1082??2008-12-23?00:42??ZfxOpenGlLoopSubdivision\MainFrm.plg
?????文件???????4503??2008-09-10?10:18??ZfxOpenGlLoopSubdivision\ReadMe.txt
............此處省略37個文件信息
- 上一篇:opencv 求二值化圖像的形心
- 下一篇:基于STM32的簡易示波器
評論
共有 條評論