티스토리 뷰
[원글 - 2010년 이글루스]
하드 날리면서... 소실된 줄 알았는데... 다행히 학교 개인 서버에 백업이 되어 있던걸 발견;;;
또 날리기전에 백업용으로 일단 저장;;;
참고로 Maya는 float이 8바이트 double형이었던걸로 기억함...
그래서 텍스트로 뽑아서 별도로 데이터 파일 만들었던거 같음;;
// 오브젝트의 선택
select -ado;
string $TotalObject[];
$TotalObject = `ls -sl`;
int $Numobj = `size $TotalObject`;
if($Numobj == 0)
{
print("Nothing selected!");
}
string $obj;
// obj를 하나씩 보면서
for($obj in $TotalObject)
{
// 필요한 데이터를 저장할 변수들
int $FaceVertex[]; // Vertex들의 basic Index정보
float $indexedVertex[]; // 정렬된 vertex 정보 저장
float $indexedUVs[]; // 정렬된 uv 정보 저장
float $DataToExport[]; // 최종적으로 출력할 정보 저장
select -r $obj;
string $faceTovertex[];
// face를 구성하는 vertex 정보를 빼옵니다 (리턴값은 string)
$faceTovertex = `polyInfo -fv`;
int $size;
$size = `size $faceTovertex`;
int $NumFaces = $size; // face는 몇 개인가?
// int $vertices = $size*3;
int $i;
// 아래 for문의 과정은 Basic Index Buffer를 작성한다고 생각하면 됩니다
for($i=0;$i<$size;$i++)
{
string $tempfaceTovertex[];
tokenize($faceTovertex[$i],$tempfaceTovertex);
// tokenize이 결과
// $tempfaceTovertex[0] == "face"
// $tempfaceTovertex[1] == "$i:"
// $tempfaceTovertex[2] == Vertex Number by int
// 이하 동문
int $temp;
$temp = (int) $tempfaceTovertex[2];
$FaceVertex[$i*3] = $temp;
$temp = (int) $tempfaceTovertex[4];
$FaceVertex[$i*3+1] = $temp;
$temp = (int) $tempfaceTovertex[3];
$FaceVertex[$i*3+2] = $temp;
}
// 이제부터 vertex의 위치정보를 뽑아봅시다
// 먼저 vertex가 몇 개인지 조사합시다
int $pe[] = `polyEvaluate -v`;
int $NumVertices = $pe[0]; // Vertex의 수 저장
int $TotalVertex = $pe[0];
for($i=0;$i<$size;$i++)
{
float $vtx[];
string $x;
$x = $obj+".vtx["+$FaceVertex[$i*3]+"]";
$vtx = `pointPosition -l $x`;
$indexedVertex[$i*9] = $vtx[0];
$indexedVertex[$i*9+1] = $vtx[1];
$indexedVertex[$i*9+2] = -$vtx[2];
$x = $obj+".vtx["+$FaceVertex[$i*3+1]+"]";
$vtx = `pointPosition -l $x`;
$indexedVertex[$i*9+3] = $vtx[0];
$indexedVertex[$i*9+4] = $vtx[1];
$indexedVertex[$i*9+5] = -$vtx[2];
$x = $obj+".vtx["+$FaceVertex[$i*3+2]+"]";
$vtx = `pointPosition -l $x`;
$indexedVertex[$i*9+6] = $vtx[0];
$indexedVertex[$i*9+7] = $vtx[1];
$indexedVertex[$i*9+8] = -$vtx[2];
}
$size = $NumFaces;
// 이번 과정은 uv 정보를 뽑는 과정입니다
select -r $obj;
for($i=0;$i<$size;$i++)
{
select -r $obj;
float $uv[];
string $x;
string $map[];
$x = $obj+".vtxFace["+$FaceVertex[$i*3]+"]["+$i+"]";
select -r $x;
$map = `polyListComponentConversion -fromVertexFace -toUV`;
$uv = `polyEditUV -q $map[0]`;
$indexedUVs[$i*6] = $uv[0];
$indexedUVs[$i*6+1] = 1-$uv[1];
$x = $obj+".vtxFace["+$FaceVertex[$i*3+1]+"]["+$i+"]";
select -r $x;
$map = `polyListComponentConversion -fromVertexFace -toUV`;
$uv = `polyEditUV -q $map[0]`;
$indexedUVs[$i*6+2] = $uv[0];
$indexedUVs[$i*6+3] = 1-$uv[1];
$x = $obj+".vtxFace["+$FaceVertex[$i*3+2]+"]["+$i+"]";
select -r $x;
$map = `polyListComponentConversion -fromVertexFace -toUV`;
$uv = `polyEditUV -q $map[0]`;
$indexedUVs[$i*6+4] = $uv[0];
$indexedUVs[$i*6+5] = 1-$uv[1];
select -r $obj;
}
select -r $obj;
int $MarkedIndex[];
$size = $size*3;
int $indexPos;
for($i=0;$i<$size;$i++)
{
$indexPos = $FaceVertex[$i];
if($MarkedIndex[$indexPos] == 0)
{
$DataToExport[$indexPos*5] = $indexedVertex[$i*3];
$DataToExport[$indexPos*5+1] = $indexedVertex[$i*3+1];
$DataToExport[$indexPos*5+2] = $indexedVertex[$i*3+2];
$DataToExport[$indexPos*5+3] = $indexedUVs[$i*2];
$DataToExport[$indexPos*5+4] = $indexedUVs[$i*2+1];
$MarkedIndex[$indexPos] = 1;
}
else
{
if(!(($DataToExport[$indexPos*5] == $indexedVertex[$i*3])&&
($DataToExport[$indexPos*5+1] == $indexedVertex[$i*3+1])&&
($DataToExport[$indexPos*5+2] == $indexedVertex[$i*3+2])&&
($DataToExport[$indexPos*5+3] == $indexedUVs[$i*2])&&
($DataToExport[$indexPos*5+4] == $indexedUVs[$i*2+1])))
{
int $j=0;
for($j=$NumVertices;$j<$TotalVertex;$j++)
{
if((($DataToExport[$j*5] == $indexedVertex[$i*3])&&
($DataToExport[$j*5+1] == $indexedVertex[$i*3+1])&&
($DataToExport[$j*5+2] == $indexedVertex[$i*3+2])&&
($DataToExport[$j*5+3] == $indexedUVs[$i*2])&&
($DataToExport[$j*5+4] == $indexedUVs[$i*2+1])))
{
$FaceVertex[$i] = $j;
break;
}
}
if($j>=$TotalVertex)
{
$DataToExport[$TotalVertex*5] = $indexedVertex[$i*3];
$DataToExport[$TotalVertex*5+1] = $indexedVertex[$i*3+1];
$DataToExport[$TotalVertex*5+2] = $indexedVertex[$i*3+2];
$DataToExport[$TotalVertex*5+3] = $indexedUVs[$i*2];
$DataToExport[$TotalVertex*5+4] = $indexedUVs[$i*2+1];
$FaceVertex[$i] = $TotalVertex;
$TotalVertex++;
}
}
}
}
// 여기서부터 파일로 작성하는 부분입니다
string $fileName = "c:/"+$obj+".jk";
$fileId = fopen($fileName,"w");
fprint ($fileId, "Face : "+$NumFaces+"\n"); // mesh의 총 Face수
fprint ($fileId, "Vertex : "+$TotalVertex+"\n"); // mesh의 총 Vertex수
fprint($fileId,"Index : (");
for($i=0;$i<$size;$i++)
{
fprint($fileId,$FaceVertex[$i]);
if($i!=$size-1)
fprint($fileId,",");
}
fprint($fileId,")\n");
for($i=0;$i<$TotalVertex;$i++)
{
string $str = "("+$DataToExport[$i*5]+","+$DataToExport[$i*5+1]+","+$DataToExport[$i*5+2]+","+$DataToExport[$i*5+3]+","+$DataToExport[$i*5+4]+")\n";
fprint($fileId,$str);
}
fclose $fileId;
};
'개발 관련 정리 (구 블로그에서 백업) > 기타' 카테고리의 다른 글
[DirectX] Windows SDK 와 헤더 인쿨르드 (0) | 2018.11.26 |
---|---|
[WEB] JS Event (0) | 2018.11.26 |
MySql C 라이브러리 함수 만들다가 주의점 (0) | 2018.11.26 |
[MAYA 6.5] MEL 스크립트 이용해서 폴리곤 정보 추출하기 - 정점과 인덱스 (0) | 2018.11.26 |
댓글