From 6ee3c2d93441f1a5b212ca6d27a36a825e085883 Mon Sep 17 00:00:00 2001 From: StratiX0 Date: Mon, 25 Mar 2024 16:40:12 +0100 Subject: [PATCH] 3d --- enginecustom/applicationclass.cpp | 7 +- enginecustom/cube.mtl | 22 ++ enginecustom/enginecustom.vcxproj | 11 + enginecustom/modelclass.cpp | 71 +++++- enginecustom/modelclass.h | 24 +- enginecustom/objects/New Bitmap Image.mtl | 0 enginecustom/objects/cube.txt | 40 ++++ enginecustom/objects/cylinder.mtl | 2 + enginecustom/objects/cylinder_obj.fbx | Bin 0 -> 13276 bytes enginecustom/output.txt | 262 ++++++++++++++++++++++ 10 files changed, 434 insertions(+), 5 deletions(-) create mode 100644 enginecustom/cube.mtl create mode 100644 enginecustom/objects/New Bitmap Image.mtl create mode 100644 enginecustom/objects/cube.txt create mode 100644 enginecustom/objects/cylinder.mtl create mode 100644 enginecustom/objects/cylinder_obj.fbx create mode 100644 enginecustom/output.txt diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 3084822..ff5e4d2 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -23,6 +23,7 @@ ApplicationClass::~ApplicationClass() bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) { char modelFilename[128]; + char outputModelFilename[128]; char textureFilename[128]; bool result; @@ -54,7 +55,9 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) m_Camera->SetRotation(0.0f, 0.0f, 10.0f); // Set the file name of the model. - strcpy_s(modelFilename, "cube.txt"); + strcpy_s(modelFilename, "cube.obj"); + + strcpy_s(outputModelFilename, "output.txt"); // Set the name of the texture file that we will be loading. strcpy_s(textureFilename, "stone01.tga"); @@ -62,7 +65,7 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) // Create and initialize the model object. m_Model = new ModelClass; - result = m_Model->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, textureFilename); + result = m_Model->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, outputModelFilename, textureFilename); if (!result) { MessageBox(hwnd, L"Could not initialize the model object.", L"Error", MB_OK); diff --git a/enginecustom/cube.mtl b/enginecustom/cube.mtl new file mode 100644 index 0000000..d189f87 --- /dev/null +++ b/enginecustom/cube.mtl @@ -0,0 +1,22 @@ +# Blender MTL File: 'None' +# Material Count: 2 + +newmtl Material +Ns 323.999994 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 + +newmtl Material.001 +Ns 225.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.000000 0.002280 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 diff --git a/enginecustom/enginecustom.vcxproj b/enginecustom/enginecustom.vcxproj index aa0bfa9..369e28f 100644 --- a/enginecustom/enginecustom.vcxproj +++ b/enginecustom/enginecustom.vcxproj @@ -45,6 +45,7 @@ + @@ -73,6 +74,16 @@ + + + Document + + + + + Document + + 17.0 Win32Proj diff --git a/enginecustom/modelclass.cpp b/enginecustom/modelclass.cpp index 25846f3..3debce5 100644 --- a/enginecustom/modelclass.cpp +++ b/enginecustom/modelclass.cpp @@ -19,12 +19,14 @@ ModelClass::~ModelClass() { } -bool ModelClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* modelFilename, char* textureFilename) +bool ModelClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* modelFilename, char* outputModelFilename, char* textureFilename) { bool result; + ConvertObjToTxt(modelFilename, outputModelFilename); + // Load in the model data. - result = LoadModel(modelFilename); + result = LoadModel(outputModelFilename); if (!result) { return false; @@ -310,6 +312,71 @@ bool ModelClass::LoadModel(char* filename) return true; } +void ModelClass::ConvertObjToTxt(const std::string& inputFilename, const std::string& outputFilename) { + std::ifstream inputFile(inputFilename); + std::ofstream outputFile(outputFilename); + + std::string line; + std::vector positions; + std::vector texCoords; + std::vector normals; + std::vector vertices; + + while (std::getline(inputFile, line)) { + std::istringstream iss(line); + std::string prefix; + + if (!(iss >> prefix)) { break; } + + if (prefix == "v") { + XMFLOAT3 pos; + if (!(iss >> pos.x >> pos.y >> pos.z)) { break; } + positions.push_back(pos); + } + else if (prefix == "vt") { + XMFLOAT2 texCoord; + if (!(iss >> texCoord.x >> texCoord.y)) { break; } + texCoords.push_back(texCoord); + } + else if (prefix == "vn") { + XMFLOAT3 normal; + if (!(iss >> normal.x >> normal.y >> normal.z)) { break; } + normals.push_back(normal); + } + else if (prefix == "f") { + ModelType v; + char slash; // To skip slashes + int posIndex, texIndex, normIndex; + + for (int i = 0; i < 3; ++i) { // For each vertex of the face + if (!(iss >> posIndex >> slash >> texIndex >> slash >> normIndex)) { break; } + + // .obj indices start at 1, so subtract 1 to get 0-based indices + v.x = positions[posIndex - 1].x; + v.y = positions[posIndex - 1].y; + v.z = positions[posIndex - 1].z; + v.tu = texCoords[texIndex - 1].x; + v.tv = texCoords[texIndex - 1].y; + v.nx = normals[normIndex - 1].x; + v.ny = normals[normIndex - 1].y; + v.nz = normals[normIndex - 1].z; + + vertices.push_back(v); + } + } + } + + // Write to output file in the desired format + outputFile << "Vertex Count: " << vertices.size() << "\n\n"; + outputFile << "Data:\n\n"; + + for (const ModelType& v : vertices) { + outputFile << v.x << " " << v.y << " " << v.z << " "; + outputFile << v.tu << " " << v.tv << " "; + outputFile << v.nx << " " << v.ny << " " << v.nz << "\n"; + } +} + void ModelClass::ReleaseModel() { if (m_model) diff --git a/enginecustom/modelclass.h b/enginecustom/modelclass.h index 9ffdcda..a2578e0 100644 --- a/enginecustom/modelclass.h +++ b/enginecustom/modelclass.h @@ -8,6 +8,9 @@ #include #include #include +#include +#include +#include using namespace DirectX; using namespace std; @@ -38,13 +41,30 @@ private: float nx, ny, nz; }; + struct Vertex { + float x, y, z; + }; + + struct Texture { + float u, v; + }; + + struct Normal { + float nx, ny, nz; + }; + + struct Face { + int v1, v2, v3; + int t1, t2, t3; + int n1, n2, n3; + }; public: ModelClass(); ModelClass(const ModelClass&); ~ModelClass(); - bool Initialize(ID3D11Device*, ID3D11DeviceContext*, char*, char*); + bool Initialize(ID3D11Device*, ID3D11DeviceContext*, char*, char*, char*); void Shutdown(); void Render(ID3D11DeviceContext*); @@ -62,6 +82,8 @@ private: bool LoadModel(char*); void ReleaseModel(); + void ConvertObjToTxt(const std::string&, const std::string&); + private: ID3D11Buffer* m_vertexBuffer, * m_indexBuffer; int m_vertexCount, m_indexCount; diff --git a/enginecustom/objects/New Bitmap Image.mtl b/enginecustom/objects/New Bitmap Image.mtl new file mode 100644 index 0000000..e69de29 diff --git a/enginecustom/objects/cube.txt b/enginecustom/objects/cube.txt new file mode 100644 index 0000000..00b34ba --- /dev/null +++ b/enginecustom/objects/cube.txt @@ -0,0 +1,40 @@ +Vertex Count: 36 + +Data: + +-1.0 1.0 -1.0 0.0 0.0 0.0 0.0 -1.0 + 1.0 1.0 -1.0 1.0 0.0 0.0 0.0 -1.0 +-1.0 -1.0 -1.0 0.0 1.0 0.0 0.0 -1.0 +-1.0 -1.0 -1.0 0.0 1.0 0.0 0.0 -1.0 + 1.0 1.0 -1.0 1.0 0.0 0.0 0.0 -1.0 + 1.0 -1.0 -1.0 1.0 1.0 0.0 0.0 -1.0 + 1.0 1.0 -1.0 0.0 0.0 1.0 0.0 0.0 + 1.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 + 1.0 -1.0 -1.0 0.0 1.0 1.0 0.0 0.0 + 1.0 -1.0 -1.0 0.0 1.0 1.0 0.0 0.0 + 1.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 + 1.0 -1.0 1.0 1.0 1.0 1.0 0.0 0.0 + 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 +-1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 + 1.0 -1.0 1.0 0.0 1.0 0.0 0.0 1.0 + 1.0 -1.0 1.0 0.0 1.0 0.0 0.0 1.0 +-1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 +-1.0 -1.0 1.0 1.0 1.0 0.0 0.0 1.0 +-1.0 1.0 1.0 0.0 0.0 -1.0 0.0 0.0 +-1.0 1.0 -1.0 1.0 0.0 -1.0 0.0 0.0 +-1.0 -1.0 1.0 0.0 1.0 -1.0 0.0 0.0 +-1.0 -1.0 1.0 0.0 1.0 -1.0 0.0 0.0 +-1.0 1.0 -1.0 1.0 0.0 -1.0 0.0 0.0 +-1.0 -1.0 -1.0 1.0 1.0 -1.0 0.0 0.0 +-1.0 1.0 1.0 0.0 0.0 0.0 1.0 0.0 + 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 +-1.0 1.0 -1.0 0.0 1.0 0.0 1.0 0.0 +-1.0 1.0 -1.0 0.0 1.0 0.0 1.0 0.0 + 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 + 1.0 1.0 -1.0 1.0 1.0 0.0 1.0 0.0 +-1.0 -1.0 -1.0 0.0 0.0 0.0 -1.0 0.0 + 1.0 -1.0 -1.0 1.0 0.0 0.0 -1.0 0.0 +-1.0 -1.0 1.0 0.0 1.0 0.0 -1.0 0.0 +-1.0 -1.0 1.0 0.0 1.0 0.0 -1.0 0.0 + 1.0 -1.0 -1.0 1.0 0.0 0.0 -1.0 0.0 + 1.0 -1.0 1.0 1.0 1.0 0.0 -1.0 0.0 \ No newline at end of file diff --git a/enginecustom/objects/cylinder.mtl b/enginecustom/objects/cylinder.mtl new file mode 100644 index 0000000..6d43325 --- /dev/null +++ b/enginecustom/objects/cylinder.mtl @@ -0,0 +1,2 @@ +# Blender 4.0.1 MTL File: 'None' +# www.blender.org diff --git a/enginecustom/objects/cylinder_obj.fbx b/enginecustom/objects/cylinder_obj.fbx new file mode 100644 index 0000000000000000000000000000000000000000..70e012179592cafdbb91328a670d664432092d8f GIT binary patch literal 13276 zcmcgz30PCd_74JrBA~5nt3chLRaw-E2+9&lmN zoO5RGWtK2WER+lF{Cwuw`AB3!d6JzS=N(Sva1LjS8AqGmg8BeLC?@1HRZ2ppkdU$k zP-z60DO~-v)!~F3D+8;HIUE(MMPF#4sYCE>tU9ZiGLbwfP6>2#lH!O!sN$?ZXeJHd z$_XJ=D~TlpN?~l=C8*K#ZKj2VF7LA{Oy(0pd0-`Q(ZVV<4I*XA=s;-882}I(6k}gu zQs6Ksv}YBX1d#FaKr1NqWR>;~lE~tfL?BMjTz0vD5Ro!*paqmGS>+Z%5~)<8pes4p zF+2Urw44BiW)!2OT;Ko?K2kyk^KIv#PzocY1SO$B{`+?S)pJG#LAL&vF(E)ze8 zarA=r_HgwPhzJ=GD2pTogW%C$N=68!_{cG8t1*X~Fa;s^6)J@zfD#74v4qP6Cttv> zox;?jh_%x!hKJrPF3f`nr4X^i`dTkzRhZ6^D5Zn|FgTl8#b$!|h>r=8lBzh!s_5+< zuZ)HnL4q@^a`Rb4QX(lAE2x^=?3z#_L4rC+)ikkc%(!H1EFq&iK|pOvL0K}XUx=KH zBjid6p>TDM1V)j2H@J*K1SncxQWTFUVRESe$z}0>DQEMw4v<>E&%@MTZ&^T{FPNR>02v3o0XOQ_&3&=y^)){iJ5LRvH zxIT&7tN{Q_wbt z0vxEbixd30xVbvpIXh3I{v4g1o!2wajBE$6q5ULM!T|fIPAn}c1SH^^GX^f0&pvSD z2^C6#Fo6*35$-#^b@;+r(vrNPbX5#=2t69Kjh#Xp;Lm_~ix_lo8XY`B=jh#(?`r`>%y(4}Y+KT+7osrX5aSKOHZLQ;(`T!Py1=>|7Xy1+{ga3`PUNd+c$3 z><83LvZ8&AfKV#I2r8l(Y?Ou8V^o68`WK5v$HM*$6xjNGxIpPaEjVFu-YSWLGN=-; z*1#htP^KiJ2-*z<;^6BTGGqeC`nHitqGX0iC&0qO9>>$9xXk?I5EK~h6#NJ$hM{z( zDbZ=RQFhtyzdH8ICBcOm?ic#tly~g6jk3#rN5bSFzbiWERzkW z*qAYEs3E>Yq%dBp;$;?9ga}jy?o@bycTOk+FcI?5 zCr(To02!y3{%}dup^yx51bwrqDkY2F{m; zLu4NxQU#kyYF&rJiYMihe5u7jKTs-!&8gHeV+A8enD&T5RZkIT0V4A01Q)Q3wmw8I ziN#ZaaM)8tNTd>F5@mTJNRrv=KpPIV)>bmaAJD`oGcJU$3OhlxP)sH&^wH%rbmM6{ z^bVnfhye4~6(zLnPFgdX)*`e{Y%M}g(UeMuL(r~Ka+dK(X6Ov65U#;kXsAg#DwGYt z*b8GzF`Szn5BevU;TZ|UH1ar-(nk}hX=lt4uo37{!n5E4dEg=nC6z*4nf%B|1)=Pz zp!pzL1pbHyMpR;q2Zg2x0S&Sq{oXAVQ}AQxYNK)p?n-^SeR|j z9Jx@Y0GYrP)26yJwS{(^ETC;C8y4*wEbD5+z&&5xVz zzv_zeANnYZ4O0qLdPi#o>&yV3LY3ap26RQKceKkHN|y1{EGWJlj`1iiJ6YksF?3Tv zF0jIJm#v|LkWEDRk#e3SR-)v~q@5aGXwR{P?Jn}`4i{s!wHQiCWTcExDCTt?ba6Q0 z-2j^39iUy^0QyIFfNn8B&NOSd-f+9bBV=7ukM^1bdjuq5Vtfdu!JQG>xxpx+2X1#Q zgUYf+A*4e2rm&{~7Ns~2u6DNGupt@-2XF1T)Qsf~tPp7cwdW>i51=BG@6$}89cPVI z?~1-n2F%VU2FdgeGS?uP-a*zdWDfL9qHYJuq6xV~NyXcG z0t$OL{>2$#nJLDP8rHECphF$=r+dRlilKW06}zGzw0jy>>*)&vfyBy~!5JuW$eNe7 zk?K{j>4vEEicVpOO0VSh>!&iHU1f%-^p0>4oDAxj4WUZ!2$evE(w+?$m?Ch*n%$N} z#EKYt8hl=6;Dc#+jJlZ3oJ6Ft20g_d2RnTndJv5bTZ=YqMi06J%~B|>ije?~b2){E z#+VtD-xpp-h6-g-M7KO_j$w>$IoC$R7~S%#?r@6To)@9&^>|4)jL|J#P8r7N7B78m zX@ACuc5ewab^+2YhCJS*=SAO0y2XwhK+w-Jt_FAKJd%v@ zR%(u$s2H{Vnc(*f72|?YUBlw&Fw`L3b!NzL!^y*r1<_<;XWJ(usIwhOb2yc54&H+k zOhm!HHi3WxX824%3CA+41trT>i! zzCzf-pp2r&f+wYZa)L;v53$>I3zeLrjs!fuFPxTjHcliM1<+{r8JB`*NIa3$j_s^E zD??HN&XzZ0p2}3^<>VQ+&d$H*4nD9~vXUB%BC|vxZ4h1pux+xjQ&m=SY z3|S$79iTCk;l{ySbM(vGYiWbW@f_-;lA8qQOt97F7-{M$ZNW3%eq*o|opcW9G=u-WeL zEN_$1#a`B8lYq}Ao_#XWVa32+y+*I%`gkl$KUgGL`eSQOxwI`MhJVs*w=Pq|BGR#{w1^S3|jJ(6B@yso0*?S|A;o15dDJfCkBDAL{19@y+o#u6Pp|X1R9EI0 z_{C`EFJRZvM=gi{xva3DG{3PrEA*o=`}(Pg`Qh&r^lJU$!tNPs3eJ6b=fIsIxqTnS zT(Qp`n=-w{uEaZaRIf|qB8rYZ5pR^)4CAPRkCv{@A%)gOd9&A=<r29Cx)h(W^dfOJI!)L*4$I%$x+Xy6_dNU&mv!pP(ZF8kn88CjmX^TA4ZJb7vG zg~=92{0`1H-yOT*a`dWs(Odd#_ZvI-#wyk3raNJ`u9u0o z>5bECFORxlv+VBvL6;6D%l@!%%71p_-Kx?XwHKG!N}DUQE*(pGdd>Ckgp|fp{KA&! zML!g_Hd$ZWFy!`7I7`7X{qXWzQ@lGioROWYtDb`H%m56UF)b<%uo}M-^JWDF%`ddfpEa_nU)Wf4cbll{@wP)Na~do2o|K)*+B##Acgmv08Ot~?FSG%RbeZ0Fl)+2xJ?Yw6@R8LZ?^O_g7 zs1GD(2asP~-LKBDd9l&>c3Y6V zw9sv*k!^IZe3<;U^&VLCv|&hy!{*~( zIu!Sn`Plc(zw0+{_j|q~i$0d`Z3V9eEshXL-cbCV7&eAJSBCAh+A%Gc$eo|;+mV6Q*_sKtS*<2M3hF6>As zkfns3A!3UY)Ao!QVo$c_?tZB*RG&!kpBCbgsGcgx&il(zs!WUazy6==YhHZU`e#FV zOR*@>{qgrr#Th@Q?zMWzyY^*O(YcQb*B7lmHhWlR*uvDWW8B3lP4>S%jmca8O40De z`l8?Yx3=3(@{COTy?MWTRnbA)oHS|G#nvq2=e9Yowlxb9{|-%WwT)^hD!zVk-8tK_ z>D#9L9WQ#8dCqfBMnaiOg|(u!cJT=AEp?NXW8p|^w}1r&=dBk_Su`nlgF4B&JdyV* z`^Y6iRaWNo%bEvjkto-?xbb{b_?Eiw$5-&T$NzagDO@f0bhwcEZAw%@QCZZTmumIU zmgv&P26J_5Yrp4>!rBAFoEpDww#hBre1AshgOr?7r@CeL=ia~bD)6t&tsBl6tM@;& zx314Jer5w&NL)Zz>#yq|I#PRgPwcK@id1|+ub29lCNjD#R+10M*OSd;0 z@7R-8^y&Vx!?H(n4{mQZJ+LS3%wmD3@N{wJyeSRFTX?CNGX-VBUy6@!b8WDEz)RgQ zU$9tsrg-bNDGjE3c&QnIf?dL2i}wz7ZRm4`m%4to!1hk&eruPAN5=hjB-?WLl%D!# z|0~hS;#Ze5t(4!6_+y{{haZG|vg<5&@Shu3seDHb|K+kz{}n?=+YNho)^A4I?tz7~ zSN8tN%eI~vlDenV+bQ|->M4_VTZK9JyY$_(j`!Wj0ZTvg8Tv{8wE@4~H4ELiV)(#s z%!z%z6W+P9HaNxjuPsyGgT>R9{2(C3<%Fx-lrj*MU68QshSn~Kq0LpO(4>BBgYrE? z0muK$C)l{q*)3@Me};wJ7teUbl!T~WHNe!}4MwI(Iz9Dgh79i)nVzUEE6Xp2g^y>k zWv~}b4;}BZ5WZumj*&ThZ4d9)dA+a0{G_|+qEDt}~apM=op!(6M7I1s5o!NXZ29uTfH(;WsFuU;{?4yC0 zQ_i3`KpyzTk#%wAj~c3z`hjpXYTGvmzDtv|>8?Git`Ai=M;Jr@JH~XT3Va9048P}q zu!n23gekSgQf@r_mjiqUkB*PY!#jVS&UGFh1FMj&h+K)d${haE!PD z?2*scY7kFDa=X)Jnhl}0y{0*JA2X@#(G+=8422TSbN~l(I4|tv-vipHAlH22K%dKJ rizAODyj(fFacr7SCH0Rpx+VXAPcQzl{^Qby>uJ>w`<2IMzHjkAZ5U5W literal 0 HcmV?d00001 diff --git a/enginecustom/output.txt b/enginecustom/output.txt new file mode 100644 index 0000000..a0908a9 --- /dev/null +++ b/enginecustom/output.txt @@ -0,0 +1,262 @@ +Vertex Count: 258 + +Data: + +1 1 -1 0.625 0.5 0 1 0 +-1 1 -1 0.875 0.5 0 1 0 +-1 1 1 0.875 0.75 0 1 0 +1 -1 1 0.375 0.75 0 0 1 +1 -0.777778 1 0.402778 0.75 0 0 1 +1 -0.555556 1 0.430556 0.75 0 0 1 +-1 -1 1 0.375 0 -1 0 0 +-1 1 1 0.625 0 -1 0 0 +-1 1 -1 0.625 0.25 -1 0 0 +-1 -1 -1 0.125 0.5 0 -1 0 +1 -1 -1 0.375 0.5 0 -1 0 +1 -1 -0.777778 0.375 0.527778 0 -1 0 +1 0.777778 0.777778 0.597222 0.722222 1 0 0 +1 1 0.777778 0.625 0.722222 1 0 0 +1 1 1 0.625 0.75 1 0 0 +-1 -1 -1 0.375 0.25 0 0 -1 +-1 1 -1 0.625 0.25 0 0 -1 +1 1 -1 0.625 0.5 0 0 -1 +1 -1 0.777778 0.375 0.722222 1 0 0 +1 -0.777778 0.777778 0.402778 0.722222 1 0 0 +1 -0.777778 1 0.402778 0.75 1 0 0 +1 -0.777778 0.777778 0.402778 0.722222 1 0 0 +1 -0.555556 0.777778 0.430556 0.722222 1 0 0 +1 -0.555556 1 0.430556 0.75 1 0 0 +1 -0.555556 0.777778 0.430556 0.722222 1 0 0 +1 -0.333333 0.777778 0.458333 0.722222 1 0 0 +1 -0.333333 1 0.458333 0.75 1 0 0 +1 -0.333333 0.777778 0.458333 0.722222 1 0 0 +1 -0.111111 0.777778 0.486111 0.722222 1 0 0 +1 -0.111111 1 0.486111 0.75 1 0 0 +1 -0.111111 0.777778 0.486111 0.722222 1 0 0 +1 0.111111 0.777778 0.513889 0.722222 1 0 0 +1 0.111111 1 0.513889 0.75 1 0 0 +1 0.111111 0.777778 0.513889 0.722222 1 0 0 +1 0.333333 0.777778 0.541667 0.722222 1 0 0 +1 0.333333 1 0.541667 0.75 1 0 0 +1 0.333333 0.777778 0.541667 0.722222 1 0 0 +1 0.555556 0.777778 0.569445 0.722222 1 0 0 +1 0.555556 1 0.569444 0.75 1 0 0 +1 0.555556 0.777778 0.569445 0.722222 1 0 0 +1 0.777778 0.777778 0.597222 0.722222 1 0 0 +1 0.777778 1 0.597222 0.75 1 0 0 +1 -1 -1 0.375 0.5 1 0 0 +1 -0.777778 -1 0.402778 0.5 1 0 0 +1 -0.777778 -0.777778 0.402778 0.527778 1 0 0 +1 -1 -0.777778 0.375 0.527778 1 0 0 +1 -0.777778 -0.777778 0.402778 0.527778 1 0 0 +1 -0.777778 -0.555556 0.402778 0.555556 1 0 0 +1 -1 -0.555556 0.375 0.555556 1 0 0 +1 -0.777778 -0.555556 0.402778 0.555556 1 0 0 +1 -0.777778 -0.333333 0.402778 0.583333 1 0 0 +1 -1 -0.333333 0.375 0.583333 1 0 0 +1 -0.777778 -0.333333 0.402778 0.583333 1 0 0 +1 -0.777778 -0.111111 0.402778 0.611111 1 0 0 +1 -1 -0.111111 0.375 0.611111 1 0 0 +1 -0.777778 -0.111111 0.402778 0.611111 1 0 0 +1 -0.777778 0.111111 0.402778 0.638889 1 0 0 +1 -1 0.111111 0.375 0.638889 1 0 0 +1 -0.777778 0.111111 0.402778 0.638889 1 0 0 +1 -0.777778 0.333333 0.402778 0.666667 1 0 0 +1 -1 0.333333 0.375 0.666667 1 0 0 +1 -0.777778 0.333333 0.402778 0.666667 1 0 0 +1 -0.777778 0.555556 0.402778 0.694444 1 0 0 +1 -1 0.555556 0.375 0.694444 1 0 0 +1 -0.777778 0.555556 0.402778 0.694444 1 0 0 +1 -0.777778 0.777778 0.402778 0.722222 1 0 0 +1 -0.777778 -1 0.402778 0.5 1 0 0 +1 -0.555556 -1 0.430556 0.5 1 0 0 +1 -0.555556 -0.777778 0.430556 0.527778 1 0 0 +1 -0.777778 -0.777778 0.402778 0.527778 1 0 0 +1 -0.555556 -0.777778 0.430556 0.527778 1 0 0 +1 -0.555556 -0.555556 0.430556 0.555556 1 0 0 +1 -0.777778 -0.333333 0.402778 0.583333 1 0 0 +1 -0.555556 -0.333333 0.430556 0.583333 1 0 0 +1 -0.555556 -0.111111 0.430556 0.611111 1 0 0 +1 -0.777778 -0.111111 0.402778 0.611111 1 0 0 +1 -0.555556 -0.111111 0.430556 0.611111 1 0 0 +1 -0.555556 0.111111 0.430556 0.638889 1 0 0 +1 -0.777778 0.333333 0.402778 0.666667 1 0 0 +1 -0.555556 0.333333 0.430556 0.666667 1 0 0 +1 -0.555556 0.555556 0.430556 0.694444 1 0 0 +1 -0.555556 -1 0.430556 0.5 1 0 0 +1 -0.333333 -1 0.458333 0.5 1 0 0 +1 -0.333333 -0.777778 0.458333 0.527778 1 0 0 +1 -0.555556 -0.777778 0.430556 0.527778 1 0 0 +1 -0.333333 -0.777778 0.458333 0.527778 1 0 0 +1 -0.333333 -0.555556 0.458333 0.555556 1 0 0 +1 -0.555556 -0.333333 0.430556 0.583333 1 0 0 +1 -0.333333 -0.333333 0.458333 0.583333 1 0 0 +1 -0.333333 -0.111111 0.458333 0.611111 1 0 0 +1 -0.555556 -0.111111 0.430556 0.611111 1 0 0 +1 -0.333333 -0.111111 0.458333 0.611111 1 0 0 +1 -0.333333 0.111111 0.458333 0.638889 1 0 0 +1 -0.555556 0.333333 0.430556 0.666667 1 0 0 +1 -0.333333 0.333333 0.458333 0.666667 1 0 0 +1 -0.333333 0.555556 0.458333 0.694444 1 0 0 +1 -0.333333 -1 0.458333 0.5 1 0 0 +1 -0.111111 -1 0.486111 0.5 1 0 0 +1 -0.111111 -0.777778 0.486111 0.527778 1 0 0 +1 -0.333333 -0.777778 0.458333 0.527778 1 0 0 +1 -0.111111 -0.777778 0.486111 0.527778 1 0 0 +1 -0.111111 -0.555556 0.486111 0.555556 1 0 0 +1 -0.333333 -0.333333 0.458333 0.583333 1 0 0 +1 -0.111111 -0.333333 0.486111 0.583333 1 0 0 +1 -0.111111 -0.111111 0.486111 0.611111 1 0 0 +1 -0.333333 -0.111111 0.458333 0.611111 1 0 0 +1 -0.111111 -0.111111 0.486111 0.611111 1 0 0 +1 -0.111111 0.111111 0.486111 0.638889 1 0 0 +1 -0.333333 0.333333 0.458333 0.666667 1 0 0 +1 -0.111111 0.333333 0.486111 0.666667 1 0 0 +1 -0.111111 0.555556 0.486111 0.694444 1 0 0 +1 -0.111111 -1 0.486111 0.5 1 0 0 +1 0.111111 -1 0.513889 0.5 1 0 0 +1 0.111111 -0.777778 0.513889 0.527778 1 0 0 +1 -0.111111 -0.777778 0.486111 0.527778 1 0 0 +1 0.111111 -0.777778 0.513889 0.527778 1 0 0 +1 0.111111 -0.555556 0.513889 0.555556 1 0 0 +1 -0.111111 -0.333333 0.486111 0.583333 1 0 0 +1 0.111111 -0.333333 0.513889 0.583333 1 0 0 +1 0.111111 -0.111111 0.513889 0.611111 1 0 0 +1 -0.111111 -0.111111 0.486111 0.611111 1 0 0 +1 0.111111 -0.111111 0.513889 0.611111 1 0 0 +1 0.111111 0.111111 0.513889 0.638889 1 0 0 +1 0.111111 -1 0.513889 0.5 1 0 0 +1 0.333333 -1 0.541667 0.5 1 0 0 +1 0.333333 -0.777778 0.541667 0.527778 1 0 0 +1 0.111111 -0.777778 0.513889 0.527778 1 0 0 +1 0.333333 -0.777778 0.541667 0.527778 1 0 0 +1 0.333333 -0.555556 0.541667 0.555556 1 0 0 +1 0.111111 -0.333333 0.513889 0.583333 1 0 0 +1 0.333333 -0.333333 0.541667 0.583333 1 0 0 +1 0.333333 -0.111111 0.541667 0.611111 1 0 0 +1 0.111111 -0.111111 0.513889 0.611111 1 0 0 +1 0.333333 -0.111111 0.541667 0.611111 1 0 0 +1 0.333333 0.111111 0.541667 0.638889 1 0 0 +1 0.111111 0.333333 0.513889 0.666667 1 0 0 +1 0.333333 0.333333 0.541667 0.666667 1 0 0 +1 0.333333 0.555556 0.541667 0.694444 1 0 0 +1 0.333333 -1 0.541667 0.5 1 0 0 +1 0.555556 -1 0.569444 0.5 1 0 0 +1 0.555556 -0.777778 0.569445 0.527778 1 0 0 +1 0.333333 -0.777778 0.541667 0.527778 1 0 0 +1 0.555556 -0.777778 0.569445 0.527778 1 0 0 +1 0.555556 -0.555556 0.569445 0.555556 1 0 0 +1 0.333333 -0.555556 0.541667 0.555556 1 0 0 +1 0.555556 -0.555556 0.569445 0.555556 1 0 0 +1 0.555556 -0.333333 0.569445 0.583333 1 0 0 +1 0.333333 -0.333333 0.541667 0.583333 1 0 0 +1 0.555556 -0.333333 0.569445 0.583333 1 0 0 +1 0.555556 -0.111111 0.569445 0.611111 1 0 0 +1 0.333333 -0.111111 0.541667 0.611111 1 0 0 +1 0.555556 -0.111111 0.569445 0.611111 1 0 0 +1 0.555556 0.111111 0.569445 0.638889 1 0 0 +1 0.333333 0.333333 0.541667 0.666667 1 0 0 +1 0.555556 0.333333 0.569445 0.666667 1 0 0 +1 0.555556 0.555556 0.569445 0.694444 1 0 0 +1 0.555556 -1 0.569444 0.5 1 0 0 +1 0.777778 -1 0.597222 0.5 1 0 0 +1 0.777778 -0.777778 0.597222 0.527778 1 0 0 +1 0.555556 -0.777778 0.569445 0.527778 1 0 0 +1 0.777778 -0.777778 0.597222 0.527778 1 0 0 +1 0.777778 -0.555556 0.597222 0.555556 1 0 0 +1 0.555556 -0.333333 0.569445 0.583333 1 0 0 +1 0.777778 -0.333333 0.597222 0.583333 1 0 0 +1 0.777778 -0.111111 0.597222 0.611111 1 0 0 +1 0.555556 -0.111111 0.569445 0.611111 1 0 0 +1 0.777778 -0.111111 0.597222 0.611111 1 0 0 +1 0.777778 0.111111 0.597222 0.638889 1 0 0 +1 0.555556 0.333333 0.569445 0.666667 1 0 0 +1 0.777778 0.333333 0.597222 0.666667 1 0 0 +1 0.777778 0.555556 0.597222 0.694444 1 0 0 +1 0.777778 -1 0.597222 0.5 1 0 0 +1 1 -1 0.625 0.5 1 0 0 +1 1 -0.777778 0.625 0.527778 1 0 0 +1 0.777778 -0.777778 0.597222 0.527778 1 0 0 +1 1 -0.777778 0.625 0.527778 1 0 0 +1 1 -0.555556 0.625 0.555556 1 0 0 +1 0.777778 -0.555556 0.597222 0.555556 1 0 0 +1 1 -0.555556 0.625 0.555556 1 0 0 +1 1 -0.333333 0.625 0.583333 1 0 0 +1 0.777778 -0.333333 0.597222 0.583333 1 0 0 +1 1 -0.333333 0.625 0.583333 1 0 0 +1 1 -0.111111 0.625 0.611111 1 0 0 +1 0.777778 -0.111111 0.597222 0.611111 1 0 0 +1 1 -0.111111 0.625 0.611111 1 0 0 +1 1 0.111111 0.625 0.638889 1 0 0 +1 0.777778 0.111111 0.597222 0.638889 1 0 0 +1 1 0.111111 0.625 0.638889 1 0 0 +1 1 0.333333 0.625 0.666667 1 0 0 +1 0.777778 0.333333 0.597222 0.666667 1 0 0 +1 1 0.333333 0.625 0.666667 1 0 0 +1 1 0.555556 0.625 0.694444 1 0 0 +1 0.777778 0.555556 0.597222 0.694444 1 0 0 +1 1 0.555556 0.625 0.694444 1 0 0 +1 1 0.777778 0.625 0.722222 1 0 0 +1 -0.777778 -0.555556 0.402778 0.555556 1 0 0 +1 -0.555556 -0.555556 0.430556 0.555556 1 0 0 +1 -0.555556 -0.333333 0.430556 0.583333 1 0 0 +1 -0.777778 0.111111 0.402778 0.638889 1 0 0 +1 -0.555556 0.111111 0.430556 0.638889 1 0 0 +1 -0.555556 0.333333 0.430556 0.666667 1 0 0 +1 -0.777778 0.555556 0.402778 0.694444 1 0 0 +1 -0.555556 0.555556 0.430556 0.694444 1 0 0 +1 -0.555556 0.777778 0.430556 0.722222 1 0 0 +1 -0.555556 -0.555556 0.430556 0.555556 1 0 0 +1 -0.333333 -0.555556 0.458333 0.555556 1 0 0 +1 -0.333333 -0.333333 0.458333 0.583333 1 0 0 +1 -0.555556 0.111111 0.430556 0.638889 1 0 0 +1 -0.333333 0.111111 0.458333 0.638889 1 0 0 +1 -0.333333 0.333333 0.458333 0.666667 1 0 0 +1 -0.555556 0.555556 0.430556 0.694444 1 0 0 +1 -0.333333 0.555556 0.458333 0.694444 1 0 0 +1 -0.333333 0.777778 0.458333 0.722222 1 0 0 +1 -0.333333 -0.555556 0.458333 0.555556 1 0 0 +1 -0.111111 -0.555556 0.486111 0.555556 1 0 0 +1 -0.111111 -0.333333 0.486111 0.583333 1 0 0 +1 -0.333333 0.111111 0.458333 0.638889 1 0 0 +1 -0.111111 0.111111 0.486111 0.638889 1 0 0 +1 -0.111111 0.333333 0.486111 0.666667 1 0 0 +1 -0.333333 0.555556 0.458333 0.694444 1 0 0 +1 -0.111111 0.555556 0.486111 0.694444 1 0 0 +1 -0.111111 0.777778 0.486111 0.722222 1 0 0 +1 -0.111111 -0.555556 0.486111 0.555556 1 0 0 +1 0.111111 -0.555556 0.513889 0.555556 1 0 0 +1 0.111111 -0.333333 0.513889 0.583333 1 0 0 +1 -0.111111 0.111111 0.486111 0.638889 1 0 0 +1 0.111111 0.111111 0.513889 0.638889 1 0 0 +1 0.111111 0.333333 0.513889 0.666667 1 0 0 +1 -0.111111 0.333333 0.486111 0.666667 1 0 0 +1 0.111111 0.333333 0.513889 0.666667 1 0 0 +1 0.111111 0.555556 0.513889 0.694444 1 0 0 +1 -0.111111 0.555556 0.486111 0.694444 1 0 0 +1 0.111111 0.555556 0.513889 0.694444 1 0 0 +1 0.111111 0.777778 0.513889 0.722222 1 0 0 +1 0.111111 -0.555556 0.513889 0.555556 1 0 0 +1 0.333333 -0.555556 0.541667 0.555556 1 0 0 +1 0.333333 -0.333333 0.541667 0.583333 1 0 0 +1 0.111111 0.111111 0.513889 0.638889 1 0 0 +1 0.333333 0.111111 0.541667 0.638889 1 0 0 +1 0.333333 0.333333 0.541667 0.666667 1 0 0 +1 0.111111 0.555556 0.513889 0.694444 1 0 0 +1 0.333333 0.555556 0.541667 0.694444 1 0 0 +1 0.333333 0.777778 0.541667 0.722222 1 0 0 +1 0.333333 0.111111 0.541667 0.638889 1 0 0 +1 0.555556 0.111111 0.569445 0.638889 1 0 0 +1 0.555556 0.333333 0.569445 0.666667 1 0 0 +1 0.333333 0.555556 0.541667 0.694444 1 0 0 +1 0.555556 0.555556 0.569445 0.694444 1 0 0 +1 0.555556 0.777778 0.569445 0.722222 1 0 0 +1 0.555556 -0.555556 0.569445 0.555556 1 0 0 +1 0.777778 -0.555556 0.597222 0.555556 1 0 0 +1 0.777778 -0.333333 0.597222 0.583333 1 0 0 +1 0.555556 0.111111 0.569445 0.638889 1 0 0 +1 0.777778 0.111111 0.597222 0.638889 1 0 0 +1 0.777778 0.333333 0.597222 0.666667 1 0 0 +1 0.555556 0.555556 0.569445 0.694444 1 0 0 +1 0.777778 0.555556 0.597222 0.694444 1 0 0 +1 0.777778 0.777778 0.597222 0.722222 1 0 0