From b16341c0f9a972287b7ce13eafe29362df384baf Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Wed, 1 Nov 2023 18:37:10 +0800 Subject: [PATCH] draw gizmo3d move, next step is mouse to pick the gizmo --- doc/Gizmo.odg | Bin 0 -> 12175 bytes example/Gizmo/Gizmo3DMove.cpp | 234 ++++++++++++++++++++++++++++++++++ 2 files changed, 234 insertions(+) create mode 100644 doc/Gizmo.odg diff --git a/doc/Gizmo.odg b/doc/Gizmo.odg new file mode 100644 index 0000000000000000000000000000000000000000..f15de8a0c5959cfbd141ff458f9a2b53adc241b5 GIT binary patch literal 12175 zcmb_?1yo$ivNjtMlcaMuvr-7O3ZF2UVBxLXF7AMSnU z<(%`9bKhI*ubI83_MTl|_1@j9x~uw=mwx;N2L=WK28R5dj!Nod=5_`c7?_9S{t}FZ ziG_jPCu;*8Yin~8Jsmp}D@zs!OMPZ59iR!2*~;3$Qr}9?-on7rj@igo$J*FL4=Dc^ zzQ!87R-&+EHVQFn;ZEt<=+5R8w@PA=v zXJuustMh;L_F!eLV`*UifAsdyz<>7kt2P>%Tj|&t{9oG$w9~P(2mZ4+(qFt06AK+9 z10ajAiJgUxHSixE@K+sZZEIy@YXJO{TLc7ze~qPkPya1Q_Zradleqzq*~!9uUZX#3 z7L2=aMu(z3m!WA)d12J)zyXY$UCM!Dmt^bKw8I_3vN#dPf(s%U)E{@lvltdraRUjw z4sMhg)=INdAh`{!pi({M9o46Pjdes6wc)zqzlzB<*jOhWy})D$mp*ME$d7#aDoKo! zdiuEH?xy~rLGmuKFqJ9dEqSskB(0QCvKZ*yaTlAmp)|p7u(a;EXI=w`$6sM@+=u9VY~@6 zv62T^QEp|UmfVSz{qnK|vbpcI-=UfjsW!UyV|C+72*|R^D4#E@ZW1ow0LPRBmh8o% z(j4{}6Xq9)7LQ7jy(ag1Z5MRC$_K4w32L2KtF~TXA0lbn(gaVl?k~9EtB`>;9iDDF zOnN?0wKAQ@A`B%U$M%m~jI)h#m8x74Zj ziB)4oLex^b=oh782VE&h)!`fJIlpy|+**d$LFWZRSAiZ(0mr2~Dh3&bCMtI@3sOlE zA*;!HiZ&`T(xXrFgte`m&Y!W@E)Nhe!yq!_wO9hdZuC*Plv|9oOBUZ0Xep9g9xo8{ z#Z;fcC8(-ZTk#Tl>D=`cT_V#fU&95J;jPfpm89gy=qI{t6NonK3K~5LWW|`CWJRDl z=yj-NkZ+(G@TCdDQJTXe%EgUKI(&0J$Ap#qobY@P*hEfVD@EySrJy|a=IDLQ=yyDI z*Mf2-Zt?dq$x@tbs~OSe&FA>7kes9%3PU~;kt9cBD!;tQ4lIFe?3?rYrrYx~!P^b1 zrn@u2ySe&KHr3qFvav%4m`z3Y+cQ!R?@!vnbE<^4B_X&A(cPOo1_<*dVTdY&A8~P! z@q+@tslB?$!np{eL=3wskUa3{m>{GuoNYgqUj619^mbGQ`65%299>PA(u3aZBUdj{ zD;$OnhU=bPL2jBkVkNo{K8yWmQUyM@nfJzaf?7l<*7ql(K*T!v>So=1tOS+vHwpai zslmfjwptdAV%>oFFXvZXsOSKd$B%0AJsT&V9>BL;S#{v6K|kYs^4@}3HoL9M zswrw;0|@K#IoZO~XDIIOw#fG49Z+T==u}NC*YHD|0DqR)SOJ)Ue1cC}mZU4O>{4;@)j>Eh{HJ#Ikk-ED&3G;cAitgnEk>R*;m6kEyqcjSQ8Qq#(^CIg+u9CHbTQDDl`f1}+ zX-DQ+IYBGqIc!dil9q(OmvB{Il@DLwC-7Hc@L3um*QQm5;`e0M6-4Nd`E0z)BVwbZ zDU_j-lxO`h^ktM>A`LZ=O{s{sTji8BzO*u+bgfP$j7gS^vOgUrZ!_W}gs*MWC(YVM zblDGfTsDdc64MzG0HPUW=z2!p_lOG{0hSL5fn3{)QU2XWu zgy`(DOY|M@=njZo8&SvM@ep?8lMG)UHiQ+7^%!8@z{D_C!_qr13s{O?rPz0pZ`cV< zDvRV97sDfXnFj?chTlu4I;wQ!Ni~#G0Ys@EU1K&rUreJSmvCW9S*xHre?}8Domko- z9(9I;IkRR;MvB|*Q!5*P<8iZwK7pDnL?jpE_AcrZ;uqu~s3$Ppb1|ksMx2f0PCTot z_G~L@=F;2@P)MCM{DE24JuwGB=nYKZxBw8Xf(d(>ddlv$L>oieUb_$td15@m0;Hp{mpeopEiYc+o=9uy49Py7R&L zuE|Jq3GSh0;>#!oAh1aEFp8rvxV)82BFhZz-7H0#NYu_EpxQfJRAOKvKQ)r5Wce{N1vKgkiV5Ct$7n-r2?jW3)!Hw7=t`>;PI#VlIh6v& zPrmb{XngKUbqp8d^94yi$2Ryg1ap56=k<)4altL+_$K2bAsy-1s*w0OPv#*{2;5yz zey=!88-g0sM4^r|t2j&MtIc_A&E-4GT)DI=IwJZV;?TC2I)|f^%x2mFdvw^k7o!bh zdyMDSBuaKZ;I+K@Jc#Y_hj5 z%9lsd(oy3FCAxwS%>e`o*Sla^RbMY3+2NR394%%x^_8c~9k z*y=|3{bFe%dzZ(}$s+@X{TiM&!?p1i^cD7+M-uyz<3vmwoPqV3IwkK(gZ$#E5=ZTa zG+ZCS zsY>E6TE%$`rnnXlZ+=5VSNh{84B)QWq7D3dtKc_ z#(h!Gf-{d-Bj3a8l_+2Hm+NgWP#a=N%^--0a+}TVXB-rB{=zUU0^$lP@;TZ$?Xo6t*(tdK; z81lNKfbJ!2Ljh5)c%ReLxw}Q&#l_1sCBasR!}$+^W0aOR&Odc;U=xe^9ir@btTA$_-rU3nRjBa(L+x<2BIgRAkh!|kH3 zLLTW0t7Gasi%87G=~X1LGo2M433R5|*f6wR5;U9zqUgx`(AL`~qeOgd@d}4lO||)} zZZ_Wbf-8Y!wnyB;j_de$zE1l_xW(2HPOF>kyu!Oj^3w1Kl2P@`F32!2&QdTi|IWF7 zwPe4)0Y=Zt((WO*yI-^K-LKhKzG60R(4nwIjefg~H#Y*~AwJ`KEBEXrHrcmqA?cW6 zVo4lYu*Cu08Bx?nbeA56)kj#X2HyH!4Pqb0!s)u-70z#)IO<(3`F#+pI9D3)%9z@( z)!tt*w)Ho87PV?xFj%$qgofm(P2Y{{X1;5Y_GBx5QqV=(o9xHo2+aa_C*phlDArq- zRu`IS_IRzgwVbM0F`#L7A+~|IKJ_RZ8iUg8A_xu;m&sS-El)_cv=Rudt}|q)+SK?< z_WEG9!)w2RszGupvbiZe$H*%$3k_Rt z%B1!BNT&4V<_I>_Z%vYc)zP1BTFx&!Tls8$%=5KHHL3#aQ{CIk)*K;?w)9G%R1@`& z8cZg#yacezP}!HN%!@>-(80HjexB7=oW{Wb80C%x%IW0Qef9h3F~XvluJ|b=(Fw&0 zT=JQgY}VJOeY%kK*};1m5sdUVcIp%2d0o$Epla!6^qY!ib7j2ShA0tn1(yYBTALl|6r^WJmb`Qcjgc)^9X65_#M7A)W`GlMGEp?zyK2Rts*2+`QrvYlrRz zmRg+=}NPTgTu$C@-WrdkA(^Ig84Y-ul;8of@Y7yzraNc-rx z?7JRIPs!psr3RPWu~FHD=_LbzJmtc*i4OO?0KLnhj^RxVm#kBt?YjXqf;OACRHzAE z*e7U51Ft?RtFF(cvK z*FpLXvYr+Dyd{r1m9ibNkUuhRj0BWDtT_7n zv<4#|SFNz-I~#-G(~42TT_Q@YMPTFA$dECU3|kV}jy^R7(3?Xs!c_+&Epl!Ua;ida z&7)T{^%D*3jMSx-4H8!z4Aq$d&u4dokLNLRs`_1AjlyIckTV<34D!Cp*qycLY+YiF!F!R+>5SK5;Y(RXr&5S& zxG^Bwt%#P{V}t|XmbHjF{AgwKZb|r9u-bl?@~)@q;0l&aJPAlOvJ>jKbg8Hua7Y{$ zWUg(IiBKuY?CUUKGkVR2M`wNF%5`&w?ol#9g-Tv5`{PkT$WV}U0V?d~u~u#D`3-kR zx4%dO`FJSYE=E1;5uYA%KRMa)yV|fkgFB6-k=haXrH}lu{)`~U3I-yKAZZLOQsH%D zge{I0C35}HfT8RApK!kjwn{B3;Q?cWgi(0n=Pp(#af=h+0i)^tuMD42X;zn^v-I^ZR^seDnz zqmSt^q$5J7OAANF0NgL{T`m$QGDyV&)m;ukWARw@fUg^mxO znkt$46h)4Dq?-valIQqZypAm8t)%(@dgkN|VKIWr5S<7Q)1*g|=qvBTBF_&Uy-Qe_ zdWJifQ+bJwia>3 zY~kx|WL!Mmj~A!O?@HH0Z|-E<;m;0kav>xjTw_~unhlvOk*X2ek_?#xeylwkZMV8bxDFAxPI8`r$ov3*u(x3@>;YA4ft17w zg8{`gy8FVi@SWzv-%$0g3&OFdrl9@PT9ttNuX;5j=?58p6@vn^(2+443CCmyp^{3% zl2JlX$h@`Y@=Px<*{#PuQ-wV~#{O*y=hfGW>NbslSwP1IHpUv2LE>nl*?6=B_5F^6CBuM_#stVG!@Ws6 z^5}=*3_PsK2)7O_FK_y86O=mi9}iK&{71yh;LSIst-Upy$pP*kYT2 z7tLE5Tq>pNTI8SJV~8n5M75)$gwHlr}gyodPREHAA>sH|8V+rqBU?K8*B4g0yZIFO1){U7hn5b3FI{Qj3##j zYLTSfO42H`;WZg1N4Pe8m*thR(b6O+aO0#5xJ5GN9pt*(T>a6O>vm*@8E6&*e~8dR zjmLP*!;tKAL>+(i0VPb*~Tn$NPA z5}Dm$Q!#TGhv7~8B>6G@vYlrqHz}}MdB{b2VqapN97NdCX5}@%Li3xOk*x)IP`&8UoX24q%xK_K?cCevVKszd~L`H8*ATd4E#eWFL-)X zkQKT0QjixI1Mx*&SDuHUmxLR^P-}*&A2roxKO*|Fa#4%}lv7Xqu{=dYt!`u!JWbpd z79^_jk%?*5+{7J3=2mfmt=^y_`$D`H`XmwwsaVi-O1VCD>7_XfXh8y^ynBjH6&YO2 z3}+##X8J>W(rG$Y6j>Ew_rc2k7iG z)^T&%%ZO+XWX$=)Byx37Kk>d^f@d>MYa)CE2lX=%guo`d*EO(Obgn?eofUig=c|y% z1u08J9f1*!^z%^l>$Z*#s?|*hGxh$}fJ~;o-8(6>83#$aUJOxW%w^~%Iyu@Rr*jz?T2(xeW=B<#O$%m4a)>`eU zUeTN#E6jy&BlBeo!4OfUQRYP(TPi&SkJaa;oriJ)t6@%JdcVhb{}Il zYD`)LMc77D7hy7gDg(Mtx78TE2^FGAY`H9)oIx=a)s1kY%h2dEoe}WsR!mHamVe#` zH_SX#uekE;txRB3J@GTqABnXw3^yeuhx)>=s6Ur-Uc1k^op39VEgH1jXCtBqprFNm zj#Jz51t01A)^kR&J`Tja*5%AQEIEy-awcbA4C-@?Ma)ok9h92~#^y+3+sXo(=p<52 zC6KmF!U=eF@uT5C_eC4`AQ}wt$KYBzlJp=rxM$H0FSFx#Q2HuBRKH0jKOQ|S(G-jiVMa9Oao2kT;hybR31(Wgdw4JWwqDs|mBV zp0lt4xxT2a3timVDW-C|e3X-bY=*HBa(Y=Y%#JL2kn`w!nvfm)-I}w&%aWNivQyKQxXj{FpMyA9_s@nv7K0b4U_J$EI z=n2>5mB-^ZdTmL3J-3YUCVbwpWV0&`*h!Y5YP11l5T=kg)D{waCs^K}j3SZB z{}kf?wQp)*r}L0ChsM0EjAq60JG%`+1A`*6KvC&)$qdBFM=!uTuWi*bBUmM!>uy~{ zXk%x>-aAkZx-6W)t&N&ZmS{D9$RB5Jl>`*OwqeS8v7b>oc(7veLlHs;T_)pWO~1&0 zy!IVU19JS%VA`%aSXP`(Q{5z?;AL5#O^%Cvr7x4ovycHAwSx@O0Vqnk0xM=9w}j}3 zU1-i(g1bfbrTwzM&YP!z4;nadNVOdF=b#++54&iU@E3oz1!Od_CCO^1=&l(Ty8E^B#+aSLP5kva5y7)Mnxr=1+)tImxMf ztpKu>IVQ&$kAxAeD!lb|UA`Sd`2w5Vqwm(FYgVLGX)frKb__%I<5#ohm@_Dal>$rF zz4vdB3j`kqz&O>`>)uB&Fp^LH7yy54oHKG+<~ZH&ay}dnJGzR-_7=L9Iws~o7P~)G zW@}5MKzUgSR3yN|ekiKs8_{<#Fpo@OU|?Yo9^YR{@|v)|KdG0OQ519Y2z2vwvl$Ha zc6PV}048mFMU}9~2fI6XEY02?~k{ zi;j(qjs24GB_%5|w;&-sCo!uiHNP}DyCN$tHvMyCR!TyCYC>6}Uq(u1c6wq_R#HuF zLUvYWR%U)~VQzLoQDIg_VQyhzVQxV|e%ifNVMTFqc|qydqO#JW^6HXGa9MsRG zL0WxrK~;H4Q+ZlLRY_G=pDds9<8xT!B;xHfyK zwq&KTzO@t5)?3jzTirchHr?~JcfDa~qiL(J%PX&?ytofs*w)yvm|rRJB?S*{Z19gjAg6mfn?=+*McKfx#UmW8X^0`x*z@D<+yDGu;&vJ+;&Q^|M1w z^DDK@s}1dKE%n`P4U-);L*0$@-PLp7>e^acS~_|=`Ud+tn+JQk+j~Y@2ImHw7kUQA z`UV#Vh6cKZ#|FnH2ghcHng_>vnui7k=9+tF20KUFM~2%LCcceNb&bq@8=V~O7$5GL z8|fV$9v_~V8=G02ofux68CzJK>+Jj9GO^n>eb7Cz-ZQ<`Jr5o2TpI8BKGnZEHoP)C zw>mtxJw38MGrl=DzdSd)-LgF}v9vqCx;FcLf32f$AiV@s{10 zwvD05)zR6t`LWf-nceZ(-KqJz*4DfJ{=l{v(UAPA6tv7t1I7E_ji`pc2_nJw%7LdcGq@JmJcqs_MzXQn`>uxdq<~x zKQ4E#@1V=8Cu>{Bdu!0G-Sd^T^YzWkgVn2@-IMK;>mTb^&^_q!{paHJ;_40xy@X!g zT|;kgZ|}$O-QC^F>*G@x79h(1U;?>rUoH%aCWmZVzyvmd8VpRlLC_-(Cjho(*iz1El&kc z{FDjF`I+IqV+vfBm-7`K?Y? zzJqC{vu!XW_Tma{?7b+2L+Yj{pkrZ7{*K-mX4(e4T_`pdUC+wWw{4`^DuW3vpoI=p z;H?|lkI#Rl{4l3{ij~t{B;Yt^AM693t{XfJ)<(_Rw>+4-jE?K;cjT$9JutR1sdI63 zAIyPh78h&6*DKrYZv{DasH=M<&F@RuIqaEemY;pxkW(k!KOAp9*W|kLLd6ReH?+61 zexc54tFlgAuas0Th$L%(WK~hiqcP^vVI((iy}V`tihO@0R0;OevuAfMVooO+EuZf0 zEA1czT7tix)7dX#Y#+_kQaV-NHu`xX*cUL`Z%j>kxa-`!4cQH;zOJ2v z37|JhgWHf{$0=OmO@R<+jqTK%aLfo7d`~{q6;jOgJ`ZnZMR4xV&UNE>mJx*O;UvGjBd@Mntq3kHQ?I<;`ww}Kg z!8g0yXL9sa&mP3?KUr(2O`5&n=vMZeTP^T~QV&tdYcyUaWy^UEC<~Kd@QVOAdlrlQ zDp9SfoiyHl6i?K2r;uQ+BKInPoJCdb1yj_lY^>aEwm$Y~#TwN4=hLjnl_ z2Or$*c3)3U#k(HmcQwXeXihoZeU}bS^-3dYnk>0GiR6Re#^K@$KAy&}-Y$UF!u%`1CcEeWa|fdx=onx@RqCtIv6sbdc-s2k-AcLgVM}KPs}t zqrKp8F6wM-&3d)jzudMJz4a1nn#Qkmpy}~;8QwF_qPy0l+grtT8Wo3=x>g@WQ?l#n zl*P%WEqQHnlEJxMNlGv}u~a)x2ezC4DJ8hR{tCQuwBOh+(mj_*8GPX9{BFn8!qWxu{{{Ip)|1-#c%@qGR+W+_5@!KH$znFLa%T_q_ z_aOg{{Qoq0{ZEj~S7UcD0=&y}#?N*!|wGq^vlL zg^s0(p#kt;JATE{Z%x}+F+gX0py7pg9^7K>-Q+{qS@7~}ksM^9zV5=dS3T6S8d7Oq zyPSQSE>WThreb(WGfhbG!g);om;$X1Y{^pjh`7)h|AMCv_K zRw$+s$gNpbs$8|WC~C$#PW+1~pLHz=6$R{M=Aib-kDL`P1mHJ6Bei6tpafDtU3)xP zR5nBumpxyw9R-9Z)A)!4V!wa{dTi$kHOt-Eb{pb%#0g*<2GUa_z z&~d+nmzRD7iv#m}KJ7!7{FFb~wSTwzc?S&41LyLmDBP?6Oria&|DTpHFb^c!pAvkp z{vGMhl-l3pJft^2rR`q*JI+sv?e9_k+M0{sp!`9({XNcKTf=tW4}WjXPYUk;7RBfn zC_gE=zeoA&GbR55<bP~{guM|Z=^pM0e|KS zJS43@MdlvqC#Cm~A^eBkpR3^yOoE?shx!*@!QT!4Tw{4Cmj4tbyuX&t|8Du`UW9zPbhKIBN2P9-png9R* literal 0 HcmV?d00001 diff --git a/example/Gizmo/Gizmo3DMove.cpp b/example/Gizmo/Gizmo3DMove.cpp index e69de29b..745f1363 100644 --- a/example/Gizmo/Gizmo3DMove.cpp +++ b/example/Gizmo/Gizmo3DMove.cpp @@ -0,0 +1,234 @@ +// Gizmo 3D Move + +#include"VulkanAppFramework.h" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace hgl; +using namespace hgl::graph; + +static Color4f white_color(1,1,1,1); +static Color4f yellow_color(1,1,0,1); + +class TestApp:public SceneAppFramework +{ + Color4f color; + + DeviceBuffer *ubo_color=nullptr; + +private: + + Material * mtl_vtx_lum =nullptr; + MaterialInstance * mi_plane_grid =nullptr; + Pipeline * pipeline_vtx_lum =nullptr; + Primitive * ro_plane_grid =nullptr; + + Material * mtl_vtx_color =nullptr; + MaterialInstance * mi_line =nullptr; + Pipeline * pipeline_vtx_color =nullptr; + Primitive * ro_line =nullptr; + + VBO * vbo_pos =nullptr; + + Ray ray; + +private: + + bool InitMaterialAndPipeline() + { + { + mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"VertexLuminance3D",Prim::Lines); + + cfg.local_to_world=true; + + mtl_vtx_lum=db->LoadMaterial("Std3D/VertexLum3D",&cfg); + if(!mtl_vtx_lum)return(false); + + mi_plane_grid=db->CreateMaterialInstance(mtl_vtx_lum,nullptr,&white_color); + if(!mi_plane_grid)return(false); + + pipeline_vtx_lum=CreatePipeline(mtl_vtx_lum,InlinePipeline::Solid3D,Prim::Lines); + + if(!pipeline_vtx_lum) + return(false); + } + + { + mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"VertexColor3D",Prim::Lines); + + cfg.local_to_world=true; + + mtl_vtx_color=db->LoadMaterial("Std3D/VertexColor3D",&cfg); + if(!mtl_vtx_color)return(false); + + mi_line=db->CreateMaterialInstance(mtl_vtx_color); + if(!mi_line)return(false); + + { + const PipelineData *ipd=GetPipelineData(InlinePipeline::Solid3D); + + if(!ipd) + return(false); + + PipelineData *pd=new PipelineData(ipd); + + pd->SetLineWidth(2); + + pipeline_vtx_color=CreatePipeline(mtl_vtx_color,pd,Prim::Lines); + + delete pd; + + if(!pipeline_vtx_color) + return(false); + } + } + + return(true); + } + + Renderable *Add(Primitive *r,MaterialInstance *mi,Pipeline *p) + { + Renderable *ri=db->CreateRenderable(r,mi,p); + + if(!ri) + { + LOG_ERROR(OS_TEXT("Create Renderable failed.")); + return(nullptr); + } + + render_root.CreateSubNode(ri); + + return ri; + } + + /** + * 写入一个坐标轴的线条数据. + * + * \param pos 要写入数据的指针 + * \param max_line 主线条方向 + * \param oa1 其它轴1方向 + * \param oa2 其它轴2方向 + */ + void WriteAxisPosition(Vector3f *pos,const Vector3f &max_line,const Vector3f &oa1,const Vector3f &oa2) + { + constexpr const float AXIS_LENGTH =4; + constexpr const float AXIS_MIN_STEP =1; + constexpr const float AXIS_ARROW_SIZE=0.25; + + const Vector3f end_pos =max_line*AXIS_LENGTH; ///<最终点位置 + const Vector3f cross_pos=max_line*AXIS_MIN_STEP; ///<坐标轴尾部交叉线位置 + const Vector3f arrow_pos=max_line*(AXIS_LENGTH-AXIS_MIN_STEP); ///<箭头末端在主线上的位置 + + //主线 + pos[0]=Vector3f(0, 0, 0); + pos[1]=end_pos; + + //四根箭头线 + pos[2]=end_pos; + pos[3]=arrow_pos-oa1*AXIS_ARROW_SIZE; + + pos[4]=end_pos; + pos[5]=arrow_pos+oa1*AXIS_ARROW_SIZE; + + pos[6]=end_pos; + pos[7]=arrow_pos-oa2*AXIS_ARROW_SIZE; + + pos[8]=end_pos; + pos[9]=arrow_pos+oa2*AXIS_ARROW_SIZE; + + //侧边连接其它轴线 + pos[10]=cross_pos; + pos[11]=cross_pos+oa1*AXIS_MIN_STEP; + pos[12]=cross_pos; + pos[13]=cross_pos+oa2*AXIS_MIN_STEP; + } + + bool CreateRenderObject() + { + using namespace inline_geometry; + + { + struct PlaneGridCreateInfo pgci; + + pgci.grid_size.width =32; + pgci.grid_size.height=32; + + pgci.sub_count.width =8; + pgci.sub_count.height=8; + + pgci.lum=0.5; + pgci.sub_lum=0.75; + + ro_plane_grid=CreatePlaneGrid(db,mtl_vtx_lum->GetDefaultVIL(),&pgci); + } + + { + constexpr const uint AXIS_MAX_LINES =7; + + ro_line=db->CreatePrimitive("Line",AXIS_MAX_LINES*2*3); + if(!ro_line)return(false); + + Vector3f position_data[3][AXIS_MAX_LINES*2]; + + WriteAxisPosition(position_data[0],Vector3f(1,0,0),Vector3f(0,1,0),Vector3f(0,0,1)); + WriteAxisPosition(position_data[1],Vector3f(0,1,0),Vector3f(1,0,0),Vector3f(0,0,1)); + WriteAxisPosition(position_data[2],Vector3f(0,0,1),Vector3f(1,0,0),Vector3f(0,1,0)); + + Color4f color_data[3][AXIS_MAX_LINES*2]; + + for(Color4f &c:color_data[0])c=Color4f(1,0,0,1); + for(Color4f &c:color_data[1])c=Color4f(0,1,0,1); + for(Color4f &c:color_data[2])c=Color4f(0,0,1,1); + + if(!ro_line->Set(VAN::Position, vbo_pos= db->CreateVBO(VF_V3F,AXIS_MAX_LINES*2*3,position_data)))return(false); + if(!ro_line->Set(VAN::Color, db->CreateVBO(VF_V4F,AXIS_MAX_LINES*2*3,color_data )))return(false); + } + + return(true); + } + + bool InitScene() + { + //Add(ro_plane_grid,mi_plane_grid,pipeline_vtx_lum); + Add(ro_line,mi_line,pipeline_vtx_color); + + camera->pos=Vector3f(32,32,32); + camera_control->SetTarget(Vector3f(0,0,0)); + camera_control->Refresh(); + + render_root.RefreshMatrix(); + render_list->Expend(&render_root); + + return(true); + } + +public: + + bool Init(int w,int h) override + { + if(!SceneAppFramework::Init(w,h)) + return(false); + + if(!InitMaterialAndPipeline()) + return(false); + + if(!CreateRenderObject()) + return(false); + + if(!InitScene()) + return(false); + + return(true); + } +};//class TestApp:public CameraAppFramework + +int main(int,char **) +{ + return RunApp(1280,720); +}