示例#1
0
 public void SetInitialDataFromLabelName(string labelname)
 {
     Labels.Label f3dlabel = new Labels.Label();
     f3dlabel = Labels.Utils.LabelUtil.findLabelFromName(labelname, "", LakiTool.MISC.Game.gamePath, true);
     if (f3dlabel.labelFound)
     {
         fileName     = f3dlabel.labelFile;
         lines        = System.IO.File.ReadAllLines(f3dlabel.labelFile);
         startCommand = F3DUtils.getIndexFromLineData(f3dlabel.labelLine, lines);
     }
 }
示例#2
0
 public void gsSP1Triangle(int v0, int v1, int v2, int flag)
 {
     F3DUtils.setUpVertColor(vtxbuffer[v0].R, vtxbuffer[v0].G, vtxbuffer[v0].B, vtxbuffer[v0].A, geommode);
     GL.TexCoord2((float)vtxbuffer[v0].S / 32 / x, (float)vtxbuffer[v0].T / 32 / y);
     GL.Vertex3(-vtxbuffer[v0].X >> 4, vtxbuffer[v0].Y >> 4, -vtxbuffer[v0].Z >> 4);
     F3DUtils.setUpVertColor(vtxbuffer[v1].R, vtxbuffer[v1].G, vtxbuffer[v1].B, vtxbuffer[v1].A, geommode);
     GL.TexCoord2((float)vtxbuffer[v1].S / 32 / x, (float)vtxbuffer[v1].T / 32 / y);
     GL.Vertex3(-vtxbuffer[v1].X >> 4, vtxbuffer[v1].Y >> 4, -vtxbuffer[v1].Z >> 4);
     F3DUtils.setUpVertColor(vtxbuffer[v2].R, vtxbuffer[v2].G, vtxbuffer[v2].B, vtxbuffer[v2].A, geommode);
     GL.TexCoord2((float)vtxbuffer[v2].S / 32 / x, (float)vtxbuffer[v2].T / 32 / y);
     GL.Vertex3(-vtxbuffer[v2].X >> 4, vtxbuffer[v2].Y >> 4, -vtxbuffer[v2].Z >> 4);
 }
示例#3
0
        public void Init()
        {
            inited             = true;
            lutmanager.dldata  = lines;
            lutmanager.curFile = fileName;
            lutmanager.fbpath  = LakiTool.MISC.Game.gamePath;
            lutmanager.initF3D();
            LUTc           = lutmanager.luts;
            parser         = new ParseF3D(F3DUtils.getF3DCommandsFromLines(lines), lutmanager.jumpContainer);
            labelsearchers = F3DUtils.getLabelSearchersFromLabelContainer(new Labels.LabelContainer(Labels.Utils.LabelUtil.getLabelListFromModelFile(fileName)), lines);

            GL.Enable(EnableCap.Texture2D);

            displayListGenerated = false;
        }
示例#4
0
        public void gsDPSetTextureImage(Bitmap bitmap)
        {
            GL.End();
            BitmapData data = new BitmapData();

            data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            GL.BindTexture(TextureTarget.Texture2D, 0);
            x = data.Width;
            y = data.Height;
            GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
            bitmap.UnlockBits(data);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMinFilter.Linear);
            F3DUtils.setUpWrapST(wraps, wrapt);
            GL.Begin(PrimitiveType.Triangles);
        }
