基于MFC opengl读取obj并求法向量


此代码基于MFC编程,在VS2013上可以实现读取OBJ文件和显示,并绘制了3D模型的法向量,注释也清晰易懂,便于初学者学习!
资源截图
代码片段和文件信息
// Bsp.cpp: implementation of the CBsp class.
//
//////////////////////////////////////////////////////////////////////

#include “stdafx.h“
#include “BSpline.h“
#include “Bsp.h“
#include 
////////////////////////////////////////////Matrix
#include “Matrix.h“
#include “DecomposeDoc.h“

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CBsp::CBsp()
{
m_n = 0;
m_Poly = new CPoint[N];
m_PolyRev =new CPoint[N];
m_u = new double[N];
}

CBsp::~CBsp()
{
delete[] m_Poly;
delete[] m_u;
delete[] m_PolyRev;
}

void CBsp::SetControl(CPoint *Poly int n)
{
for (int i=0;i<=n-1;i++)
{
m_Poly[i] = Poly[i];
}
m_n = n;
}

void CBsp::Draw(CDC *PDC)
{
CDC* pDC=PDC;
CPen mypen;
mypen.CreatePen(PS_SOLID0RGB(25500));
pDC->Selectobject(mypen);
double xytdt;
for (int j=4;j<=m_n;j++)
{
dt=(m_u[j+1]-m_u[j])/50;
t=m_u[j];
while (t<=m_u[j+1]||(t-m_u[j+1])
{
x=0;
y=0;
if ((t-m_u[j+1])
m_u[j+1])
t=m_u[j+1];
for (int i=j-3;i<=j;i++)
  {
x+=baseFunc(i4t)*m_Poly[i-1].x;
  y+=baseFunc(i4t)*m_Poly[i-1].y;
  }
if(abs(t-m_u[4])<0.0001) {pDC->MoveTo(xy);}
  pDC->LineTo(xy);

t+=dt;
}

}
mypen.Deleteobject();
}

void CBsp::DrawControl(CDC *PDC)
{
CDC* pDC=PDC;
CPen mypen;
mypen.CreatePen(PS_DOT0RGB(02550));
pDC->Selectobject(mypen);
pDC->Polyline(m_Polym_n);

}

void CBsp::SetKnot()
{
double x[N];
double y[N];
for (int i=0;i<=m_n-2;i++)
{
x[i]=(m_Poly[i+1].x-m_Poly[i].x)*(m_Poly[i+1].x-m_Poly[i].x);
y[i]=(m_Poly[i+1].y-m_Poly[i].y)*(m_Poly[i+1].y-m_Poly[i].y);
}
m_u[4]=sqrt(x[1]+y[1]);
for (int i=5;i {
m_u[i]=m_u[i-1]+sqrt(x[i-3]+y[i-3]);
}
m_u[1]=m_u[4];
m_u[2]=m_u[4];
m_u[3]=m_u[4];
m_u[m_n+2]=m_u[m_n+1];
m_u[m_n+3]=m_u[m_n+1];
m_u[m_n+4]=m_u[m_n+1];
}

double CBsp::baseFunc(int i int k double u)
{
if (k==1)
{
if ((u>=m_u[i])&&(u return 1;
else
return 0;
}
if (k==4)
if (i==m_n&&u==m_u[m_n+1])
return 1;
return divide((u-m_u[i])(m_u[i+k-1]-m_u[i]))*baseFunc(ik-1u)+
divide((m_u[i+k]-u)(m_u[i+k]-m_u[i+1]))*baseFunc(i+1k-1u);

}

double CBsp::divide(double x double y)
{
if (y==0)
return 0;
else
return x/y;
}
 

void CBsp::GetKnot(CPoint* polyint ndouble* _u)//用数据点得到节点向量
{
double x[N];
double y[N];
for (int i=0;i<=n-2;i++)
{
x[i]=(poly[i+1].x-poly[i].x)*(poly[i+1].x-poly[i].x);
y[i]=(poly[i+1].y-poly[i].y)*(poly[i+1].y-poly[i].y);
}
_u[4]=0;
for (int i=5;i<=n+3;i++)
{
_u[i]=_u[i-1]+sqrt(x[i-5]+y[i-5]);
}
_u[1]=_u[4];
_u[2]=_u[4];
_u[3]=_u[4];
_u[n+4]=_u[n+3];
_u[n+5]=_u[n+3];
_u[n+6]=_u[n+3];
}

voi

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     196608  2011-03-12 21:19  visualizeANNANN.dll

     文件      35890  2011-08-01 22:09  visualizeANNANN.h

     文件      18740  2011-03-12 21:19  visualizeANNANN.lib

     文件       8426  2011-03-12 21:19  visualizeANNANNperf.h

     文件       6497  2011-03-12 21:19  visualizeANNANNx.h

     文件     196608  2011-03-12 21:19  visualizeANN.dll

     文件      35890  2011-08-01 22:09  visualizeANN.h

     文件      18740  2011-03-12 21:19  visualizeANN.lib

     文件       8426  2011-03-12 21:19  visualizeANNperf.h

     文件       6497  2011-03-12 21:19  visualizeANNx.h

     文件     795486  2017-05-10 21:35  visualizeird.obj

     文件       4116  2017-01-19 11:03  visualizeBsp.cpp

     文件        886  2017-01-16 10:13  visualizeBsp.h

     文件         60  2013-07-22 01:18  visualizeClassDiagram.cd

     文件     147241  2017-06-25 17:29  visualizeDebugfc.obj

     文件     194289  2017-07-05 11:39  visualizeDebugMainFrm.obj

     文件     174317  2017-07-05 11:39  visualizeDebugMenuFormView.obj

     文件     942019  2017-06-23 22:04  visualizeDebugstdafx.obj

     文件    2976768  2017-07-05 11:43  visualizeDebugvc120.idb

     文件    7335936  2017-07-05 11:42  visualizeDebugvc120.pdb

     文件       5015  2017-06-25 15:28  visualizeDebugVector.obj

     文件     194150  2017-07-05 11:39  visualizeDebugVectorModel.obj

     文件       1648  2017-06-23 22:01  visualizeDebugvisualize.Build.CppClean.log

     文件        430  2017-09-21 09:47  visualizeDebugvisualize.log

     文件     194579  2017-07-05 11:39  visualizeDebugvisualize.obj

     文件   47448064  2017-06-23 22:04  visualizeDebugvisualize.pch

     文件      78432  2017-06-25 15:28  visualizeDebugvisualize.res

     文件      12172  2017-07-05 11:43  visualizeDebugvisualize.tlogcl.command.1.tlog

     文件     218060  2017-07-06 16:49  visualizeDebugvisualize.tlogCL.read.1.tlog

     文件      10012  2017-09-21 09:47  visualizeDebugvisualize.tlogCL.write.1.tlog

............此处省略68个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)