本文整理汇总了C++中VNode::GetTMController方法的典型用法代码示例。如果您正苦于以下问题:C++ VNode::GetTMController方法的具体用法?C++ VNode::GetTMController怎么用?C++ VNode::GetTMController使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VNode
的用法示例。
在下文中一共展示了VNode::GetTMController方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnReadOnePart
/*********************************************************************************
*Function: OnReadOnePart(FILE* fp)
*Description: 导入网格模型中的一个part,并挂载到场景结构中
*Input: fp-文件指针
*Return: 成功true 否则false
*CREATED BY: [8/17/2015 niewenchao]
**********************************************************************************/
bool VImport::OnReadOnePart(FILE* fp)
{
char buf[512];
fscanf(fp,"#Part\n");
fscanf(fp,"n %s\n",buf); // mesh的名称
VMesh* m_mesh = new VMesh();
VNode* node = m_pScence->CreateNode(m_mesh);
node->SetNodeName(buf);
float mat[12];
fscanf(fp,"m %f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f\n", //读取对象矩阵
&mat[0],&mat[1],&mat[2],&mat[3],&mat[4],&mat[5],&mat[6],
&mat[7],&mat[8],&mat[9],&mat[10],&mat[11]);
VMatrix3* pmat = new VMatrix3;
pmat->SetValue(mat);
node->GetTMController()->SetTM(pmat);
// 问题,忽略最后一个字符行
fscanf(fp,"t %s\n",buf);
bool nExist=false;
bool tExist=false;
while(fscanf(fp,"%s",buf) != EOF && strcmp(buf,"#PartEnd") != 0) {
switch(buf[0]){
case 'v':
fseek(fp,-1L,SEEK_CUR);
OnImportVertex(fp,m_mesh); //导入顶点数据
break;
case 'n':
nExist = true;
fseek(fp,-1L,SEEK_CUR);
OnImportNormal(fp,m_mesh); //导入法线数据
break;
case 't':
tExist = true;
fseek(fp,-1L,SEEK_CUR);
OnImportTVert(fp,m_mesh); //导入纹理顶点数据
break;
case 'f':
fseek(fp,-1L,SEEK_CUR);
OnImportFace(fp,m_mesh,nExist,tExist); //导入面片数据
break;
}
}
fscanf(fp,"\n");
m_mesh->ComputeBoundBox();
return true;
}
示例2: DoImport
/*********************************************************************************
*Function:DoImport(string fileName)
*Description:导入VCC模型文件,目前支持仅含有网格数据的VCC模型,材质、光照、骨骼动作数据待加入
*Input: fileName-模型文件路径
*Return: 导入成功返回true 否则false
*CREATED BY: [8/17/2015 niewenchao]
**********************************************************************************/
bool VImport::DoImport(string fileName)
{
string ext = fileName.substr(fileName.rfind('.')+1);
if (ext == "VCC" || ext == "vcc")
{
FILE* fp = fopen(fileName.c_str(), "r+");
if (NULL == fp) return false;
char buf[512];
// #Head------------->#HeadEnd
bool bone_exist = false;
bool skin_exist = false;
bool mesh_exist = false;
bool mtl_exist =false;
while(fscanf(fp,"%[^\n]\n",buf))
{
if(0 == strcmp(buf, "#HeadEnd"))
{
break;
}
switch(buf[0])
{
case 'b':bone_exist = true;break;
case 's':skin_exist = true;break;
case 'm':mesh_exist = true;break;
case 't':mtl_exist = true;break;
}
}
// #Mesh----------------->#MeshEnd
if(mesh_exist)
return OnImportMesh(fp);
}
else
{
Assimp::Importer Importer;
const aiScene* pScene = Importer.ReadFile(fileName,aiProcess_JoinIdenticalVertices);
if (pScene)
{
for (int k=0;k<pScene->mNumMeshes;k++)
{
const aiMesh* paiMesh = pScene->mMeshes[k];
VMesh* mesh = new VMesh; //新建一个三角风格的对象
VNode* node = m_pScence->CreateNode(mesh); //创建一个节点并挂载到场景跟节点中
VMatrix3* pmat = new VMatrix3;
node->GetTMController()->SetTM(pmat);
int vNum = paiMesh->mNumVertices;
mesh->SetNumVerts(vNum);
for (int i=0;i<vNum;i++)
{
mesh->SetVert(i,paiMesh->mVertices[i].x,paiMesh->mVertices[i].y,paiMesh->mVertices[i].z); //设置顶点坐标
}
int fNum = paiMesh->mNumFaces;
mesh->SetNumFaces(fNum); //设置网格面片数目
for (int i=0;i<fNum;i++)
{
mesh->SetFace(i, (paiMesh->mFaces[i].mIndices[0]), (paiMesh->mFaces[i].mIndices[1]), (paiMesh->mFaces[i].mIndices[2]));
}
mesh->ComputeBoundBox();
}
}
else
{
printf("Error parsing '%s': '%s'\n", fileName.c_str(), Importer.GetErrorString());
return false;
}
return true;
}
}