티스토리 뷰

[원글 - 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;
};


댓글
최근에 올라온 글
Total
Today
Yesterday
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31