示例#5
0
        public static OBJFile.o getObjFromDL(LUTs inputData, string[] lines, int offset = 0, string objName = "default")
        {
            string[] vals;
            uint     vertSet = (uint)(vAdr == 0?1:0);

            OBJFile.o outObjFile = new OBJFile.o();
            outObjFile.oname = objName;
            uint lastVertAdr = OBJFileUtil.vAdr;
            int  n = -1;
            int  x = 0, y = 0;

            foreach (string line in lines)
            {
                n++;
                if (n < offset - 1)
                {
                    continue;
                }
                if (!(line.Contains("gsSP") || line.Contains("gsDP")))
                {
                    continue;
                }
                vals = MISCUtils.ParseAsmbd(line);
                if (vals[0] == "gsSPEndDisplayList" && offset > 0)
                {
                    break;
                }
                if (vals[0] == "gsSP1Triangle")
                {
                    uint v0 = (uint)MISCUtils.ParseInt(vals[1]);
                    uint v1 = (uint)MISCUtils.ParseInt(vals[2]);
                    uint v2 = (uint)MISCUtils.ParseInt(vals[3]);
                    v0 += lastVertAdr;
                    v1 += lastVertAdr;
                    v2 += lastVertAdr;
                    outObjFile.faces.Add(new OBJFile.f(new OBJFile.fFmt(v0, v0, v0), new OBJFile.fFmt(v1, v1, v1), new OBJFile.fFmt(v2, v2, v2)));
                }
                if (vals[0] == "gsSP2Triangles")
                {
                    uint v0 = (uint)MISCUtils.ParseInt(vals[1]);
                    uint v1 = (uint)MISCUtils.ParseInt(vals[2]);
                    uint v2 = (uint)MISCUtils.ParseInt(vals[3]);
                    v0 += lastVertAdr;
                    v1 += lastVertAdr;
                    v2 += lastVertAdr;
                    outObjFile.faces.Add(new OBJFile.f(new OBJFile.fFmt(v0, v0, v0), new OBJFile.fFmt(v1, v1, v1), new OBJFile.fFmt(v2, v2, v2)));
                    v0  = (uint)MISCUtils.ParseInt(vals[5]);
                    v1  = (uint)MISCUtils.ParseInt(vals[6]);
                    v2  = (uint)MISCUtils.ParseInt(vals[7]);
                    v0 += lastVertAdr;
                    v1 += lastVertAdr;
                    v2 += lastVertAdr;
                    outObjFile.faces.Add(new OBJFile.f(new OBJFile.fFmt(v0, v0, v0), new OBJFile.fFmt(v1, v1, v1), new OBJFile.fFmt(v2, v2, v2)));
                }
                if (vals[0] == "gsSPVertex")
                {
                    lastVertAdr += vertSet;
                    Vtx[] verteces = F3DUtils.getVtxFromName(vals[1], inputData.vtxLUT).ToArray();
                    for (int v = MISCUtils.ParseInt(vals[3]); v < MISCUtils.ParseInt(vals[2]) + MISCUtils.ParseInt(vals[3]); v++)
                    {
                        outObjFile.verts.Add(new OBJFile.v(verteces[v].X, verteces[v].Y, verteces[v].Z));
                        outObjFile.coords.Add(new OBJFile.vt(verteces[v].S, verteces[v].T, x, y));
                        outObjFile.normals.Add(new OBJFile.vn(verteces[v].R, verteces[v].G, verteces[v].B));
                    }
                    vertSet = (uint)MISCUtils.ParseInt(vals[2]);
                }
                if (vals[0] == "gsDPSetTextureImage")
                {
                    x = F3DUtils.getTexFromName(vals[4], inputData.texLUT).Size.Width;
                    y = F3DUtils.getTexFromName(vals[4], inputData.texLUT).Size.Height;
                }
            }
            OBJFileUtil.vAdr = lastVertAdr + vertSet;
            return(outObjFile);
        }
示例#6
0
 public void Render()
 {
     GL.Color3(1.0f, 1.0f, 1.0f); //reset color to white
     F3DUtils.setUpWrapST(0, 0);  //reset wrap data
     rendererObject.Render();
 }
示例#7
0
 public void gsSPSetGeometryMode(uint mode)
 {
     geommode |= mode;
     F3DUtils.fixGeomModeStart(geommode);
 }
示例#8
0
 public void gsSPClearGeometryMode(uint mode)
 {
     geommode &= 0xFFFFFFFF ^ (mode);
     F3DUtils.fixGeomModeStart(geommode);
 }