/// <summary> /// /// </summary> /// <param name="objFileStream"></param> /// <returns></returns> public static HSD_TOBJ GenerateEmblemIconImage(EmblemModel model) { // normalize range foreach (var ve in model.v) { ve[0] = ((ve[0] - model.xRange.X) / Math.Abs(model.xRange.Y - model.xRange.X)) * model.aspectX; ve[2] = (1 - (ve[2] - model.yRange.X) / Math.Abs(model.xRange.Y - model.yRange.X)) * model.aspectY; } using (Bitmap b = new Bitmap(80, 64)) { var brushback = new SolidBrush(Color.Black); var brush = new SolidBrush(Color.White); int icoWidth = 64, icoHeight = 64; if (model.aspectX < 1) { icoWidth = b.Height; icoHeight = b.Height; } if (model.aspectY < 1) { icoWidth = b.Width; icoHeight = b.Width; } icoWidth -= icoWidth / 9; icoHeight -= icoHeight / 9; int xoff = b.Width / 2 - icoWidth / 2; int yoff = b.Height / 2 + icoHeight / 2; using (Graphics g = Graphics.FromImage(b)) { g.FillRectangle(brushback, 0, 0, b.Width, b.Height); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; GraphicsPath path = new GraphicsPath(); foreach (var ve in model.f) { path.AddPolygon(new PointF[] { new PointF(xoff + model.v[ve[0] - 1][0] * icoWidth, yoff - model.v[ve[0] - 1][2] * icoHeight), new PointF(xoff + model.v[ve[1] - 1][0] * icoWidth, yoff - model.v[ve[1] - 1][2] * icoHeight), new PointF(xoff + model.v[ve[2] - 1][0] * icoWidth, yoff - model.v[ve[2] - 1][2] * icoHeight) }); } g.FillPath(brush, path); } return(TOBJConverter.BitmapToTOBJ(b, HSDRaw.GX.GXTexFmt.I4, HSDRaw.GX.GXTlutFmt.IA8)); } }
/// <summary> /// /// </summary> /// <param name="objFileStream"></param> /// <returns></returns> public static HSD_JOBJ GenerateEmblemModel(EmblemModel model) { List <GX_Vertex> vertexList = new List <GX_Vertex>(); foreach (var ve in model.f) { foreach (var i in ve) { var x = ((model.v[i - 1][0] - model.xRange.X) / Math.Abs(model.xRange.Y - model.xRange.X)) * model.aspectX; var y = (1 - (model.v[i - 1][2] - model.yRange.X) / Math.Abs(model.xRange.Y - model.yRange.X)) * model.aspectY; vertexList.Add(new GX_Vertex() { POS = new GXVector3(x * 6 - 3, y * 6 - 3, 0) }); } } HSD_JOBJ jobj = new HSD_JOBJ(); jobj.Flags = JOBJ_FLAG.CLASSICAL_SCALING | JOBJ_FLAG.XLU; jobj.SX = 3; jobj.SY = 3; jobj.SZ = 3; jobj.TZ = 67.4f; HSD_DOBJ dobj = new HSD_DOBJ(); dobj.Mobj = new HSD_MOBJ() { RenderFlags = RENDER_MODE.CONSTANT | RENDER_MODE.NO_ZUPDATE | RENDER_MODE.XLU, Material = new HSD_Material() { Alpha = 0.6f, Shininess = 50, DiffuseColor = Color.FromArgb(255, 128, 128, 230), SpecularColor = Color.FromArgb(255, 255, 255, 255), AmbientColor = Color.FromArgb(255, 128, 128, 128), } }; jobj.Dobj = dobj; POBJ_Generator pobjGen = new POBJ_Generator(); GXAttribName[] attrs = new GXAttribName[] { GXAttribName.GX_VA_POS, GXAttribName.GX_VA_NULL }; dobj.Pobj = pobjGen.CreatePOBJsFromTriangleList(vertexList, attrs, null); dobj.Pobj.Flags = 0; pobjGen.SaveChanges(); return(jobj); }