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); } }
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); }
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; }
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); }
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); }
public void Render() { GL.Color3(1.0f, 1.0f, 1.0f); //reset color to white F3DUtils.setUpWrapST(0, 0); //reset wrap data rendererObject.Render(); }
public void gsSPSetGeometryMode(uint mode) { geommode |= mode; F3DUtils.fixGeomModeStart(geommode); }
public void gsSPClearGeometryMode(uint mode) { geommode &= 0xFFFFFFFF ^ (mode); F3DUtils.fixGeomModeStart(geommode); }