• 大小: 3.52MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-31
  • 语言: 其他
  • 标签: 曲面细分  loop  openGL  

资源简介

刚刚接触曲面细分

资源截图

代码片段和文件信息

// 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\ZfxOpenGlframe.bsc

     文件    2211986  2008-12-23 01:39  ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlframe.exe

     文件    2613600  2008-12-23 01:39  ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlframe.ilk

     文件      22896  2008-12-21 18:56  ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlframe.obj

     文件    4260864  2008-12-23 01:39  ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlframe.pdb

     文件      14644  2008-12-21 16:29  ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlframe.res

     文件          0  2008-12-21 18:56  ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlframe.sbr

     文件      14412  2008-12-21 16:33  ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlframeDoc.obj

     文件          0  2008-12-21 16:33  ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlframeDoc.sbr

     文件      56779  2008-12-23 01:39  ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlframeView.obj

     文件      28748  2008-12-23 01:39  ZfxOpenGlLoopSubdivision\Debug\ZfxOpenGlframeView.sbr

     文件       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个文件信息

评论

共有 条评论