601
社区成员
发帖
与我相关
我的任务
分享
void GCObjModel0::preProcess()
{
FILE* _file = fopen(m_strFileName,"rb");
char strLine[256];
do{
if(fgets(strLine,256,_file)==NULL)
break;
std::string lineCheck(strLine);
trim(lineCheck);
if(lineCheck.empty())
continue;
std::string flag(strLine,1);
if(flag=="v")
VERTEXCOUNT++;
if(flag=="f")
DELTACOUNT++;
}while(1);
fclose(_file);
//DELTAS = new GCTriangle3DX*[DELTACOUNT];
VERTEXES = new GCPosition4D*[VERTEXCOUNT];
}
void GCObjModel0::postProcess()
{
if(VERTEXES == NULL)
return;
for(int i =0;i<VERTEXCOUNT;i++)
delete VERTEXES[i];
delete VERTEXES;
VERTEXES = NULL;
GCDeltaModelImpl::postProcess();
}
int GCObjModel0::createDisplayList()
{
FILE* file = fopen(m_strFileName,"rb");
char strLine[256];
float vertexdata[3];
int faceVIndex[3];
char nosense; //数据行第一个符号
int VERTEXREAD = 0;
int nDisplayListID = glGenLists(1);
glNewList(nDisplayListID, GL_COMPILE);
glBegin(GL_TRIANGLES);
do{
if(fgets(strLine,256,file)==NULL)
break;
std::string lineCheck(strLine);
trim(lineCheck);
if(lineCheck.empty())
continue;
std::string flag(strLine,1);
if(flag=="v")
{
//20130226 1643 屏蔽obj法矢读取
sscanf(strLine,"%s %f %f %f"
,&nosense
,vertexdata
,vertexdata+1
,vertexdata+2
);
GCPosition4D* p = new GCPosition4D(vertexdata[0],vertexdata[1],vertexdata[2]);
checkMaxMin(vertexdata[0],vertexdata[1],vertexdata[2]);
VERTEXES[VERTEXREAD++] = p;
}
if(flag=="f")
{
sscanf(strLine,"%s %d %d %d"
,&nosense
,faceVIndex
,faceVIndex+1
,faceVIndex+2);
GCPosition4D* p1 = VERTEXES[faceVIndex[0]-1];
GCPosition4D* p2 = VERTEXES[faceVIndex[1]-1];
GCPosition4D* p3 = VERTEXES[faceVIndex[2]-1];
GCVector4D normal = (GCVector4D(*p1,*p2)|GCVector4D(*p1,*p3)).toUnitVector();
glNormal3d(normal.X(),normal.Y(),normal.Z());
glVertex3d(p1->X(),p1->Y(),p1->Z());
glVertex3d(p2->X(),p2->Y(),p2->Z());
glVertex3d(p3->X(),p3->Y(),p3->Z());
}
}while(1);
glEnd();
glEndList();
fclose(file);
return nDisplayListID;
}