资源简介
刚刚接触曲面细分

代码片段和文件信息
// 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的简易示波器
相关资源
- OpenGL参考手册
- Qt Creator opengl实现四元数鼠标控制轨迹
- OpenGL文档,api大全,可直接查询函数
- opengl轮廓字体源代码
- MFC读三维模型obj文件
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- OPENGL实现世界上最小的3D游戏
- 翻译的美国大学经典参考书,Roland
- VS2012OpenGL配置所需要的全部libdllh文件
- Origin of anomalous hysteresis loops induced b
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
- opengl游戏编程徐明亮版(含源码)
- 用OPENGL画的一个简单的直升飞机
- opengl完美天空盒
- 3D绘图程序设计:使用Direct3D 10/9和Ope
- OpenGL绘制可运动自行车源程序.zip
评论
共有 条评论