コード例 #1
0
ファイル: Fixer.cs プロジェクト: Grymm6/cgfFixer
        DataStream_p3s_c4b_t2s Fix_p3f_c4b_t2s(DataStream_p3f_c4b_t2s p3f_c4b_t2s)
        {
            DataStream_p3s_c4b_t2s p3s_c4b_t2s = new DataStream_p3s_c4b_t2s();

            for (int i = 0; i < p3f_c4b_t2s.p3f_c4b_t2sElem.Count; i++)
            {
                DataStream_p3s_c4b_t2s_Elem elem = new DataStream_p3s_c4b_t2s_Elem();
                elem.bgra = p3f_c4b_t2s.p3f_c4b_t2sElem[i].bgra;
                elem.uv   = p3f_c4b_t2s.p3f_c4b_t2sElem[i].uv;

                elem.pos[0] = HalfHelper.SingleToHalf(p3f_c4b_t2s.p3f_c4b_t2sElem[i].pos[0]).value;
                elem.pos[1] = HalfHelper.SingleToHalf(p3f_c4b_t2s.p3f_c4b_t2sElem[i].pos[1]).value;
                elem.pos[2] = HalfHelper.SingleToHalf(p3f_c4b_t2s.p3f_c4b_t2sElem[i].pos[2]).value;
                elem.pos[3] = HalfHelper.SingleToHalf(1.0f).value;

                p3s_c4b_t2s.p3s_c4b_t2sElem.Add(elem);
            }
            return(p3s_c4b_t2s);
        }
コード例 #2
0
ファイル: Fixer.cs プロジェクト: Grymm6/cgfFixer
        File_ChCr_746 FixMeshes(File_ChCr_746 chCrFile)
        {
            Console.WriteLine(chCrFile.filePath);
            //fix mesh
            for (int i = 0; i < chCrFile.chunks.Count; i++)
            {
                if (chCrFile.chunks[i].type == 0x00001000)
                {
                    Chunk_Mesh_801 chunkMesh = new Chunk_Mesh_801(chCrFile.chunks[i].content);

                    //fix p3s_c4b_t2s
                    int p3s_c4b_t2s_ChunkID = chunkMesh.Get_p3s_c4b_t2s_ChunkID();
                    if (p3s_c4b_t2s_ChunkID != 0)
                    {
                        Console.Write(".");
                        Chunk_DataStream_800 dataStreamChunk = new Chunk_DataStream_800(chCrFile.GetChunkById((uint)p3s_c4b_t2s_ChunkID).content);
                        if (dataStreamChunk.nElementSize == 16)
                        {
                            DataStream_p3s_c4b_t2s p3s_c4b_t2sDataStream = new DataStream_p3s_c4b_t2s(dataStreamChunk.nCount, dataStreamChunk.dataStream);
                            p3s_c4b_t2sDataStream = Fix_p3s_c4b_t2s(p3s_c4b_t2sDataStream, chunkMesh.GetBboxMin(), chunkMesh.GetBboxMax());

                            p3s_c4b_t2sDataStream.Serialize();
                            dataStreamChunk.dataStream = p3s_c4b_t2sDataStream.serialized;

                            dataStreamChunk.Serialize();
                            for (int j = 0; j < chCrFile.chunks.Count; j++)
                            {
                                if (chCrFile.chunks[j].chunkId == (uint)p3s_c4b_t2s_ChunkID)
                                {
                                    chCrFile.chunks[j].content = dataStreamChunk.serialized;
                                }
                            }
                        }
                        //skins since alpha 3.1 use p3f_c4b_t2s
                        if (dataStreamChunk.nElementSize == 20)
                        {
                            DataStream_p3f_c4b_t2s p3f_c4b_t2sDataStream = new DataStream_p3f_c4b_t2s(dataStreamChunk.nCount, dataStreamChunk.dataStream);
                            DataStream_p3s_c4b_t2s p3s_c4b_t2sDataStream = new DataStream_p3s_c4b_t2s();
                            p3s_c4b_t2sDataStream = Fix_p3f_c4b_t2s(p3f_c4b_t2sDataStream);

                            p3s_c4b_t2sDataStream.Serialize();
                            dataStreamChunk.dataStream   = p3s_c4b_t2sDataStream.serialized;
                            dataStreamChunk.nElementSize = p3s_c4b_t2sDataStream.GetElementSize();

                            dataStreamChunk.Serialize();
                            for (int j = 0; j < chCrFile.chunks.Count; j++)
                            {
                                if (chCrFile.chunks[j].chunkId == (uint)p3s_c4b_t2s_ChunkID)
                                {
                                    chCrFile.chunks[j].content = dataStreamChunk.serialized;
                                    chCrFile.chunks[j].size    = dataStreamChunk.GetSize();
                                }
                            }
                        }

                        //fix tangents
                        int tangents_ChunkID = chunkMesh.GetTangentsChunkID();
                        if (tangents_ChunkID != 0)
                        {
                            Console.Write(".");
                            dataStreamChunk = new Chunk_DataStream_800(chCrFile.GetChunkById((uint)tangents_ChunkID).content);
                            DataStream_Tangents_SC tangentsDataStream_SC = new DataStream_Tangents_SC(dataStreamChunk.nCount, dataStreamChunk.dataStream);
                            DataStream_Tangents    tangentsDataStream    = new DataStream_Tangents();
                            tangentsDataStream = FixTangents(tangentsDataStream_SC);

                            tangentsDataStream.Serialize();
                            dataStreamChunk.dataStream = tangentsDataStream.serialized;

                            dataStreamChunk.nElementSize = tangentsDataStream.GetElementSize();

                            dataStreamChunk.Serialize();
                            for (int j = 0; j < chCrFile.chunks.Count; j++)
                            {
                                if (chCrFile.chunks[j].chunkId == (uint)tangents_ChunkID)
                                {
                                    chCrFile.chunks[j].content = dataStreamChunk.serialized;
                                    chCrFile.chunks[j].size    = dataStreamChunk.GetSize();
                                }
                            }
                        }

                        //erase normals
                        chunkMesh.nStreamChunkID[1] = 0;
                    }

                    chunkMesh.Serialize();
                    chCrFile.chunks[i].content = chunkMesh.serialized;
                }
            }
            //fix datastreams chunks elemsizes
            for (int i = 0; i < chCrFile.chunks.Count; i++)
            {
                if (chCrFile.chunks[i].type == 0x00001016)
                {
                    Chunk_DataStream_800 dataStreamChunk = new Chunk_DataStream_800(chCrFile.chunks[i].content);
                    dataStreamChunk.Serialize();
                    chCrFile.chunks[i].content = dataStreamChunk.serialized;
                }
            }
            Console.WriteLine();
            chCrFile.RecalculateChunksPositions();
            return(chCrFile);
        }