From 29ab40e33d5d29591ef8cf600399e68422444871 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 16 Oct 2024 23:41:32 -0600 Subject: [PATCH 01/25] pinshegitfeo --- .vscode/tasks.json | 28 ++++++++++++++++++++++++++++ src/context.o | Bin 0 -> 1928 bytes src/data/cube.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/input.o | Bin 0 -> 24144 bytes src/matrix.o | Bin 0 -> 9296 bytes src/mesh.o | Bin 0 -> 2832 bytes src/shader.o | Bin 0 -> 3280 bytes src/texture.o | Bin 0 -> 2344 bytes src/window.o | Bin 0 -> 3048 bytes 9 files changed, 73 insertions(+) create mode 100644 .vscode/tasks.json create mode 100644 src/context.o create mode 100644 src/input.o create mode 100644 src/matrix.o create mode 100644 src/mesh.o create mode 100644 src/shader.o create mode 100644 src/texture.o create mode 100644 src/window.o diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..08d9005 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: gcc build active file", + "command": "/usr/bin/gcc", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}/${fileBasenameNoExtension}" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/src/context.o b/src/context.o new file mode 100644 index 0000000000000000000000000000000000000000..c06d23bc602e6723dbf0f3a0689122fed597b095 GIT binary patch literal 1928 zcmbtU&ubG=5T2y9t=M#E*`5VVS2`a|#sqR|l3Ls2LMylC9SO@k)8b+dt1&tO*7`-&n@W+}1|kBkiV4>bAWjxi4bn)pc%#a~8KvA*al&hTSbz%!2EN5*Ho zFqlwaCcU)29Tw~fofvvW_kV*2LWh)muSe!ivf#WyoMR%4zr;M&k@enLn9J;uPX*g@ z%>`F4P}OvEg|cZ_xq@A`9sczqG*?brM!syak>aqELX>2t%<)2gzr2+nVb~j(ygMS*}g-Z=#;4SpA$n{?D9%GYvftG zj;~A7a?G-!;}S`KV7Lb9`D&GP$M&6qU8$HB$1K}5b$+vBRo5sy68@Z3)8`#~-gMkW zuE9!XDOYriiYZ(AFP-3OyiweVillJfs3hCSRWZU2?lh^AY`+(m_EzwCzo^9>1H-?+u?^DpUCXIj&?vHnlHUG7Kf@`s+I%9VIe?Qi;UvL1c>@*?cc&b9pGjE zQs3aXwAIw3VPr@yzK?#EVE@CSKEW{+!Sg)iAX0<%7e)OYwV3T-Jzinh{O^l_$a}&3 z_bc^s{$YD_8sR?~`06VfWQ~2~{<0ox24|0wk~q+9I10qFUFINLVf9Txy4_6Q2-g1r Dg+k+M literal 0 HcmV?d00001 diff --git a/src/data/cube.h b/src/data/cube.h index 3cd51ec..87ac586 100644 --- a/src/data/cube.h +++ b/src/data/cube.h @@ -1,3 +1,5 @@ +#include + #define A -1,-1,-1, #define B -1,-1, 1, #define C -1, 1,-1, @@ -7,6 +9,20 @@ #define G 1, 1,-1, #define H 1, 1, 1, +vec3 calc_normal(vec3 v1, vec3 v2, vec3 v3) +{ + vec3 lado1, lado2, normal; + + glm_vec3_sub(v2, v1, lado1); + glm_vec3_sub(v3, v1, lado2); + + glm_vec3_cross(lado1, lado2, normal); + + glm_vec3_normalize(normal); + + return normal; +} + narray_float_t d_cube = { 3*3*2*6, @@ -30,3 +46,32 @@ narray_float_t d_cube = B E F }; + +narray_float_t n_cube = { + 3 * 3 * 2 * 6, + + + calc_normal(A, C, E), + calc_normal(A, C, E), + calc_normal(A, C, E), + + calc_normal(E, G, F), + calc_normal(E, G, F), + calc_normal(E, G, F), + + calc_normal(A, B, F), + calc_normal(A, B, F), + calc_normal(A, B, F), + + calc_normal(C, D, G), + calc_normal(C, D, G), + calc_normal(C, D, G), + + calc_normal(D, H, G), + calc_normal(D, H, G), + calc_normal(D, H, G), + + calc_normal(A, B, E), + calc_normal(A, B, E), + calc_normal(A, B, E), +}; \ No newline at end of file diff --git a/src/input.o b/src/input.o new file mode 100644 index 0000000000000000000000000000000000000000..adfc3f89666ad44af09d90351e0b7dd76114690f GIT binary patch literal 24144 zcmeHPeQcd)b-zhN$wuMYjE_v^!(+f~XjAjCEgcneS4=O^R&KY@n2#oD;?$w}Fp0CK zs0DA~-Ew8Tc@v#74Q&=1}vb0ZbQ`?sK6a)1Px7|=!Ahzn0Ac7x^=&g^Stl# zUfUVn_-E3tlKVX8oZoZKdCqg*=e+kmukX8tuX*kIb?X}GwXX5%MnxrVqp|R&sz0Re zP~&Nhr#7~>+W*`-_VA|W!0=RaU}oa+#~*L@vpc-l>@P$P3@?MV*c?SWFg%O?Z1cX( zbhqtYJ#hxEg=8zWodOMGK;)KI(f-!Y zJ=%QUkHh1>R{PGS_K}C$TNkJCZ}_3h&or+)(;j{d-S(3>!|CD0vh&j6$J%G^`Ofp# zEj)OxeIFn-#{JVGSgY7d*969^>+|m#%ooyfaYJ2NK``QO~x289|s2`wKd-&YT zI>+w(YNJ{FA?RawF05-71tl|Ems>N}F14nI&$ilMYPIi|)@gaQr}@3kBh8oKf6ukc zk2K$M&m+xC(Dn>3q0_-qY{c+y-Eifn);*)qxbpOdpKmli#RdH|-$GOC*u6c?PY!>p z`N__uU!m!9>u(d|Sm)B?vhv+^v#@?{ck88gcJfJbA)D9lJluIQC-IqW=N^Cjk!Ei( z;&!Hmwri5~`O#+Ya3^){O`Z8in>{i}@dM3Ist>nXyB1pQh1R-GYu!TYp2hX8nP4+J z(=JZesE#Qz;rT|WCkNfeqs`HIkb)oUYyhh#q%D&~oO!glEkkXrqezx0%zA#dD+cqJ zDi^7_xnTDlZ_J1zuY);Ft6j|7OEohi8)IG910a_DS&wkTT2CX`Bxk?<7g$g*WBG5A z9RMOw3z}?i@ql9<=FZxjg_=PEP(r=XKxv8uNR5#rqXO4aibRD1S)pcU;otBgS+Vp- z!wUHiVH9bbG9)HCjB7W^q>;nJZVb5yDwJtt&$gVsgH$)8h#;%B)Tkj+(}f`IqGd{u zb}?c~kan@nlpyV5hbcDA{zh}482V2s(wKHJZZR8+MA9k;Ce{rhh zeLQ$b8X?in5Vxm!@WDOJn-@qEO*ygP-Lt2;?+mQ(fO=F0H3P+jDY}H3@HpgC=FkgJ zv!=uxH8oJonW?b@#i<(AF(u|R3sNXD#X^R;uk%mfESfXK=DrTYvRvbA1*f56rg#DK zA#i%k5pf?gDwQTg-Vk{+P>h%o^F~vpO&LP443V=4mMJlBjM|!9 z8u3Ifh9mN)zX;BC;K*Rf`4~8!{#|pL^Gu9b2DS8OSS|o8Nq|t$fCEeKSPfu(a%O3? z0w7M0^tgzfp#&3CY7

@NF=xlrl@{Vj@x&4;9`mi zG`O1A7i@4}HjWL*U zp)`w&#zb7GD&i6-+UKA^(G{swTv{{3T#b1uoEfGA3+|G8mR;PDpy3?QrI6~lz90z* zW6}^I31H@-G)c<5(A`E1P;{yR$=MhH(gT?5%%nxTw24i-SYl(hmo1RIazlV)9cjh9 z>2n~+;_Y7`csB^vs1^tw;`X!#<>U$V0V$^&xaF6O@EUI5rR*Yi;vz*TL1sfJ)O?Y5tj$GWcvgt2G z-6RUJjH$G2qXP(-qWTL`Suq}=f8I#8v5UI}G?9PgM5ajS>n8x^^%ElILlPkas$#su zdf7m)i}AaC`EdUlw^&JmyE{{4Mvjp~e{d1Z!-U|@QEpbkN6G?`KC1?biJ764r-90g z@ll!REsonOUS3o7!xCTAlHxPF!Ms2y%`R$21jAKxsKvpR2G>i$DsTd!p za<9y+ogpVCL=NKvJj<-GjsnZ9@Fs~!#W+xOBtwx*s8oz&F;2)zZ}A?-h5O%}U9rS* zkrX!>1~V>{W^vJ&hzr3Hmq5`z2L+0*$RJT^vpY$J-t11f%QZU9F78Coa1Q8FNOiH( z5fH|tAwm+s%tL9CwA|@pfTB|kNY2Ipko98Ru}cxZc~W+J!2-!EHw35`<3P|5GdB>c z7UK-c$rI|ytBz7ySE9Kfyk$jaF%DQ#kb(jji*cAp#W+krQKcjmOnL}5r{B0mWZ zF9XG>(f>ek?lMSJ%FlCD=!I_ho}@tz%9$z3p@y@foEjrV2?%>qQsssenWTAX5?Q8b z44{KaGiH_ijR7FLit&P?m5TA%8ns9YH??eVGbx!qv@Kg8PP;f~ij9l$GVUo*o7@y^ zmM&Rhp(z?JP-<2d<9*N&#hBf)7|R@P>2Rm;1dH)T-drHeY}!SSDKT*mVTz55vBaqP zWZ*j)7fMn1d>e&wc2=K^V*-8TUSF_bG1i0!W(I{VhS=cqE}NS~!IPLuzio^_2Bs){ zkD_tqC*wi-=PiE=yZD9xP2?Xrktq`T`UyaJ{e+15kVMFUsu&MhFB|A}F`nRR+HA{W zB?Z1$FhyqM7&-I@7r{JC2<{x^W+i;2ED)&}2a1WAp_HeA%8T(fndmJh?G-or9rnW# zU(}M~TMUDFfl!)V)EXmSMx`o37bqFWpg@7FP%6fZ37DxEk5jorG+}4Ri3yRz_yEsh zEUcrzGAq1EB2qC96dlP>BoitX<5-NNveH`|bzE4Cr|gO)j*FzY$uO94p)`w&#zb5Q zj<^Jh_Bkj}bVUYn_*m1iQEsLBlzqOCi<8PDel(lZFUM05cDzNz!ts zivfyGH6S?~13=b`@tj?X_?;wWw@+ChdF6%x^pOT`$RQ4%N6NMp-iToruybKhhM*joFxyv9?DL>Cr zp%;454ydZ3oSC8=YB(#(sWDQNfUqYeRc=U;Nt%}?k!6a;06Lg7V^+!E7yvRA-lwa+h@PW&f#qM@79CikLDZyO(96%Fc3JZP?JG__sTzO?)DCC_uDHV7FgI><7W#?| z040(8lxA0?#>kOTX{)1Bh6f5{h00DnW9c`B6--8_o}_JRv>=4KDOC^#(~!}T?l+z%-6!NgO61;Rh~X*I{ivlg4NWF>E2pPa18|T ziAs^~Q*4~>$Js@ZwP4nin5d(s#KgyKQ)+PJZ%Pf0{A<){Q)I$(ZQ1TJndf0m@G9Mf zH<_nfi z*Be*-mbqbW!R9P!C30`Ejo~TNebLexa^XfT-QNP?t)k8F8s=L4-{9G=^iL8^7+zzTwzhVvsce1_0 z-RVx%RiFlqEB2Wi=C;_Jg--VXP!fquX_oF96X{NH9i>RXY@n2!36-ULEWNYMDa~{z zozk5U>PDoM?je)LB&&uf-I-|)#uqnM>HeGNN%tX5GbM6wF~RVZ>E5z*hFrK&OZQ3e zrVGAzrTfvf1b09Hhp7}RJ;KK6zKvac7`9-CDKYV7w<$64Ww$9cI1D$X2IZng9XCZL zJZHL-gKkQ9!K-u^er37`imS?W50n=9eCa-=uqfTxEz_NZ(tVun;UwK&s;Q^DSS!<= zY_D*4x>Geg++oEhj4R%4ZkU_1ISZZc0iYxjnbIuXH73%X;5tf?fZ0GPITI>N_gMO& zu!3l6cPE|Foe=7#jJtctq%p}Vw$h!M=3smSsR`jGFh0wtW!JiQKPd-NBIEo51FCdC zW$6sLaHE#)?*VVR;ColP&#onSF9h(3O0m+X**M)h?BY(rf_YP7;^f?vm^eH)r3T*+ zn^J>vQKObkkqOV4?&P4G(p~T>-GyJ7?t$W}GTj5EMLu7;pHNto?(CN7PD1IvK=<%1 zsJ&EEPj|6araReQ;qG*&YIrzr#SMS%E#7BtnA^w?*7#;qLZ^EGD2YU-G)s4liF7Bp zj#4C`GEhp+gv!!Ami}aTk7z30NvCutgt{qXx`#{}ldNJZ-I-|)#=r2>Xr%kL?sWfh z^-;CQGmk{ZGa?L6xw~(&bcS5GQA_s^fHz(6y(`^Mt|j;|1oVmF#23VDobLVX;!eSW zK~rMl!>K7T@!`~z8hki4r3U4qMr|`iCOl`llY?$bcfqT47k*{B2a2o8bPtpk`F!bq zN?}pDvsDRX`n_z9jw z4%yKyY;e(<60>|_cf@WZa1#63U8K&kPYJh4{8M{IH>R?KS_kx0E)0uW@r>>`y^ZrO zcKs|b;>AKe0Z#0!?BaXN4Hcj~JO~l18MR^T5cbFFB=V^BvY`x{WN)#AMQGXVl*K)4 z@E0AAaSVpG3~eL~rr1z0xTcN8n4R z%DAO|FgJoiX;zd@l;o(ubrgMJPy?kBLW4x!Xo#5`h*eJ_Gbkrd zs3)&OL`v&QG#7-ob`lw|q#y+au*{ou5*a3-s8W(nB9}cwO%xxQOp!^S;2t@#7!rCj z2|&4-goy4W5v-+?NM9o5Nn}G?dvEctReo+{T}lrGJ3l4GXCH&<3dg01g4CGEPlChC zKrw0@6e!MJ28l}f*+Ye1XgxTK&l8+K%9-7v9BMc#%Be9@lz^}&B~@-nkx81DCXr=| z#sE5)G-FoD-xvTgQZ(I->WH!|zso!;Eva*);@GoY=-H+j72}P3%n6b6(@s66*ti() za4~k{XLO%=ud2_4i?JH~p^;}_7UKnkJ01&Sw=Bjo=VyVRU@`8qYn$w7zbP@xCw2$z zHl`!7pWQ{FoN_VVBJoe{8Qqx55Va2IsazNqwc;7w7QOXGGQzH(<&FF!Co)AsUq2iI zKzaRyi20C2$bhOCZ?j%D9HwIYRbM{bzjj!xq$r=*B{Ont+}%`+1$T~ev!XOzSGY{l z$!egOm>EiW8mPP&Psl`Xan@dOqd!W$xE-mCTj~dMBPf(6;{a=nTpJa*j*{^T1+qe^ z7&9hdreZurN02D>nqF7vn(C z5HmLrs}|!7%E=Sz$*Yc1T34dEAiT9=9I&Jy1qCn`<1mqmahQOjN=Yil3!dRT8{Czc zB9lHr6*;jO5_&TUK)IQOi0&j2tfgY?OQbBui&j}IR{6PPyOuaVB}IX$>{FU13PTzb z`AKki87M}L{s)S4mqDUZelAm?7y6tXP*p=Yi+d8;R*F*YRnp&d5fJvIq{UPh5k zkF4SkKS3=WzgyL(;bN?2Wih@R;f`X=Zdr_F&d&lr!D8I-?Zi2Hh(ljfVwO+r_J9eu zF;9v8>@EsrkBjjpiGOO(=*Cp~sC7V3<-)M270>AQ(_3%(gY5cQ-pD_4B2y&v^}`_m zl-Ey)m=8&W45*6n7VBlhVJgNQUp_3xLl!G3@V$a5G9$;xp+C3?=3zo`=O{NT;Ui^% zNX0l%Ow0_WJPlM{j7Mamx473{aiia6KP>S@EvX;Oji6APUDO&QU+|j;P*q3CI6Mv% z$O@%m%$R_git!FA_sWdh8FFGmdB?T!cfUy{diByck1QbC`OI`2a0o-L84NAE>NKt`m7yLRYN&5MLE=PR+Lj?q$mMlPfDuXkRp>b zFHIuL6paCNFlolDlD{zkWL1oHipZHZ9S8i9?n%WheAWezv_Fz^J+?wnoYNKEOZDKT-MZinh_j)z_(-=*7V5TFien|&^8YAi^|E>;p9~#9&fwr+| z8=~+_6v;*_ZiA+`@<*hep$(F+F$<4tNxUFe*F_) z|NIsBe|O{RtFHRBzW%K@A2~32r0->~*!=R%gO|Si6-PwBav(Uiya7!Q{xgNHzHVy+ z=hz+cF2H}j@S|FKt$W7}jde$R)?IwjlQ+)dr?s8~F8}j2!M7`)*7JMouX^f*>u&|Z zvMb2P>(zWq^4lfW*td|6*W36uoW}1g$KOFdUT67M%D-I7-$y=P&w4K2lKg_FK9_*! zfOR*8cwKfW-b(q4FSQ2}t$5?FhHYqkpJ$3IUKgzLOL0E~)cTCCSb+C)!B4be5E?H~ zw1bG|d1!lKIlbryUzgxN`AL%6%Y%y`Ldi=S4{YfHc{1;393UN3ahcpciO!~c&2 zt+hb^&G^r}=zi@1gZNG1pwhIYU5#7z?ccxsw|5_$bZ^i8ox6884v*~{+ci11 zd;89#dk;5m+k0U5!P~aqws-gBcp}Ef_TDl+*?4kB;p-4EW(mXxP4M{MPMz zcJAFr#;!vL_wB0`>^gXOPvh|319*G;p~*ds2}(5=sFLnCjNOhoe+~cn!gb%k@7p!7 zpXs%TK40WB#}dCc)`j_YQO3U|Ce~w>lr^^_j~&=7_aVizx)@>@Am(O7no0c?*D<{Cwz+Mof$v(|GgPM z_y428r~cgk`HY|Y|2Mx_`IF~u{|n7uk0xKQD_>OMbN}BO{De>O-gKYm5Ur~gUM##gS+zbE5!UJ3vEud3rWnrz&)2LHM% zDtxZz8CO;OJf1IDgZ~d1KiBgoudnpvak$|P6+g#cd`-pA@s|ak*CTT_&9~2RUB8TV zdJRQ~JpP{udPlU0|B;}ly7=k7cCL$`?ngUa{B$4L*nIf*{gXRyMmu@P?Re@P8r!#X z^W@mk$;Rg0J12KGHs5^saAWhKgC=$z+`oV90AvRaPL6HHXRu3ka~Je22aar>ICOAg z?9k-x7(-2CeHhMLE8ZjJuc07*IpUvWaT}J%#>MDyZH7vYJ3ahs zUc636B0dFuj!k(P<-Wn~nfwdzKYvYy-Phzy^!vK#OF&a+_xO8b{6$@O`kKFZS<*i9 zB7e=tcz%w|U&;T(8xO_!C^IFWSiVyG8(Ck1czepVIaT%3xWu^u9p1Nh z``;7e`w}qPZvWo~K6Q4FAB^$o^IcNYJ)T*(+WOCrdcV!Z literal 0 HcmV?d00001 diff --git a/src/matrix.o b/src/matrix.o new file mode 100644 index 0000000000000000000000000000000000000000..f0a32a095dc701c1801f9b0c13a4e36005fa5cac GIT binary patch literal 9296 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 literal 0 HcmV?d00001 diff --git a/src/shader.o b/src/shader.o new file mode 100644 index 0000000000000000000000000000000000000000..5a7b2374e9171d067adb3ca976bfde3dbfafdfcc GIT binary patch literal 3280 zcmbuC&u<$=6vxL-+Ca&#hJp&^hc7@VWEH15wFtR#wpprB3XwrV1hcl+u@&1Jt=DaW zhyX=JtQI660fFE@;J~GDsLW3b2_yp&L@0+`kb>$%Q9+6z$hUosx^N~Mi7>JVdzkflL>a5!*lQmKFuOi>*Y7FK`AOSsk2@RtntKZl zy6V2u?0oy>r`=)q0P;?2sfYf?W3xT&Y;0>zt>vV)a+*7M&m=_99Ca_=XsXxZE@Msg z*J-FUS8ZvR8nr{0agLwgL>c9=<<4EYhPgOud%;V>RomL@sn&-mzJl-SG*5S0U5_@Z zHFpGuJ?ZY1mthvb-?-{7%rnI2xjIXtRNGazo$pcLk0MrM8)II^ximMmm(w0N!e7Qd zu#2l>m8n(iS}cA-nNg;vW=_<2fA)Ss&<|`7 z$~Y7}2J`1qEXr5|*#H!@BVNTK&p*K;YvYk)!$UXJVZrVIjs@**e5j-2uSAn02cHB1 zbaCt<0b-s?}qRXLipz)d@F=s4dH)=@KM+pe6KUOL129E zp}rmZLGN`ugeOIucSIb1J|NDy5Iw6F^qgTSS(Y=Zwq>rTJ;2iG<&tr6&L|nSao#eQ zExpXLmZ955zaq&QDQZ>UaH`t%UM`t>F1;#ZdGS5(MV^D0((5dmH7jcflr+n$#gfq{ zn>TE)U%Vhxr)^u$7Wzb9`h94jSXrTL)9EU>tfaGrm2_S&mYA1f9ul=h&{U%Ddm9Ony3f2*YbTHV6Xb`7+={X;#d+Q}1 zr~BzWAE)p8Gask#l_}NrvaM&Jwk@wNP|Gq(x?&q^HdAuCturN4tuiHRmdi#3SjDsr z1%B(M_@Ng4~*H_2u2~Dhp*WX8T`L02JX1Dcy?t=h|V8k-D%9%WyfFu z&q#sKf)PkU@m_DR|VK1p{V`-OTdHnuP%gj z;fMQ&i2P~)g62k-g4mErkq6#si2VNeZ-RgC0I@p%`=2p`78)U#ugmYIApe;7|D)u& Jb)SC!zW_e9RgM4v literal 0 HcmV?d00001 diff --git a/src/texture.o b/src/texture.o new file mode 100644 index 0000000000000000000000000000000000000000..3c9175e562a2bb8222d18b4ef037291e0e143bf3 GIT binary patch literal 2344 zcmbuAO-NKx6oAj0G_5pET$n~Yg32f#{zQaSjOpl0A~F&Sit#yfotc~;dGm%el0qYR zOoGdz7U8>+0oKb4eLwH|p&F{-SIyDigQol4oY~Obtx-3y5jL}B$D1+4bOT#$%jRrg({w+) zr=shWmA+4xMDi*N#9Ny7v$gCd4$W_EBZY@V*?)tz!)ZEZ!FL9IKL%La04`M>-) zpIp&=iXwE=omwwU#KqVwUpbDwZqD{=q-z%HmVfwa7CsL|wR(VPfdeySr0w9vsOeos8brVYC~qE$tl{Zl66R2xXF#VXMVP zljyrP2tI&iVtcTW;P_m$2RA^QsMVUPDk|r20!NTiBbla8;9%`jUw8Fh-y}xleHVzM z==72PA@1h6cZj1LqmT68F8Ci3M@iC0`h6@PK&*t&-ju=5?Gi3r6M2i}0Gf3Q=W9XM zh>iBeD|ly0@^icJ-d*?*avE2Tr=v|0!bW_aTVijppT<^dK2Jpas)*-%h5eVi#Dl{o zoQ%zk5QI|6(O4uX07T+_EO|5UO`~-=mJACME$m&lY%9SWX2&2HOgmO+EEtN81xKw| z95QLPQz*>Rj-8s^u_N&w7RS7u+98`+4hxQ3NKrfaF|lYQ&hBH>m4p>x9X)(ShFBNf zNou+6yj)Z`-CfBC6uwvCY!@!?7}c&&;$JE8YJL9X&`0t6mH4kpJiQ$`pKpTuP**8j zS2+2k_(g{pwP|4w3oZG)upfK)s<6RGPbM5|1hr%5byW6j7Pk!Abuhw~V}UV}PJT**2B@$^Y(Fx(|8&1pc`fpF6=GlRpTr~Bp-^xBvdDif1BLeH z-$h>P{2J)-p$zkH{>@RY%$Mg^YHUimB_?!U%!7XK>5RPj`vgZ-By-|G-xSfp{!4ra UJKnP=--MWdTm}j)rn5u;08W%rhyVZp literal 0 HcmV?d00001 diff --git a/src/window.o b/src/window.o new file mode 100644 index 0000000000000000000000000000000000000000..ab21cea0a19ac38d64ce4487edcf3aa7f6b55601 GIT binary patch literal 3048 zcmbuAUuYCZ9LMJ_QB#|ktF^YE)GLU!rCHPn6)Wu}+e_AxRPl0JT4mk4Ow8flZrDG@ zNK*w-Sni>D=!4LQ_Nn;Vmr}LVgM!)zeJlli5Q=cpP!L~&wCL|QJ7a#VyQP1Auru@f z%=h=3*_qkd)8(;|d@je7<=DGy*;ACUi#^Njl4zD#AM0fg`(J%jHKKdQ*~MZszZiub zBdXr*pyFIRT>U*Z?q7!D$1W(Y=8JhII%Bu%shcZyv8z4GZH1jydC_Q9?+%F!moQCq zT|^pDdC53Czr?~`;S0g<9~&*et(Q<}M86nH{4Z#$+G&l$pyj3L7LEV;C-Ra7BbtYC zU@SSp!ryntQzrUz?fx&?{ol3!K^UZFqq@GkxV2gfoggf3AJlee+Xi+FhQif`#(hvwiyf6|4H1BD9!K;cC!bM)B3tnPUvb7 zt|eT&3$XR@;JPFY-zAM}8T`ErKAyqr89dD3pJ(u|Gx(JZelvsr1{~K%t&7-8V1H!j zSHK3KzFS@fVsAma4*axr+nm7%Gx%QMnExH9(Ztz+`e25h%{H7#cUG&jhSLbl*ki}+ zsoA~Yi^d_LFd9zm>K?ZO9z)ST!M$d~0mjVHv3rT^r#|h5_M~pRK4*0-X@>W? zA9(JZT&S1DZp8Nq-XDKHj%_F5c*iKNXYd0V+#!4=$@3ZEs|a6^{7tBzBm7IragO-y ztNDB*IqIJ${9DOU-%I!plB2$l@avMJehuNb38(Y^Mq9hxNtNY++f~)WTOoFTLm1+K5Gq7q<2VPuH ztCq)YOT%-^v`H(lm{#+Brq$hM6A!WGxB=JTA2r|y_>sl_F(=e!JUHE6Fvm2Jflr%L zp4H@X2LG=rLO3oJo;hkI>6mgIRbRqo8=wRCu%raCF35y8WB{H;Y{IWo*ekN$0yT2= zKbDw%l^jTRB=K9oG3S4c-wv^ua~nL=)cCJc2yHdKs&^AcrPq{z!W8WX!0>$Hxud4m ztw;=%I#qW{>*&@qwk&J%=IdBQq literal 0 HcmV?d00001 From c2adfc2bda610723869360238e7dc5af5932acf6 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 17 Oct 2024 11:30:36 -0600 Subject: [PATCH 02/25] aiuda --- src/data/cube.h | 50 +++++++----------------- src/main.c | 29 ++++++++++++++ status | 102 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+), 35 deletions(-) create mode 100644 status diff --git a/src/data/cube.h b/src/data/cube.h index 87ac586..234b58e 100644 --- a/src/data/cube.h +++ b/src/data/cube.h @@ -9,20 +9,6 @@ #define G 1, 1,-1, #define H 1, 1, 1, -vec3 calc_normal(vec3 v1, vec3 v2, vec3 v3) -{ - vec3 lado1, lado2, normal; - - glm_vec3_sub(v2, v1, lado1); - glm_vec3_sub(v3, v1, lado2); - - glm_vec3_cross(lado1, lado2, normal); - - glm_vec3_normalize(normal); - - return normal; -} - narray_float_t d_cube = { 3*3*2*6, @@ -47,31 +33,25 @@ narray_float_t d_cube = }; -narray_float_t n_cube = { +narray_float_t d_cube = +{ 3 * 3 * 2 * 6, + + A C E + C E G - - calc_normal(A, C, E), - calc_normal(A, C, E), - calc_normal(A, C, E), + E G F + G F H - calc_normal(E, G, F), - calc_normal(E, G, F), - calc_normal(E, G, F), + F H B + H B D - calc_normal(A, B, F), - calc_normal(A, B, F), - calc_normal(A, B, F), + B D A + D A C - calc_normal(C, D, G), - calc_normal(C, D, G), - calc_normal(C, D, G), + C D G + D G H - calc_normal(D, H, G), - calc_normal(D, H, G), - calc_normal(D, H, G), - - calc_normal(A, B, E), - calc_normal(A, B, E), - calc_normal(A, B, E), + A B E + B E F }; \ No newline at end of file diff --git a/src/main.c b/src/main.c index 927b0f4..d0d8c4b 100644 --- a/src/main.c +++ b/src/main.c @@ -16,6 +16,23 @@ unsigned char palette[] = 0x7A,0x1C,0xAC,0xff, }; +void calc_normal(float* v1, float* v2, float* v3, float* norm_vec) +{ + vec3 lado1, lado2, normal; + + glm_vec3_sub(v2, v1, lado1); + glm_vec3_sub(v3, v1, lado2); + + glm_vec3_cross(lado1, lado2, normal); + glm_vec3_normalize(normal); + + //para menos p2, ahora lo guarda en norm_vec + norm_vec[0] = normal[0]; + norm_vec[1] = normal[1]; + norm_vec[2] = normal[2]; +} + + const char * wname = "manigraph: manifold grapher"; int main( void ) @@ -32,6 +49,18 @@ int main( void ) glewInit(); + //nostoy seguro de como escribir esto en cube.h, pero supongo que lo que me decias era así. + for (int i = 0; i < 3 * 3 * 2 * 6; i += 9) { + float* v1 = &d_cube[i]; + float* v2 = &d_cube[i + 3]; + float* v3 = &d_cube[i + 6]; + float norm_vec[3]; + calc_normal(v1, v2, v3, norm_vec); + n_cube[i] = norm_vec[0]; + n_cube[i + 1] = norm_vec[1]; + n_cube[i + 2] = norm_vec[2]; + } + if( !( shader = create_shader() ) ) goto error_shader; diff --git a/status b/status new file mode 100644 index 0000000..9686b60 --- /dev/null +++ b/status @@ -0,0 +1,102 @@ +commit 252aab3dd289cdd7cc5f4fe0edb31654e687ec22 (HEAD -> roberto, origin/roberto, origin/main, origin/HEAD, main) +Author: PedroEdiaz +Date: Wed Oct 9 20:45:05 2024 -0600 + + Merge: crisel -> main + +commit e25f509ce112050b265f8740998ce30f5e702dba +Merge: 1997801 a650807 +Author: PedroEdiaz +Date: Wed Oct 9 20:41:43 2024 -0600 + + Merge: issue-01 -> main + +commit 1997801f88c7581849cc52f2b71b3257165fd95b +Author: PedroEdiaz +Date: Fri Oct 4 00:37:52 2024 -0600 + + Merge: doc -> main + +commit d22daff16d9bd7d85cfaeca14f2500bd8686d44c +Author: PedroEdiaz +Date: Wed Oct 2 13:10:08 2024 -0600 + + Merge: doc -> main + +commit a650807b94b69ce45666ed19d57fcbf806ad7d46 +Author: PedroEdiaz +Date: Sun Sep 29 16:08:18 2024 -0600 + + ISSUE #1: Normalize quaternion to avoid deformation + +commit 6c3b268a6598aab4e69201073206b37cd0b823ed +Author: PedroEdiaz +Date: Thu Sep 19 10:37:00 2024 +0600 + + First doc update + +commit 3c9690a2a7db196b851ff64edbe414f18a94d9da +Author: PedroEdiaz +Date: Thu Sep 19 10:15:25 2024 +0600 + + doc/: definir como funcionan los archivos + +commit 86ad43c2dc507b5257685c847683a23420eaf752 +Author: PedroEdiaz +Date: Thu Sep 19 08:58:36 2024 +0600 + + nlroff -> markdown + +commit cb525a1f2033e512aa55af3cd5036b5ee18bc976 +Author: PedroEdiaz +Date: Tue Sep 17 22:05:34 2024 +0000 + + nulldoc -> nlroff + +commit 98b0d7888072bb9beafb4910ec00b86fde18ad87 +Author: PedroEdiaz +Date: Tue Sep 17 22:04:25 2024 +0000 + + Make doc directory + +commit 25e08fc4062a5735e231dc617a70494556a184d7 +Author: PedroEdiaz +Date: Mon Sep 16 23:50:50 2024 +0600 + + Add documentation build + +commit 15dc499cd9233c28778cffc925d9d045f2e39302 +Author: PedroEdiaz +Date: Fri Sep 13 01:23:57 2024 +0600 + + Add src/input.c + +commit 6161d310bcb50a13e9cb853045cbe2da2b0a1957 +Author: PedroEdiaz +Date: Fri Sep 6 05:08:07 2024 +0600 + + 0.3 Rotate axis + +commit 0f387f8a71fd504bc5d08bdae850af6a0c8cba6e +Author: PedroEdiaz +Date: Thu Sep 5 15:05:33 2024 +0000 + + 0.2 Clean up + +commit 06e8e9074b8a55a7854045fcb5cea9e5e1f6018d +Author: PedroEdiaz +Date: Thu Sep 5 14:48:51 2024 +0000 + + 0.2 Draw axis + +commit a2f49afbf412dd4ee39c57438363cb0c1a8d12cd +Author: PedroEdiaz +Date: Thu Sep 5 11:31:50 2024 +0000 + + 0.1 Add external dependecies + +commit cce685d90c3c4abaa6effe291def4d2c42bb6db2 +Author: PedroEdiaz +Date: Wed Sep 4 22:35:31 2024 +0000 + + 0.1 Graph cube From 502ff0daeb408662e91d49bbcecf9bb5be087c03 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Thu, 17 Oct 2024 11:48:14 -0600 Subject: [PATCH 03/25] =?UTF-8?q?Correcci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 1 - src/data/cube.h | 4 ++-- src/main.c | 35 +++++++++++++++++------------------ 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 3ea3d4b..f19225f 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,6 @@ OBJ = \ src/shader.o \ src/input.o \ src/mesh.o \ - src/alan.o \ src/main.o CFLAGS = \ diff --git a/src/data/cube.h b/src/data/cube.h index 234b58e..3769b79 100644 --- a/src/data/cube.h +++ b/src/data/cube.h @@ -33,7 +33,7 @@ narray_float_t d_cube = }; -narray_float_t d_cube = +narray_float_t n_cube = { 3 * 3 * 2 * 6, @@ -54,4 +54,4 @@ narray_float_t d_cube = A B E B E F -}; \ No newline at end of file +}; diff --git a/src/main.c b/src/main.c index d0d8c4b..0872456 100644 --- a/src/main.c +++ b/src/main.c @@ -16,22 +16,30 @@ unsigned char palette[] = 0x7A,0x1C,0xAC,0xff, }; -void calc_normal(float* v1, float* v2, float* v3, float* norm_vec) +void calc_normal(float* v1, float* v2, float* v3, float* normal) { - vec3 lado1, lado2, normal; + vec3 lado1, lado2; glm_vec3_sub(v2, v1, lado1); glm_vec3_sub(v3, v1, lado2); glm_vec3_cross(lado1, lado2, normal); glm_vec3_normalize(normal); - - //para menos p2, ahora lo guarda en norm_vec - norm_vec[0] = normal[0]; - norm_vec[1] = normal[1]; - norm_vec[2] = normal[2]; } +void fill_normal( float * d, float * n ) +{ + *n = *d; + for (int i = 0; i < *d; i += 9) + { + + vec3 norm_vec; + calc_normal((d+1)+i, (d+1)+i+3, (d+1)+i+6, norm_vec); + glm_vec3_copy( norm_vec, (n+1)+i ); + glm_vec3_copy( norm_vec, (n+1)+i+3 ); + glm_vec3_copy( norm_vec, (n+1)+i+6 ); + } +} const char * wname = "manigraph: manifold grapher"; @@ -49,17 +57,8 @@ int main( void ) glewInit(); - //nostoy seguro de como escribir esto en cube.h, pero supongo que lo que me decias era así. - for (int i = 0; i < 3 * 3 * 2 * 6; i += 9) { - float* v1 = &d_cube[i]; - float* v2 = &d_cube[i + 3]; - float* v3 = &d_cube[i + 6]; - float norm_vec[3]; - calc_normal(v1, v2, v3, norm_vec); - n_cube[i] = norm_vec[0]; - n_cube[i + 1] = norm_vec[1]; - n_cube[i + 2] = norm_vec[2]; - } + + fill_normal( d_cube, n_cube ); if( !( shader = create_shader() ) ) goto error_shader; From 6218c5d576481e6a95d9f2722c069ddee1847bff Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Thu, 17 Oct 2024 12:56:33 -0600 Subject: [PATCH 04/25] Fix: Wayland compilation --- Makefile | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index f19225f..8a0283b 100644 --- a/Makefile +++ b/Makefile @@ -15,6 +15,17 @@ CFLAGS = \ -I./ext/glfw/include \ -Wall -Wno-unused-function -std=c99 \ +WAYLAND-LIB = \ + xdg-shell \ + relative-pointer-unstable-v1 \ + xdg-decoration-unstable-v1 \ + pointer-constraints-unstable-v1 \ + viewporter \ + idle-inhibit-unstable-v1 \ + fractional-scale-v1 \ + xdg-activation-v1 \ + wayland + help: @echo "Para compilar el proyecto a tu sistema operativo" @echo "porfavor usa uno de los siguientes comandos:" @@ -51,13 +62,19 @@ cocoa: $(OBJ) $(MAKE) BKN=_GLFW_COCOA libglfw.so $(CC) -framework OpenGL -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw -libglfw.so: - $(CC) -fPIC -shared -D$(BKN) -D_GLFW_BUILD_DLL ./ext/glfw/src/*.c -o $@ +libglfw.so: wayland.h + $(CC) -fPIC -shared -D$(BKN) -D_GLFW_BUILD_DLL -Iext/glfw/deps/wayland ./ext/glfw/src/*.c -o $@ + +wayland.h: + for i in $(WAYLAND-LIB); do \ + wayland-scanner client-header ext/glfw/deps/wayland/$$i.xml ext/glfw/deps/wayland/$$i-client-protocol.h; \ + wayland-scanner private-code ext/glfw/deps/wayland/$$i.xml ext/glfw/deps/wayland/$$i-client-protocol-code.h; \ + done clean: rm $(OBJ) $(BIN) -.SUFFIXES: .c .o +.SUFFIXES: .c .o .c.o: $(CC) $(CFLAGS) -c -o $@ $< From 3137c23479270280ad6b6052edb7527a284031d5 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Thu, 17 Oct 2024 13:03:35 -0600 Subject: [PATCH 05/25] Fix: not linking of math lib --- Makefile | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 8a0283b..b0ce13a 100644 --- a/Makefile +++ b/Makefile @@ -48,11 +48,11 @@ glfw.dll: # LINUX linux-x11: $(OBJ) $(MAKE) BKN=_GLFW_X11 libglfw.so - $(CC) -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw + $(CC) -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw -lm linux-wayland: $(OBJ) $(MAKE) BKN=_GLFW_WAYLAND libglfw.so - $(CC) -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw + $(CC) -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw -lm run-linux: LD_LIBRARY_PATH=. ./$(BIN) @@ -60,19 +60,20 @@ run-linux: # COCOA cocoa: $(OBJ) $(MAKE) BKN=_GLFW_COCOA libglfw.so - $(CC) -framework OpenGL -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw + $(CC) -framework OpenGL -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw libglfw.so: wayland.h $(CC) -fPIC -shared -D$(BKN) -D_GLFW_BUILD_DLL -Iext/glfw/deps/wayland ./ext/glfw/src/*.c -o $@ wayland.h: - for i in $(WAYLAND-LIB); do \ + for i in $(WAYLAND-LIB); \ + do \ wayland-scanner client-header ext/glfw/deps/wayland/$$i.xml ext/glfw/deps/wayland/$$i-client-protocol.h; \ wayland-scanner private-code ext/glfw/deps/wayland/$$i.xml ext/glfw/deps/wayland/$$i-client-protocol-code.h; \ - done + done clean: - rm $(OBJ) $(BIN) + rm $(OBJ) $(BIN) ext/glfw/deps/wayland/*.h .SUFFIXES: .c .o From fda999bfb1ca00803db91f2b16379c59c6f74f18 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 17 Oct 2024 17:58:55 -0600 Subject: [PATCH 06/25] PPP --- src/data/cube.h | 6 ------ src/data/shaders.h | 22 +++++++++++++++++++++- src/main.c | 16 +++++++++------- src/mesh.c | 33 +++++++++++++++++++++------------ 4 files changed, 51 insertions(+), 26 deletions(-) mode change 100644 => 100755 src/main.c diff --git a/src/data/cube.h b/src/data/cube.h index 3769b79..a6cbb1f 100644 --- a/src/data/cube.h +++ b/src/data/cube.h @@ -31,12 +31,6 @@ narray_float_t d_cube = A B E B E F -}; - -narray_float_t n_cube = -{ - 3 * 3 * 2 * 6, - A C E C E G diff --git a/src/data/shaders.h b/src/data/shaders.h index 1628553..9c3039c 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -2,6 +2,7 @@ const char * vs = "#version 330 core\n" "layout (location = 0) in vec3 aPos;" + "layout (location = 1) in vec3 aNormal;" "uniform float idx;" "uniform mat4 fix;" @@ -9,13 +10,19 @@ const char * vs = "uniform mat4 mdl;" "out float index;" + "out vec3 Normal;" + "out vec3 FragPos;" "void main()" "{" " index=idx;" " gl_Position = fix * rot * mdl * vec4( aPos, 1.0 );\n" + "Normal = aNormal;" + "FragPos = vec3( rot * vec4(aPos, 1.0));" "}"; + + const char * fs = "#version 330 core\n" @@ -23,8 +30,21 @@ const char * fs = "in float index;" "out vec4 FragColor;" + "in vec3 Normal;" + "in vec3 FragPos;" "void main()" "{" - " FragColor = texture( palette, vec3( 0, 0, index ) ).rgba;" + " vec3 lightColor = vec3(1,1,1);" + " vec3 lightPos = vec3(10,10,10);" + " vec3 norm = normalize(Normal);" + + " vec3 lightDir = normalize(lightPos - FragPos);" + + " float diffuse = max(dot(norm, lightDir), 0.0);" + " float ambient = 0.1;" + + " FragColor = vec4((ambient + diffuse)*lightColor,1.0)* texture( palette, vec3( 0, 0, index ) ).rgba;" "}"; + + diff --git a/src/main.c b/src/main.c old mode 100644 new mode 100755 index 0872456..ddf395e --- a/src/main.c +++ b/src/main.c @@ -29,15 +29,17 @@ void calc_normal(float* v1, float* v2, float* v3, float* normal) void fill_normal( float * d, float * n ) { - *n = *d; + //*n = *d; for (int i = 0; i < *d; i += 9) { vec3 norm_vec; calc_normal((d+1)+i, (d+1)+i+3, (d+1)+i+6, norm_vec); - glm_vec3_copy( norm_vec, (n+1)+i ); - glm_vec3_copy( norm_vec, (n+1)+i+3 ); - glm_vec3_copy( norm_vec, (n+1)+i+6 ); + glm_vec3_copy( norm_vec, (n+1)+i ); + glm_vec3_copy( norm_vec, (n+1)+i+3 ); + glm_vec3_copy( norm_vec, (n+1)+i+6 ); + + } } @@ -57,15 +59,15 @@ int main( void ) glewInit(); - - fill_normal( d_cube, n_cube ); + fill_normal( d_cube, d_cube+(int)*d_cube); if( !( shader = create_shader() ) ) goto error_shader; gload_program( shader, vs, VERTEX ); gload_program( shader, fs, FRAGMENT ); - use_shader( shader ); + use_shader( shader ); + load_fix_matrix( shader, (float)WIDTH/HEIGHT ); diff --git a/src/mesh.c b/src/mesh.c index 4bfb8d1..d477d27 100755 --- a/src/mesh.c +++ b/src/mesh.c @@ -4,28 +4,35 @@ struct obj { - unsigned int vertex, vao, vbo; + unsigned int vertex, n_vao, d_vao, n_vbo, d_vbo; }; -mesh_t create_mesh( narray_float_t mesh ) +mesh_t create_mesh( narray_float_t d ) { struct obj * p; p=malloc(sizeof(struct obj)); - p->vertex=(*mesh)/3; + p->vertex=(*d)/3; - glGenVertexArrays( 1, &p->vao ); - glGenBuffers( 1, &p->vbo ); + glGenVertexArrays( 1, &p->n_vao ); + glGenVertexArrays( 1, &p->d_vao ); + glGenBuffers( 1, &p->d_vbo ); + glGenBuffers( 1, &p->n_vbo ); - glBindVertexArray( p->vao ); - glBindBuffer( GL_ARRAY_BUFFER, p->vbo ); - glBufferData( GL_ARRAY_BUFFER, (p->vertex*3)*sizeof(int), mesh+1, + glBindVertexArray( p->d_vao ); + glBindBuffer( GL_ARRAY_BUFFER, p->d_vbo ); + glBufferData( GL_ARRAY_BUFFER, 2*(p->vertex*3)*sizeof(float), d+1, GL_STATIC_DRAW ); - glVertexAttribPointer( 0,3,GL_FLOAT, 0, 3*sizeof(int), NULL ); + glVertexAttribPointer( 0,3,GL_FLOAT, 0, 3*sizeof(float), NULL ); glEnableVertexAttribArray(0); + + glVertexAttribPointer( 1,3,GL_FLOAT, *d, 3*sizeof(float), NULL ); + glEnableVertexAttribArray(1); + + return p; } @@ -33,8 +40,10 @@ void destroy_mesh( mesh_t p ) { struct obj * obj ; obj = p; - glDeleteVertexArrays( 1, &obj->vao ); - glDeleteBuffers( 1, &obj->vbo ); + glDeleteVertexArrays( 1, &obj->d_vao ); + glDeleteVertexArrays( 1, &obj->n_vao ); + glDeleteBuffers( 1, &obj->d_vbo ); + glDeleteBuffers( 1, &obj->n_vbo ); free( p ); } @@ -42,7 +51,7 @@ void draw_mesh( mesh_t p ) { struct obj * obj=p; - glBindVertexArray( obj->vao ); + glBindVertexArray( obj->d_vao ); #ifdef DEBUG { int i; From 7c76e3901a5f4c776c046a1b8b1d1041d75f7e40 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Thu, 17 Oct 2024 19:42:16 -0600 Subject: [PATCH 07/25] Fix illumination --- src/data/shaders.h | 16 ++++++++-------- src/main.c | 19 ++++++++----------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/data/shaders.h b/src/data/shaders.h index 9c3039c..180e159 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -16,9 +16,9 @@ const char * vs = "void main()" "{" " index=idx;" + " Normal = mat3(transpose(inverse(rot*mdl))) * aNormal;" " gl_Position = fix * rot * mdl * vec4( aPos, 1.0 );\n" - "Normal = aNormal;" - "FragPos = vec3( rot * vec4(aPos, 1.0));" + " FragPos = vec3( rot * mdl * vec4(aPos, 1.0));" "}"; @@ -35,16 +35,16 @@ const char * fs = "void main()" "{" + + " vec4 color = texture( palette, vec3( 0, 0, index ) ).rgba;" " vec3 lightColor = vec3(1,1,1);" - " vec3 lightPos = vec3(10,10,10);" + " vec3 lightPos = vec3(0,000,-15);" + " vec3 lightDir = normalize(lightPos - FragPos);" " vec3 norm = normalize(Normal);" - " vec3 lightDir = normalize(lightPos - FragPos);" - " float diffuse = max(dot(norm, lightDir), 0.0);" - " float ambient = 0.1;" - - " FragColor = vec4((ambient + diffuse)*lightColor,1.0)* texture( palette, vec3( 0, 0, index ) ).rgba;" + " float ambient = 0.5;" + " FragColor = vec4((ambient + diffuse)*lightColor,1.0)*color;" "}"; diff --git a/src/main.c b/src/main.c index ddf395e..0399574 100755 --- a/src/main.c +++ b/src/main.c @@ -18,13 +18,13 @@ unsigned char palette[] = void calc_normal(float* v1, float* v2, float* v3, float* normal) { - vec3 lado1, lado2; + vec3 lado1, lado2; - glm_vec3_sub(v2, v1, lado1); - glm_vec3_sub(v3, v1, lado2); + glm_vec3_sub(v2, v1, lado1); + glm_vec3_sub(v3, v1, lado2); - glm_vec3_cross(lado1, lado2, normal); - glm_vec3_normalize(normal); + glm_vec3_cross(lado1, lado2, normal); + glm_vec3_normalize(normal); } void fill_normal( float * d, float * n ) @@ -35,11 +35,9 @@ void fill_normal( float * d, float * n ) vec3 norm_vec; calc_normal((d+1)+i, (d+1)+i+3, (d+1)+i+6, norm_vec); - glm_vec3_copy( norm_vec, (n+1)+i ); - glm_vec3_copy( norm_vec, (n+1)+i+3 ); - glm_vec3_copy( norm_vec, (n+1)+i+6 ); - - + glm_vec3_copy( norm_vec, (n+1)+i ); + glm_vec3_copy( norm_vec, (n+1)+i+3 ); + glm_vec3_copy( norm_vec, (n+1)+i+6 ); } } @@ -68,7 +66,6 @@ int main( void ) gload_program( shader, fs, FRAGMENT ); use_shader( shader ); - load_fix_matrix( shader, (float)WIDTH/HEIGHT ); if( !( m_cube = create_mesh( d_cube ) ) ) From 5fc19db1a9e46cf091cdceb6da6b0fee01a6fd13 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Thu, 17 Oct 2024 19:44:44 -0600 Subject: [PATCH 08/25] Eliminar los .o --- src/context.o | Bin 1928 -> 0 bytes src/input.o | Bin 24144 -> 0 bytes src/matrix.o | Bin 9296 -> 0 bytes src/mesh.o | Bin 2832 -> 0 bytes src/shader.o | Bin 3280 -> 0 bytes src/texture.o | Bin 2344 -> 0 bytes src/window.o | Bin 3048 -> 0 bytes 7 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/context.o delete mode 100644 src/input.o delete mode 100644 src/matrix.o delete mode 100644 src/mesh.o delete mode 100644 src/shader.o delete mode 100644 src/texture.o delete mode 100644 src/window.o diff --git a/src/context.o b/src/context.o deleted file mode 100644 index c06d23bc602e6723dbf0f3a0689122fed597b095..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1928 zcmbtU&ubG=5T2y9t=M#E*`5VVS2`a|#sqR|l3Ls2LMylC9SO@k)8b+dt1&tO*7`-&n@W+}1|kBkiV4>bAWjxi4bn)pc%#a~8KvA*al&hTSbz%!2EN5*Ho zFqlwaCcU)29Tw~fofvvW_kV*2LWh)muSe!ivf#WyoMR%4zr;M&k@enLn9J;uPX*g@ z%>`F4P}OvEg|cZ_xq@A`9sczqG*?brM!syak>aqELX>2t%<)2gzr2+nVb~j(ygMS*}g-Z=#;4SpA$n{?D9%GYvftG zj;~A7a?G-!;}S`KV7Lb9`D&GP$M&6qU8$HB$1K}5b$+vBRo5sy68@Z3)8`#~-gMkW zuE9!XDOYriiYZ(AFP-3OyiweVillJfs3hCSRWZU2?lh^AY`+(m_EzwCzo^9>1H-?+u?^DpUCXIj&?vHnlHUG7Kf@`s+I%9VIe?Qi;UvL1c>@*?cc&b9pGjE zQs3aXwAIw3VPr@yzK?#EVE@CSKEW{+!Sg)iAX0<%7e)OYwV3T-Jzinh{O^l_$a}&3 z_bc^s{$YD_8sR?~`06VfWQ~2~{<0ox24|0wk~q+9I10qFUFINLVf9Txy4_6Q2-g1r Dg+k+M diff --git a/src/input.o b/src/input.o deleted file mode 100644 index adfc3f89666ad44af09d90351e0b7dd76114690f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24144 zcmeHPeQcd)b-zhN$wuMYjE_v^!(+f~XjAjCEgcneS4=O^R&KY@n2#oD;?$w}Fp0CK zs0DA~-Ew8Tc@v#74Q&=1}vb0ZbQ`?sK6a)1Px7|=!Ahzn0Ac7x^=&g^Stl# zUfUVn_-E3tlKVX8oZoZKdCqg*=e+kmukX8tuX*kIb?X}GwXX5%MnxrVqp|R&sz0Re zP~&Nhr#7~>+W*`-_VA|W!0=RaU}oa+#~*L@vpc-l>@P$P3@?MV*c?SWFg%O?Z1cX( zbhqtYJ#hxEg=8zWodOMGK;)KI(f-!Y zJ=%QUkHh1>R{PGS_K}C$TNkJCZ}_3h&or+)(;j{d-S(3>!|CD0vh&j6$J%G^`Ofp# zEj)OxeIFn-#{JVGSgY7d*969^>+|m#%ooyfaYJ2NK``QO~x289|s2`wKd-&YT zI>+w(YNJ{FA?RawF05-71tl|Ems>N}F14nI&$ilMYPIi|)@gaQr}@3kBh8oKf6ukc zk2K$M&m+xC(Dn>3q0_-qY{c+y-Eifn);*)qxbpOdpKmli#RdH|-$GOC*u6c?PY!>p z`N__uU!m!9>u(d|Sm)B?vhv+^v#@?{ck88gcJfJbA)D9lJluIQC-IqW=N^Cjk!Ei( z;&!Hmwri5~`O#+Ya3^){O`Z8in>{i}@dM3Ist>nXyB1pQh1R-GYu!TYp2hX8nP4+J z(=JZesE#Qz;rT|WCkNfeqs`HIkb)oUYyhh#q%D&~oO!glEkkXrqezx0%zA#dD+cqJ zDi^7_xnTDlZ_J1zuY);Ft6j|7OEohi8)IG910a_DS&wkTT2CX`Bxk?<7g$g*WBG5A z9RMOw3z}?i@ql9<=FZxjg_=PEP(r=XKxv8uNR5#rqXO4aibRD1S)pcU;otBgS+Vp- z!wUHiVH9bbG9)HCjB7W^q>;nJZVb5yDwJtt&$gVsgH$)8h#;%B)Tkj+(}f`IqGd{u zb}?c~kan@nlpyV5hbcDA{zh}482V2s(wKHJZZR8+MA9k;Ce{rhh zeLQ$b8X?in5Vxm!@WDOJn-@qEO*ygP-Lt2;?+mQ(fO=F0H3P+jDY}H3@HpgC=FkgJ zv!=uxH8oJonW?b@#i<(AF(u|R3sNXD#X^R;uk%mfESfXK=DrTYvRvbA1*f56rg#DK zA#i%k5pf?gDwQTg-Vk{+P>h%o^F~vpO&LP443V=4mMJlBjM|!9 z8u3Ifh9mN)zX;BC;K*Rf`4~8!{#|pL^Gu9b2DS8OSS|o8Nq|t$fCEeKSPfu(a%O3? z0w7M0^tgzfp#&3CY7

@NF=xlrl@{Vj@x&4;9`mi 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 diff --git a/src/matrix.o b/src/matrix.o deleted file mode 100644 index f0a32a095dc701c1801f9b0c13a4e36005fa5cac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9296 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 diff --git a/src/shader.o b/src/shader.o deleted file mode 100644 index 5a7b2374e9171d067adb3ca976bfde3dbfafdfcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3280 zcmbuC&u<$=6vxL-+Ca&#hJp&^hc7@VWEH15wFtR#wpprB3XwrV1hcl+u@&1Jt=DaW zhyX=JtQI660fFE@;J~GDsLW3b2_yp&L@0+`kb>$%Q9+6z$hUosx^N~Mi7>JVdzkflL>a5!*lQmKFuOi>*Y7FK`AOSsk2@RtntKZl zy6V2u?0oy>r`=)q0P;?2sfYf?W3xT&Y;0>zt>vV)a+*7M&m=_99Ca_=XsXxZE@Msg z*J-FUS8ZvR8nr{0agLwgL>c9=<<4EYhPgOud%;V>RomL@sn&-mzJl-SG*5S0U5_@Z zHFpGuJ?ZY1mthvb-?-{7%rnI2xjIXtRNGazo$pcLk0MrM8)II^ximMmm(w0N!e7Qd zu#2l>m8n(iS}cA-nNg;vW=_<2fA)Ss&<|`7 z$~Y7}2J`1qEXr5|*#H!@BVNTK&p*K;YvYk)!$UXJVZrVIjs@**e5j-2uSAn02cHB1 zbaCt<0b-s?}qRXLipz)d@F=s4dH)=@KM+pe6KUOL129E zp}rmZLGN`ugeOIucSIb1J|NDy5Iw6F^qgTSS(Y=Zwq>rTJ;2iG<&tr6&L|nSao#eQ zExpXLmZ955zaq&QDQZ>UaH`t%UM`t>F1;#ZdGS5(MV^D0((5dmH7jcflr+n$#gfq{ zn>TE)U%Vhxr)^u$7Wzb9`h94jSXrTL)9EU>tfaGrm2_S&mYA1f9ul=h&{U%Ddm9Ony3f2*YbTHV6Xb`7+={X;#d+Q}1 zr~BzWAE)p8Gask#l_}NrvaM&Jwk@wNP|Gq(x?&q^HdAuCturN4tuiHRmdi#3SjDsr z1%B(M_@Ng4~*H_2u2~Dhp*WX8T`L02JX1Dcy?t=h|V8k-D%9%WyfFu z&q#sKf)PkU@m_DR|VK1p{V`-OTdHnuP%gj z;fMQ&i2P~)g62k-g4mErkq6#si2VNeZ-RgC0I@p%`=2p`78)U#ugmYIApe;7|D)u& Jb)SC!zW_e9RgM4v diff --git a/src/texture.o b/src/texture.o deleted file mode 100644 index 3c9175e562a2bb8222d18b4ef037291e0e143bf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2344 zcmbuAO-NKx6oAj0G_5pET$n~Yg32f#{zQaSjOpl0A~F&Sit#yfotc~;dGm%el0qYR zOoGdz7U8>+0oKb4eLwH|p&F{-SIyDigQol4oY~Obtx-3y5jL}B$D1+4bOT#$%jRrg({w+) zr=shWmA+4xMDi*N#9Ny7v$gCd4$W_EBZY@V*?)tz!)ZEZ!FL9IKL%La04`M>-) zpIp&=iXwE=omwwU#KqVwUpbDwZqD{=q-z%HmVfwa7CsL|wR(VPfdeySr0w9vsOeos8brVYC~qE$tl{Zl66R2xXF#VXMVP zljyrP2tI&iVtcTW;P_m$2RA^QsMVUPDk|r20!NTiBbla8;9%`jUw8Fh-y}xleHVzM z==72PA@1h6cZj1LqmT68F8Ci3M@iC0`h6@PK&*t&-ju=5?Gi3r6M2i}0Gf3Q=W9XM zh>iBeD|ly0@^icJ-d*?*avE2Tr=v|0!bW_aTVijppT<^dK2Jpas)*-%h5eVi#Dl{o zoQ%zk5QI|6(O4uX07T+_EO|5UO`~-=mJACME$m&lY%9SWX2&2HOgmO+EEtN81xKw| z95QLPQz*>Rj-8s^u_N&w7RS7u+98`+4hxQ3NKrfaF|lYQ&hBH>m4p>x9X)(ShFBNf zNou+6yj)Z`-CfBC6uwvCY!@!?7}c&&;$JE8YJL9X&`0t6mH4kpJiQ$`pKpTuP**8j zS2+2k_(g{pwP|4w3oZG)upfK)s<6RGPbM5|1hr%5byW6j7Pk!Abuhw~V}UV}PJT**2B@$^Y(Fx(|8&1pc`fpF6=GlRpTr~Bp-^xBvdDif1BLeH z-$h>P{2J)-p$zkH{>@RY%$Mg^YHUimB_?!U%!7XK>5RPj`vgZ-By-|G-xSfp{!4ra UJKnP=--MWdTm}j)rn5u;08W%rhyVZp diff --git a/src/window.o b/src/window.o deleted file mode 100644 index ab21cea0a19ac38d64ce4487edcf3aa7f6b55601..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3048 zcmbuAUuYCZ9LMJ_QB#|ktF^YE)GLU!rCHPn6)Wu}+e_AxRPl0JT4mk4Ow8flZrDG@ zNK*w-Sni>D=!4LQ_Nn;Vmr}LVgM!)zeJlli5Q=cpP!L~&wCL|QJ7a#VyQP1Auru@f z%=h=3*_qkd)8(;|d@je7<=DGy*;ACUi#^Njl4zD#AM0fg`(J%jHKKdQ*~MZszZiub zBdXr*pyFIRT>U*Z?q7!D$1W(Y=8JhII%Bu%shcZyv8z4GZH1jydC_Q9?+%F!moQCq zT|^pDdC53Czr?~`;S0g<9~&*et(Q<}M86nH{4Z#$+G&l$pyj3L7LEV;C-Ra7BbtYC zU@SSp!ryntQzrUz?fx&?{ol3!K^UZFqq@GkxV2gfoggf3AJlee+Xi+FhQif`#(hvwiyf6|4H1BD9!K;cC!bM)B3tnPUvb7 zt|eT&3$XR@;JPFY-zAM}8T`ErKAyqr89dD3pJ(u|Gx(JZelvsr1{~K%t&7-8V1H!j zSHK3KzFS@fVsAma4*axr+nm7%Gx%QMnExH9(Ztz+`e25h%{H7#cUG&jhSLbl*ki}+ zsoA~Yi^d_LFd9zm>K?ZO9z)ST!M$d~0mjVHv3rT^r#|h5_M~pRK4*0-X@>W? zA9(JZT&S1DZp8Nq-XDKHj%_F5c*iKNXYd0V+#!4=$@3ZEs|a6^{7tBzBm7IragO-y ztNDB*IqIJ${9DOU-%I!plB2$l@avMJehuNb38(Y^Mq9hxNtNY++f~)WTOoFTLm1+K5Gq7q<2VPuH ztCq)YOT%-^v`H(lm{#+Brq$hM6A!WGxB=JTA2r|y_>sl_F(=e!JUHE6Fvm2Jflr%L zp4H@X2LG=rLO3oJo;hkI>6mgIRbRqo8=wRCu%raCF35y8WB{H;Y{IWo*ekN$0yT2= zKbDw%l^jTRB=K9oG3S4c-wv^ua~nL=)cCJc2yHdKs&^AcrPq{z!W8WX!0>$Hxud4m ztw;=%I#qW{>*&@qwk&J%=IdBQq From 9dabea34d289b6f6b6dd69af53331b9a4602fb33 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Thu, 17 Oct 2024 22:24:54 -0600 Subject: [PATCH 09/25] Final: Illumination --- Makefile | 10 +++++----- src/context.c | 3 +++ src/data/axis.h | 32 ++++++++++++++------------------ src/data/cube.h | 34 +++++++--------------------------- src/data/shaders.h | 8 +++----- src/main.c | 24 +++++++++++++++++------- src/main.h | 2 +- src/matrix.c | 4 ++-- src/mesh.c | 28 +++++++++++++--------------- 9 files changed, 65 insertions(+), 80 deletions(-) diff --git a/Makefile b/Makefile index b0ce13a..6dae268 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ OBJ = \ CFLAGS = \ -I./ext/cglm/include \ -I./ext/glfw/include \ - -Wall -Wno-unused-function -std=c99 \ + -Wall -Wno-unused-function -std=c99 \ WAYLAND-LIB = \ xdg-shell \ @@ -38,6 +38,8 @@ help: @echo "Para ejecturar el programa sin instalarlos se puede usar:" @echo " $(MAKE) run-linux" +src/main.o: src/data/axis.h src/data/cube.h src/data/shaders.h + # WINDOWS windows: $(OBJ) glfw.dll $(CC) $(CFLAGS) $(OBJ) -o $(BIN) -L. -lglfw -lopengl32 -lglew32 @@ -62,15 +64,13 @@ cocoa: $(OBJ) $(MAKE) BKN=_GLFW_COCOA libglfw.so $(CC) -framework OpenGL -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw -libglfw.so: wayland.h - $(CC) -fPIC -shared -D$(BKN) -D_GLFW_BUILD_DLL -Iext/glfw/deps/wayland ./ext/glfw/src/*.c -o $@ - -wayland.h: +libglfw.so: for i in $(WAYLAND-LIB); \ do \ wayland-scanner client-header ext/glfw/deps/wayland/$$i.xml ext/glfw/deps/wayland/$$i-client-protocol.h; \ wayland-scanner private-code ext/glfw/deps/wayland/$$i.xml ext/glfw/deps/wayland/$$i-client-protocol-code.h; \ done + $(CC) -fPIC -shared -D$(BKN) -D_GLFW_BUILD_DLL -Iext/glfw/deps/wayland ./ext/glfw/src/*.c -o $@ clean: rm $(OBJ) $(BIN) ext/glfw/deps/wayland/*.h diff --git a/src/context.c b/src/context.c index 40b19cb..32b1f18 100644 --- a/src/context.c +++ b/src/context.c @@ -4,6 +4,9 @@ void set_clean_color_context( unsigned char r, unsigned char g, unsigned char b ) { glEnable( GL_DEPTH_TEST ); + glEnable( GL_CULL_FACE ); + glCullFace( GL_BACK ); + glClearColor( (float)r/0xff, (float)g/0xff, (float)b/0xff, 1.0 ); } diff --git a/src/data/axis.h b/src/data/axis.h index 7f76ea5..db4adce 100644 --- a/src/data/axis.h +++ b/src/data/axis.h @@ -7,39 +7,35 @@ #undef G #undef H -const float X = 2.0; -const float Y = 0.05; -const float Z = 0.05; - -#define A -X,-Y,-Z, -#define B -X,-Y, Z, -#define C -X, Y,-Z, -#define D -X, Y, Z, -#define E X,-Y,-Z, -#define F X,-Y, Z, -#define G X, Y,-Z, -#define H X, Y, Z, +#define A -2.0,-0.05,-0.05, +#define B -2.0,-0.05, 0.05, +#define C -2.0, 0.05,-0.05, +#define D -2.0, 0.05, 0.05, +#define E 2.0,-0.05,-0.05, +#define F 2.0,-0.05, 0.05, +#define G 2.0, 0.05,-0.05, +#define H 2.0, 0.05, 0.05, narray_float_t d_axis = { 3*3*2*6, A C E - C E G + G E D E G F - G F H + H F G F H B - H B D + D B H B D A - D A C + C A D C D G - D G H + H G D - A B E + E B A B E F }; diff --git a/src/data/cube.h b/src/data/cube.h index a6cbb1f..bfa2756 100644 --- a/src/data/cube.h +++ b/src/data/cube.h @@ -1,5 +1,3 @@ -#include - #define A -1,-1,-1, #define B -1,-1, 1, #define C -1, 1,-1, @@ -9,43 +7,25 @@ #define G 1, 1,-1, #define H 1, 1, 1, -narray_float_t d_cube = +float d_cube[] = { 3*3*2*6, A C E - C E G + G E C E G F - G F H + H F G F H B - H B D + D B H B D A - D A C + C A D C D G - D G H + H G D - A B E + E B A B E F - - A C E - C E G - - E G F - G F H - - F H B - H B D - - B D A - D A C - - C D G - D G H - - A B E - B E F }; diff --git a/src/data/shaders.h b/src/data/shaders.h index 180e159..8e22431 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -37,14 +37,12 @@ const char * fs = "{" " vec4 color = texture( palette, vec3( 0, 0, index ) ).rgba;" - " vec3 lightColor = vec3(1,1,1);" - " vec3 lightPos = vec3(0,000,-15);" + " vec3 lightPos = vec3(0,0,-15);" " vec3 lightDir = normalize(lightPos - FragPos);" - " vec3 norm = normalize(Normal);" - " float diffuse = max(dot(norm, lightDir), 0.0);" + " float diffuse = max(dot(Normal, lightDir), 0.0);" " float ambient = 0.5;" - " FragColor = vec4((ambient + diffuse)*lightColor,1.0)*color;" + " FragColor = (ambient + diffuse)*color;" "}"; diff --git a/src/main.c b/src/main.c index 0399574..2f6f8a4 100755 --- a/src/main.c +++ b/src/main.c @@ -3,7 +3,9 @@ #include "data/axis.h" #include "data/shaders.h" #include - +#include +#include + #define WIDTH 512 #define HEIGHT 512 @@ -27,9 +29,11 @@ void calc_normal(float* v1, float* v2, float* v3, float* normal) glm_vec3_normalize(normal); } -void fill_normal( float * d, float * n ) +float * fill_normal( float * d ) { - //*n = *d; + float * n; + n = malloc( (*d+1)*sizeof(float)); + *n = *d; for (int i = 0; i < *d; i += 9) { @@ -39,12 +43,14 @@ void fill_normal( float * d, float * n ) glm_vec3_copy( norm_vec, (n+1)+i+3 ); glm_vec3_copy( norm_vec, (n+1)+i+6 ); } + return n; } const char * wname = "manigraph: manifold grapher"; int main( void ) { + float * n_cube, *n_axis; id_t shader, texture; mesh_t m_cube, m_axis; window_t window; @@ -57,8 +63,6 @@ int main( void ) glewInit(); - fill_normal( d_cube, d_cube+(int)*d_cube); - if( !( shader = create_shader() ) ) goto error_shader; @@ -68,12 +72,18 @@ int main( void ) load_fix_matrix( shader, (float)WIDTH/HEIGHT ); - if( !( m_cube = create_mesh( d_cube ) ) ) + n_cube = fill_normal( d_cube ); + n_axis = fill_normal( d_axis ); + + if( !( m_cube = create_mesh( d_cube, n_cube ) ) ) goto error_mesh_cube; - if( !( m_axis = create_mesh( d_axis ) ) ) + if( !( m_axis = create_mesh( d_axis, n_axis ) ) ) goto error_mesh_axis; + free( n_cube ); + free( n_axis ); + texture=create_palette_texture( palette ); use_texture( texture ); diff --git a/src/main.h b/src/main.h index 1fb5ea4..8252e56 100644 --- a/src/main.h +++ b/src/main.h @@ -23,7 +23,7 @@ int is_open_window(window_t window); void close_window(window_t window); -mesh_t create_mesh(narray_float_t mesh); +mesh_t create_mesh( float * d, float * n); void destroy_mesh(mesh_t p); diff --git a/src/matrix.c b/src/matrix.c index eda0e0c..10a097a 100644 --- a/src/matrix.c +++ b/src/matrix.c @@ -13,14 +13,14 @@ mat4 ortho[] = }, { { 0, 1, 0, 0 }, - { 1, 0, 0, 0 }, + {-1, 0, 0, 0 }, { 0, 0, 1, 0 }, { 0, 0, 0, 1 }, }, { { 0, 0, 1, 0 }, { 0, 1, 0, 0 }, - { 1, 0, 0, 0 }, + {-1, 0, 0, 0 }, { 0, 0, 0, 1 }, }, }; diff --git a/src/mesh.c b/src/mesh.c index d477d27..7ba7f28 100755 --- a/src/mesh.c +++ b/src/mesh.c @@ -4,10 +4,10 @@ struct obj { - unsigned int vertex, n_vao, d_vao, n_vbo, d_vbo; + unsigned int vertex, vao, n_vbo, d_vbo; }; -mesh_t create_mesh( narray_float_t d ) +mesh_t create_mesh( float * d, float * n ) { struct obj * p; @@ -15,24 +15,23 @@ mesh_t create_mesh( narray_float_t d ) p->vertex=(*d)/3; - glGenVertexArrays( 1, &p->n_vao ); - glGenVertexArrays( 1, &p->d_vao ); + glGenVertexArrays( 1, &p->vao ); + glGenBuffers( 1, &p->d_vbo ); - glGenBuffers( 1, &p->n_vbo ); - - glBindVertexArray( p->d_vao ); + glBindVertexArray( p->vao ); glBindBuffer( GL_ARRAY_BUFFER, p->d_vbo ); - glBufferData( GL_ARRAY_BUFFER, 2*(p->vertex*3)*sizeof(float), d+1, + glBufferData( GL_ARRAY_BUFFER, p->vertex*3*sizeof(float), d+1, GL_STATIC_DRAW ); - glVertexAttribPointer( 0,3,GL_FLOAT, 0, 3*sizeof(float), NULL ); glEnableVertexAttribArray(0); - - glVertexAttribPointer( 1,3,GL_FLOAT, *d, 3*sizeof(float), NULL ); + glGenBuffers( 1, &p->n_vbo ); + glBindBuffer( GL_ARRAY_BUFFER, p->n_vbo ); + glBufferData( GL_ARRAY_BUFFER, p->vertex*3*sizeof(float), n+1, + GL_STATIC_DRAW ); + glVertexAttribPointer( 1,3,GL_FLOAT, 0, 3*sizeof(float), NULL ); glEnableVertexAttribArray(1); - return p; } @@ -40,8 +39,7 @@ void destroy_mesh( mesh_t p ) { struct obj * obj ; obj = p; - glDeleteVertexArrays( 1, &obj->d_vao ); - glDeleteVertexArrays( 1, &obj->n_vao ); + glDeleteVertexArrays( 1, &obj->vao ); glDeleteBuffers( 1, &obj->d_vbo ); glDeleteBuffers( 1, &obj->n_vbo ); free( p ); @@ -51,7 +49,7 @@ void draw_mesh( mesh_t p ) { struct obj * obj=p; - glBindVertexArray( obj->d_vao ); + glBindVertexArray( obj->vao ); #ifdef DEBUG { int i; From 03d446cdaf8bb0bb104b9128ccc8b0f533268287 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Thu, 17 Oct 2024 22:28:22 -0600 Subject: [PATCH 10/25] Correct faces of axis --- src/data/axis.h | 16 +++++++--------- src/main.h | 1 - 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/data/axis.h b/src/data/axis.h index db4adce..d957c16 100644 --- a/src/data/axis.h +++ b/src/data/axis.h @@ -1,12 +1,11 @@ #undef A -#undef B -#undef C +#undef B +#undef C #undef D #undef E #undef F -#undef G +#undef G #undef H - #define A -2.0,-0.05,-0.05, #define B -2.0,-0.05, 0.05, #define C -2.0, 0.05,-0.05, @@ -16,15 +15,15 @@ #define G 2.0, 0.05,-0.05, #define H 2.0, 0.05, 0.05, -narray_float_t d_axis = +float d_axis[] = { 3*3*2*6, A C E - G E D + G E C E G F - H F G + H F G F H B D B H @@ -35,7 +34,6 @@ narray_float_t d_axis = C D G H G D - E B A + E B A B E F - }; diff --git a/src/main.h b/src/main.h index 8252e56..71057cf 100644 --- a/src/main.h +++ b/src/main.h @@ -7,7 +7,6 @@ typedef void * mesh_t; typedef float * quat_t; typedef float * mat4_t; -typedef float narray_float_t[]; typedef unsigned char narray_u8_t[]; enum From e79c4abe83e1e3a26e573a883f126708ae6f3813 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 18 Oct 2024 18:35:21 -0600 Subject: [PATCH 11/25] la funcion calc_normal ahora toma vectores R4 via alg. G-S --- src/main.c | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index 2f6f8a4..535fbd7 100755 --- a/src/main.c +++ b/src/main.c @@ -18,15 +18,39 @@ unsigned char palette[] = 0x7A,0x1C,0xAC,0xff, }; -void calc_normal(float* v1, float* v2, float* v3, float* normal) +void calc_normal(float* v1, float* v2, float* v3, , float* v4 ,float* normal, unsigned char n) { - vec3 lado1, lado2; + vec4 lado1, lado2; + vec4 u1, u2; + + switch (n) + { + case 3: - glm_vec3_sub(v2, v1, lado1); - glm_vec3_sub(v3, v1, lado2); + glm_vec3_sub(v2, v1, lado1); + glm_vec3_sub(v3, v1, lado2); - glm_vec3_cross(lado1, lado2, normal); - glm_vec3_normalize(normal); + glm_vec3_cross(lado1, lado2, normal); + glm_vec3_normalize(normal); + return; + + case 4: + glm_vec4_sub(v2, v1, lado1); + glm_vec4_sub(v3, v1, lado2); + + glm_vec4_copy(lado1, u1); + + float alfa = glm_vec4_dot(lado2, u1) / glm_vec4_dot(u1, u1); + vec4 proy; + glm_vec4_scale(u1, alfa, proy); + glm_vec4_sub(lado2, proy, u2); + + glm_vec4_normalize(u2); + glm_vec4_copy(u2, normal); + + default: + break; + } } float * fill_normal( float * d ) From b164d15927e0c1528296cd835edf5b114ffc61b0 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Fri, 18 Oct 2024 19:14:51 -0600 Subject: [PATCH 12/25] Fix: compile --- src/main.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/main.c b/src/main.c index 535fbd7..baebeb3 100755 --- a/src/main.c +++ b/src/main.c @@ -18,10 +18,10 @@ unsigned char palette[] = 0x7A,0x1C,0xAC,0xff, }; -void calc_normal(float* v1, float* v2, float* v3, , float* v4 ,float* normal, unsigned char n) +void calc_normal(float* v1, float* v2, float* v3,float* normal, unsigned char n) { vec4 lado1, lado2; - vec4 u1, u2; + vec4 u1, u2; switch (n) { @@ -36,24 +36,24 @@ void calc_normal(float* v1, float* v2, float* v3, , float* v4 ,float* normal, un case 4: glm_vec4_sub(v2, v1, lado1); - glm_vec4_sub(v3, v1, lado2); + glm_vec4_sub(v3, v1, lado2); - glm_vec4_copy(lado1, u1); + glm_vec4_copy(lado1, u1); - float alfa = glm_vec4_dot(lado2, u1) / glm_vec4_dot(u1, u1); - vec4 proy; - glm_vec4_scale(u1, alfa, proy); - glm_vec4_sub(lado2, proy, u2); + float alfa = glm_vec4_dot(lado2, u1) / glm_vec4_dot(u1, u1); + vec4 proy; + glm_vec4_scale(u1, alfa, proy); + glm_vec4_sub(lado2, proy, u2); - glm_vec4_normalize(u2); - glm_vec4_copy(u2, normal); + glm_vec4_normalize(u2); + glm_vec4_copy(u2, normal); default: break; } } -float * fill_normal( float * d ) +float * fill_normal( float * d, unsigned char m ) { float * n; n = malloc( (*d+1)*sizeof(float)); @@ -61,13 +61,13 @@ float * fill_normal( float * d ) for (int i = 0; i < *d; i += 9) { - vec3 norm_vec; - calc_normal((d+1)+i, (d+1)+i+3, (d+1)+i+6, norm_vec); + vec3 norm_vec; + calc_normal((d+1)+i, (d+1)+i+3, (d+1)+i+6, norm_vec, m); glm_vec3_copy( norm_vec, (n+1)+i ); glm_vec3_copy( norm_vec, (n+1)+i+3 ); glm_vec3_copy( norm_vec, (n+1)+i+6 ); - } - return n; + } + return n; } const char * wname = "manigraph: manifold grapher"; @@ -96,8 +96,8 @@ int main( void ) load_fix_matrix( shader, (float)WIDTH/HEIGHT ); - n_cube = fill_normal( d_cube ); - n_axis = fill_normal( d_axis ); + n_cube = fill_normal( d_cube, 3 ); + n_axis = fill_normal( d_axis, 3 ); if( !( m_cube = create_mesh( d_cube, n_cube ) ) ) goto error_mesh_cube; From fe3b99d480a864e409a3b15569846270eee2fb89 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Fri, 18 Oct 2024 20:26:53 -0600 Subject: [PATCH 13/25] Setup for test on R4 --- Makefile | 7 ++- src/data/axis.h | 1 + src/data/shaders.h | 28 +++++++++++- src/input.c | 16 ++++++- src/main.c | 105 +++++++++++++++++++++++++++------------------ src/main.h | 2 +- src/mesh.c | 27 +++++++++--- src/shader.c | 2 +- src/surface.c | 93 +++++++++++++++++++++++++++++++++++++++ src/window.c | 4 +- 10 files changed, 227 insertions(+), 58 deletions(-) create mode 100644 src/surface.c diff --git a/Makefile b/Makefile index 6dae268..2c23c49 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ BIN = manigraph OBJ = \ + src/surface.o \ src/context.o \ src/texture.o \ src/window.o \ @@ -13,7 +14,7 @@ OBJ = \ CFLAGS = \ -I./ext/cglm/include \ -I./ext/glfw/include \ - -Wall -Wno-unused-function -std=c99 \ + -Wall -Wno-unused-function -std=c99 \ WAYLAND-LIB = \ xdg-shell \ @@ -47,10 +48,12 @@ windows: $(OBJ) glfw.dll glfw.dll: $(CC) -fPIC -shared -D_GLFW_WIN32 -D_GLFW_BUILD_DLL ./ext/glfw/src/*.c -o $@ -lgdi32 +src/main.o: src/data/shaders.h src/data/cube.h src/data/axis.h + # LINUX linux-x11: $(OBJ) $(MAKE) BKN=_GLFW_X11 libglfw.so - $(CC) -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw -lm + $(CC) -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw -lm linux-wayland: $(OBJ) $(MAKE) BKN=_GLFW_WAYLAND libglfw.so diff --git a/src/data/axis.h b/src/data/axis.h index d957c16..3ccddc8 100644 --- a/src/data/axis.h +++ b/src/data/axis.h @@ -6,6 +6,7 @@ #undef F #undef G #undef H + #define A -2.0,-0.05,-0.05, #define B -2.0,-0.05, 0.05, #define C -2.0, 0.05,-0.05, diff --git a/src/data/shaders.h b/src/data/shaders.h index 8e22431..98d2e24 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -1,8 +1,14 @@ const char * vs = "#version 330 core\n" - "layout (location = 0) in vec3 aPos;" - "layout (location = 1) in vec3 aNormal;" + "layout (location = 0) in float aPos_x;" + "layout (location = 1) in float aPos_y;" + "layout (location = 2) in float aPos_z;" + "layout (location = 3) in float aPos_w;" + "layout (location = 4) in float aNormal_x;" + "layout (location = 5) in float aNormal_y;" + "layout (location = 6) in float aNormal_z;" + "layout (location = 7) in float aNormal_w;" "uniform float idx;" "uniform mat4 fix;" @@ -16,12 +22,30 @@ const char * vs = "void main()" "{" " index=idx;" + " vec3 aNormal = vec3(aNormal_x,aNormal_y,aNormal_z);" + " vec3 aPos = vec3(aPos_x,aPos_y,aPos_z);" " Normal = mat3(transpose(inverse(rot*mdl))) * aNormal;" " gl_Position = fix * rot * mdl * vec4( aPos, 1.0 );\n" " FragPos = vec3( rot * mdl * vec4(aPos, 1.0));" "}"; +const char * fs_plain = + "#version 330 core\n" + + "uniform sampler2DArray palette;" + + "in float index;" + "out vec4 FragColor;" + "in vec3 Normal;" + "in vec3 FragPos;" + + "void main()" + "{" + " FragColor = texture( palette, vec3( 0, 0, index ) ).rgba;" + "}"; + + const char * fs = "#version 330 core\n" diff --git a/src/input.c b/src/input.c index b761aa2..5b80e03 100644 --- a/src/input.c +++ b/src/input.c @@ -1,6 +1,7 @@ #include "main.h" #include #include +#include #define ANGLE ((float)0x01/0xff*2*GLM_PI) @@ -17,6 +18,17 @@ vec3 axis[3] = {0, 0, 1}, }; +void __key_callback(GLFWwindow * window, int key, int scancode, int action, int mods ) +{ + if( action != GLFW_PRESS) + return; + + if( GLFW_KEY_0 <= key && key <= GLFW_KEY_9 ) + { + printf("%d\n", key-GLFW_KEY_0 ); + } +} + void __window_callback(GLFWwindow * window, int w, int h) { int m; @@ -37,8 +49,8 @@ void __mouse_callback(GLFWwindow* window, int button, int action, int mods) return; glfwGetCursorPos(window, &xpos, &ypos); - glReadPixels((int)xpos, (int)(window_height - ypos), 1, 1, GL_GREEN, GL_UNSIGNED_BYTE, &green_value); - + glReadPixels((int)xpos, (int)(window_height - ypos), 1, 1, GL_GREEN, + GL_UNSIGNED_BYTE, &green_value); switch(green_value) { diff --git a/src/main.c b/src/main.c index baebeb3..922ec41 100755 --- a/src/main.c +++ b/src/main.c @@ -1,14 +1,16 @@ #include "main.h" -#include "data/cube.h" #include "data/axis.h" #include "data/shaders.h" -#include #include +#include #include +#include #define WIDTH 512 #define HEIGHT 512 +unsigned char coordanate[4] = {0,1,2,3}; + unsigned char palette[] = { 16, @@ -20,8 +22,9 @@ unsigned char palette[] = void calc_normal(float* v1, float* v2, float* v3,float* normal, unsigned char n) { + float alpha; vec4 lado1, lado2; - vec4 u1, u2; + vec4 u1, u2, proy; switch (n) { @@ -35,21 +38,20 @@ void calc_normal(float* v1, float* v2, float* v3,float* normal, unsigned char n) return; case 4: +#if 0 glm_vec4_sub(v2, v1, lado1); glm_vec4_sub(v3, v1, lado2); glm_vec4_copy(lado1, u1); - float alfa = glm_vec4_dot(lado2, u1) / glm_vec4_dot(u1, u1); - vec4 proy; - glm_vec4_scale(u1, alfa, proy); + alpha = glm_vec4_dot(lado2, u1) / glm_vec4_dot(u1, u1); + glm_vec4_scale(u1, alpha, proy); glm_vec4_sub(lado2, proy, u2); glm_vec4_normalize(u2); glm_vec4_copy(u2, normal); - - default: - break; +#endif + return; } } @@ -58,24 +60,25 @@ float * fill_normal( float * d, unsigned char m ) float * n; n = malloc( (*d+1)*sizeof(float)); *n = *d; - for (int i = 0; i < *d; i += 9) + for (int i = 0; i < *d; i += 3*m) { - vec3 norm_vec; - calc_normal((d+1)+i, (d+1)+i+3, (d+1)+i+6, norm_vec, m); + vec4 norm_vec; + + calc_normal((d+1)+i, (d+1)+i+m, (d+1)+i+2*m, norm_vec, m); glm_vec3_copy( norm_vec, (n+1)+i ); - glm_vec3_copy( norm_vec, (n+1)+i+3 ); - glm_vec3_copy( norm_vec, (n+1)+i+6 ); + glm_vec3_copy( norm_vec, (n+1)+i+m ); + glm_vec3_copy( norm_vec, (n+1)+i+2*m ); } return n; } const char * wname = "manigraph: manifold grapher"; +float * generate_surface(); int main( void ) { - float * n_cube, *n_axis; - id_t shader, texture; + id_t shader, texture, shader_plain; mesh_t m_cube, m_axis; window_t window; @@ -87,63 +90,83 @@ int main( void ) glewInit(); - if( !( shader = create_shader() ) ) - goto error_shader; - - gload_program( shader, vs, VERTEX ); - gload_program( shader, fs, FRAGMENT ); - use_shader( shader ); - - load_fix_matrix( shader, (float)WIDTH/HEIGHT ); - - n_cube = fill_normal( d_cube, 3 ); - n_axis = fill_normal( d_axis, 3 ); - - if( !( m_cube = create_mesh( d_cube, n_cube ) ) ) - goto error_mesh_cube; - - if( !( m_axis = create_mesh( d_axis, n_axis ) ) ) - goto error_mesh_axis; - - free( n_cube ); - free( n_axis ); - texture=create_palette_texture( palette ); use_texture( texture ); + if( !( shader = create_shader() ) ) + goto error_shader; + gload_program( shader, vs, VERTEX ); + gload_program( shader, fs, FRAGMENT ); + + if( !( shader_plain = create_shader() ) ) + goto error_shader_plain; + gload_program( shader_plain, vs, VERTEX ); + gload_program( shader_plain, fs_plain, FRAGMENT ); + + load_fix_matrix( shader, (float)WIDTH/HEIGHT ); + load_fix_matrix( shader_plain, (float)WIDTH/HEIGHT ); + + /* Fill m_cube */ + { + float * n_cube, *d_cube; + d_cube = generate_surface(16); + n_cube = fill_normal( d_cube, 4 ); + if( !( m_cube = create_mesh( d_cube, n_cube, coordanate, 4 ) ) ) + goto error_mesh_cube; + free( n_cube ); + free( d_cube); + } + + /* Fill m_axis */ + { + float * n_axis; + n_axis = fill_normal( d_axis, 3 ); + if( !( m_axis = create_mesh( d_axis, n_axis, coordanate, 3 ) ) ) + goto error_mesh_axis; + free( n_axis ); + } + while( is_open_window( window ) ) { quat_t q; q=poll_input( window ); load_rot_matrix( shader, q ); + load_rot_matrix( shader_plain, q ); clean_context(); + #ifndef DEBUG - load_mdl_matrix( shader, 0, 0 ); + load_mdl_matrix( shader_plain, 0, 0 ); draw_mesh( m_axis ); - load_mdl_matrix( shader, 1, 1 ); + load_mdl_matrix( shader_plain, 1, 1 ); draw_mesh( m_axis ); - load_mdl_matrix( shader, 2, 2 ); + load_mdl_matrix( shader_plain, 2, 2 ); draw_mesh( m_axis ); #endif + load_mdl_matrix( shader, 0, 3 ); draw_mesh( m_cube ); + } - destroy_texture( texture ); destroy_mesh( m_axis ); destroy_mesh( m_cube ); + destroy_shader( shader_plain ); destroy_shader( shader ); + destroy_texture( texture ); close_window( window ); return 0; error_mesh_axis: destroy_mesh( m_cube ); error_mesh_cube: + destroy_shader( shader_plain ); +error_shader_plain: destroy_shader( shader ); error_shader: close_window( window ); + destroy_texture( texture ); error_window: return 1; } diff --git a/src/main.h b/src/main.h index 71057cf..b0fd681 100644 --- a/src/main.h +++ b/src/main.h @@ -22,7 +22,7 @@ int is_open_window(window_t window); void close_window(window_t window); -mesh_t create_mesh( float * d, float * n); +mesh_t create_mesh( float * d, float * n, unsigned char * coordanate, unsigned char m ); void destroy_mesh(mesh_t p); diff --git a/src/mesh.c b/src/mesh.c index 7ba7f28..21861c1 100755 --- a/src/mesh.c +++ b/src/mesh.c @@ -7,30 +7,43 @@ struct obj unsigned int vertex, vao, n_vbo, d_vbo; }; -mesh_t create_mesh( float * d, float * n ) +mesh_t create_mesh( float * d, float * n, unsigned char * coordanate, unsigned char m ) { struct obj * p; p=malloc(sizeof(struct obj)); - p->vertex=(*d)/3; + p->vertex=(*d)/m; glGenVertexArrays( 1, &p->vao ); glGenBuffers( 1, &p->d_vbo ); glBindVertexArray( p->vao ); glBindBuffer( GL_ARRAY_BUFFER, p->d_vbo ); - glBufferData( GL_ARRAY_BUFFER, p->vertex*3*sizeof(float), d+1, + glBufferData( GL_ARRAY_BUFFER, p->vertex*m*sizeof(float), d+1, GL_STATIC_DRAW ); - glVertexAttribPointer( 0,3,GL_FLOAT, 0, 3*sizeof(float), NULL ); + glVertexAttribPointer( 0,1,GL_FLOAT, 0, m*sizeof(float), (float*)(coordanate[0]*sizeof(float)) ); glEnableVertexAttribArray(0); + glVertexAttribPointer( 1,1,GL_FLOAT, 0, m*sizeof(float), (float*)(coordanate[1]*sizeof(float)) ); + glEnableVertexAttribArray(1); + glVertexAttribPointer( 2,1,GL_FLOAT, 0, m*sizeof(float), (float*)(coordanate[2]*sizeof(float)) ); + glEnableVertexAttribArray(2); + glVertexAttribPointer( 3,1,GL_FLOAT, 0, m*sizeof(float), (float*)(coordanate[3]*sizeof(float)) ); + glEnableVertexAttribArray(3); glGenBuffers( 1, &p->n_vbo ); glBindBuffer( GL_ARRAY_BUFFER, p->n_vbo ); - glBufferData( GL_ARRAY_BUFFER, p->vertex*3*sizeof(float), n+1, + glBufferData( GL_ARRAY_BUFFER, p->vertex*m*sizeof(float), n+1, GL_STATIC_DRAW ); - glVertexAttribPointer( 1,3,GL_FLOAT, 0, 3*sizeof(float), NULL ); - glEnableVertexAttribArray(1); + glVertexAttribPointer( 4,1,GL_FLOAT, 0, m*sizeof(float), (float*)(coordanate[0]*sizeof(float)) ); + glEnableVertexAttribArray(4); + glVertexAttribPointer( 5,1,GL_FLOAT, 0, m*sizeof(float), (float*)(coordanate[1]*sizeof(float)) ); + glEnableVertexAttribArray(5); + glVertexAttribPointer( 6,1,GL_FLOAT, 0, m*sizeof(float), (float*)(coordanate[2]*sizeof(float)) ); + glEnableVertexAttribArray(6); + glVertexAttribPointer( 7,1,GL_FLOAT, 0, m*sizeof(float), (float*)(coordanate[3]*sizeof(float)) ); + glEnableVertexAttribArray(7); + return p; } diff --git a/src/shader.c b/src/shader.c index d4dbc71..f7b8b41 100644 --- a/src/shader.c +++ b/src/shader.c @@ -37,8 +37,8 @@ unsigned char gload_program( unsigned int program, const char * src, shader = glCreateShader(type[i]); glShaderSource( shader, 1, (const GLchar **)&src, ((void*)0 )); glCompileShader(shader); - glGetShaderiv( shader, GL_COMPILE_STATUS, &status ); + glGetShaderiv( shader, GL_COMPILE_STATUS, &status ); if( !status ) { diff --git a/src/surface.c b/src/surface.c new file mode 100644 index 0000000..40f67df --- /dev/null +++ b/src/surface.c @@ -0,0 +1,93 @@ +#include +#include +#include + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +typedef void(*function_t)(float*,int, int, int); + +void mobius(float *d_surface, int i, int j, int grid_size) +{ + const float width = 0.5; + float u = (2*M_PI) * ((float)i/grid_size ); + float v = (2*width) * ((float)j/grid_size ) - width; + + d_surface[0] = cos(u) + v * cos(u / 2) * cos(u); + d_surface[1] = sin(u) + v * cos(u / 2) * sin(u); + d_surface[2] = v * sin(u / 2); +} + +void toro(float *d_surface, int i, int j, int grid_size) +{ + float u = (2*M_PI) * ((float)i/grid_size ); + float v = (2*M_PI) * ((float)j/grid_size ); + + d_surface[0] = (1 + 0.5*cos(v))*cos(u); + d_surface[1] = (1 + 0.5*cos(v))*sin(u); + d_surface[2] = 0.5*sin(v); +} + +void klein(float *d_surface, int i, int j, int grid_size) +{ + float u = (2*M_PI) * ((float)i/grid_size ); + float v = (2*M_PI) * ((float)j/grid_size ); + + d_surface[0] = (0.5*cos(v) + 0.5) * cos(u); + d_surface[1] = (0.5*cos(v) + 0.5) * sin(u); + d_surface[2] = sin(v) * cos(u/2); + d_surface[3] = sin(v)*sin(u/2); +} + +float * generate_surface(int grid_size) +{ + unsigned char m = 4; + long size = grid_size*grid_size*2*9*m; + function_t f = klein; + float * d_surface; + int k=0; + + d_surface = malloc((size+1)*sizeof(float)); + d_surface[0] = size; + + for (int i = 0; i < grid_size; i++) + { + for (int j = 0; j < grid_size; j++) + { + // triangle 1, front + f(&d_surface[k + 1], i, j, grid_size); + k+=m; + f(&d_surface[k + 1], i + 1, j, grid_size); + k+=m; + f(&d_surface[k + 1], i + 1, j + 1, grid_size); + k+=m; + + // triangle 1, back + f(&d_surface[k + 1], i + 1, j + 1, grid_size); + k+=m; + f(&d_surface[k + 1], i + 1, j, grid_size); + k+=m; + f(&d_surface[k + 1], i, j, grid_size); + k+=m; + + // triangle 2, font + f(&d_surface[k + 1], i, j, grid_size); + k+=m; + f(&d_surface[k + 1], i, j + 1, grid_size); + k+=m; + f(&d_surface[k + 1], i + 1, j + 1, grid_size); + k+=m; + + // triangle 2, back + f(&d_surface[k + 1], i + 1, j + 1, grid_size); + k+=m; + f(&d_surface[k + 1], i, j + 1, grid_size); + k+=m; + f(&d_surface[k + 1], i, j, grid_size); + k+=m; + } + } + + return d_surface; +} diff --git a/src/window.c b/src/window.c index a02fb78..1ac027a 100644 --- a/src/window.c +++ b/src/window.c @@ -4,12 +4,11 @@ void __window_callback(GLFWwindow *, int, int); void __mouse_callback(GLFWwindow *, int, int, int); void __scroll_callback(GLFWwindow *, double, double); +void __key_callback(GLFWwindow *, int, int, int, int); window_t init_window(unsigned int w, unsigned int h, const char * name) { void * window; - void __mouse_callback(GLFWwindow *window, int button, int action, int mods); - void __scroll_callback(GLFWwindow *window, double xoffset, double yoffset); if( !glfwInit() ) return NULL; @@ -29,6 +28,7 @@ window_t init_window(unsigned int w, unsigned int h, const char * name) glfwSetWindowSizeCallback(window, __window_callback); glfwSetMouseButtonCallback((GLFWwindow*)window, __mouse_callback); glfwSetScrollCallback((GLFWwindow*)window, __scroll_callback); + glfwSetKeyCallback((GLFWwindow*)window, __key_callback); __window_callback( window, w, h ); From 96df57fc90866fd80c2f43dafd422bf6fab0e53d Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 22 Oct 2024 12:05:19 -0600 Subject: [PATCH 14/25] Ya deberia funcionar n==4, pero por alguna razon no corre con make run, iura --- src/main.c | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/src/main.c b/src/main.c index 922ec41..7e54851 100755 --- a/src/main.c +++ b/src/main.c @@ -22,9 +22,8 @@ unsigned char palette[] = void calc_normal(float* v1, float* v2, float* v3,float* normal, unsigned char n) { - float alpha; - vec4 lado1, lado2; - vec4 u1, u2, proy; + vec4 lado1, lado2, lado3; + vec4 u1, u2, u3; switch (n) { @@ -38,19 +37,34 @@ void calc_normal(float* v1, float* v2, float* v3,float* normal, unsigned char n) return; case 4: -#if 0 - glm_vec4_sub(v2, v1, lado1); - glm_vec4_sub(v3, v1, lado2); - glm_vec4_copy(lado1, u1); + glm_vec4_sub(v2, v1, lado1); + glm_vec4_sub(v3, v1, lado2); + glm_vec4_sub(v2, v1, lado3); + + glm_vec4_copy(lado1, u1); - alpha = glm_vec4_dot(lado2, u1) / glm_vec4_dot(u1, u1); - glm_vec4_scale(u1, alpha, proy); - glm_vec4_sub(lado2, proy, u2); + float alpha = glm_vec4_dot(lado2, u1) / glm_vec4_dot(u1, u1); + vec4 proj_u1; + glm_vec4_scale(u1, alpha, proj_u1); + glm_vec4_sub(lado2, proj_u1, u2); - glm_vec4_normalize(u2); - glm_vec4_copy(u2, normal); -#endif + glm_vec4_normalize(u2); + + float beta = glm_vec4_dot(lado3, u1) / glm_vec4_dot(u1, u1); + vec4 proj_u1_lado3; + glm_vec4_scale(u1, beta, proj_u1_lado3); + + float gamma = glm_vec4_dot(lado3, u2) / glm_vec4_dot(u2, u2); + vec4 proj_u2; + glm_vec4_scale(u2, gamma, proj_u2); + + glm_vec4_sub(lado3, proj_u1_lado3, u3); + glm_vec4_sub(u3, proj_u2, u3); + + glm_vec4_normalize(u3); + + glm_vec4_copy(u3, normal); return; } } From c5133207144f868956f526b2ff9a5526bc9daabd Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 22 Oct 2024 12:53:44 -0600 Subject: [PATCH 15/25] xd, la restanostaba guena --- src/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index 7e54851..1323418 100755 --- a/src/main.c +++ b/src/main.c @@ -35,12 +35,12 @@ void calc_normal(float* v1, float* v2, float* v3,float* normal, unsigned char n) glm_vec3_cross(lado1, lado2, normal); glm_vec3_normalize(normal); return; - + case 4: glm_vec4_sub(v2, v1, lado1); glm_vec4_sub(v3, v1, lado2); - glm_vec4_sub(v2, v1, lado3); + glm_vec4_sub(v3, v2, lado3); glm_vec4_copy(lado1, u1); From 74f4f7c7ebbd70a3fd3894a212a8c8068e101435 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Tue, 22 Oct 2024 18:58:15 -0600 Subject: [PATCH 16/25] Finall G-S MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Observaciones: * Agregé CGLM_ALL_UNALIGNED para evitar el Segfault. * Cambie la estructura de G-S a una más ordenada. * Cambié el nombre de las variables a unas más intuitivas. * Cambié lado3, a uno que garantiza G-S. En lo general muy bien!!, Felicidades. --- src/main.c | 77 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/src/main.c b/src/main.c index 1323418..3118a4f 100755 --- a/src/main.c +++ b/src/main.c @@ -1,8 +1,11 @@ #include "main.h" #include "data/axis.h" #include "data/shaders.h" + #include #include + +#define CGLM_ALL_UNALIGNED #include #include @@ -20,51 +23,67 @@ unsigned char palette[] = 0x7A,0x1C,0xAC,0xff, }; -void calc_normal(float* v1, float* v2, float* v3,float* normal, unsigned char n) +void calc_normal(float* p1, float* p2, float* p3,float* normal, unsigned char n) { - vec4 lado1, lado2, lado3; - vec4 u1, u2, u3; + float alpha; + vec4 v1, v2, v3; + vec4 u1, u2, u3; switch (n) { case 3: - glm_vec3_sub(v2, v1, lado1); - glm_vec3_sub(v3, v1, lado2); + glm_vec3_sub(p2, p1, v1); + glm_vec3_sub(p3, p1, v2); - glm_vec3_cross(lado1, lado2, normal); + glm_vec3_cross(v1, v2, normal); glm_vec3_normalize(normal); return; case 4: - glm_vec4_sub(v2, v1, lado1); - glm_vec4_sub(v3, v1, lado2); - glm_vec4_sub(v3, v2, lado3); - - glm_vec4_copy(lado1, u1); + /* + In Grant-Shmidth we need 3 linearly independian vector that forms a basis, + so we can have a ortonormal version of that basis, since, we must have + v1 = p3 - p1 + v2 = p2 - p1 + Then v3 = p1, will most certantly be linerly independiant to v1 and v2. + */ + glm_vec4_sub(p2, p1, v1); + glm_vec4_sub(p3, p1, v2); + glm_vec4_copy(p1, v3); + + /* Setup U1 */ + { + glm_vec4_copy(v1, u1); + } - float alpha = glm_vec4_dot(lado2, u1) / glm_vec4_dot(u1, u1); - vec4 proj_u1; - glm_vec4_scale(u1, alpha, proj_u1); - glm_vec4_sub(lado2, proj_u1, u2); + /* Setup U2 */ + { + vec4 proj; - glm_vec4_normalize(u2); + alpha = glm_vec4_dot(v2, u1) / glm_vec4_dot(u1, u1); + glm_vec4_scale(u1, alpha, proj); - float beta = glm_vec4_dot(lado3, u1) / glm_vec4_dot(u1, u1); - vec4 proj_u1_lado3; - glm_vec4_scale(u1, beta, proj_u1_lado3); - - float gamma = glm_vec4_dot(lado3, u2) / glm_vec4_dot(u2, u2); - vec4 proj_u2; - glm_vec4_scale(u2, gamma, proj_u2); - - glm_vec4_sub(lado3, proj_u1_lado3, u3); - glm_vec4_sub(u3, proj_u2, u3); - - glm_vec4_normalize(u3); + glm_vec4_sub(v2, proj, u2); + } - glm_vec4_copy(u3, normal); + /* Setup U3 */ + { + vec4 proj1, proj2; + + alpha = glm_vec4_dot(v3, u1) / glm_vec4_dot(u1, u1); + glm_vec4_scale(u1, alpha, proj1); + + alpha = glm_vec4_dot(v3, u2) / glm_vec4_dot(u2, u2); + glm_vec4_scale(u2, alpha, proj2); + + glm_vec4_sub(v3, proj1, u3); + glm_vec4_sub(u3, proj2, u3); + } + + glm_vec4_copy(u3, normal); + glm_vec4_normalize(normal); return; } } From 52ef8971379cf453699d92d5e8ce02759d9fab12 Mon Sep 17 00:00:00 2001 From: "roberto.mc" Date: Thu, 14 Nov 2024 16:47:14 -0600 Subject: [PATCH 17/25] Specular ya deberia furula --- src/data/shaders.h | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/data/shaders.h b/src/data/shaders.h index 98d2e24..5ae40ac 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -5,6 +5,7 @@ const char * vs = "layout (location = 1) in float aPos_y;" "layout (location = 2) in float aPos_z;" "layout (location = 3) in float aPos_w;" + "layout (location = 4) in float aNormal_x;" "layout (location = 5) in float aNormal_y;" "layout (location = 6) in float aNormal_z;" @@ -45,28 +46,32 @@ const char * fs_plain = " FragColor = texture( palette, vec3( 0, 0, index ) ).rgba;" "}"; - - const char * fs = - "#version 330 core\n" + "#version 330 core\n" - "uniform sampler2DArray palette;" + "uniform sampler2DArray palette;" - "in float index;" - "out vec4 FragColor;" - "in vec3 Normal;" - "in vec3 FragPos;" + "in float index;" + "out vec4 FragColor;" + "in vec3 Normal;" + "in vec3 FragPos;" + "uniform vec3 viewPos;\n" + "const float specularStrength = 0.5;\n" - "void main()" - "{" + "void main()" + "{" + " vec4 color = texture(palette, vec3(0, 0, index));\n" + " vec3 lightPos = vec3(0, 0, -15);\n" + " vec3 lightDir = normalize(lightPos - FragPos);\n" - " vec4 color = texture( palette, vec3( 0, 0, index ) ).rgba;" - " vec3 lightPos = vec3(0,0,-15);" - " vec3 lightDir = normalize(lightPos - FragPos);" + " float diffuse = max(dot(Normal, lightDir), 0.0);\n" - " float diffuse = max(dot(Normal, lightDir), 0.0);" - " float ambient = 0.5;" - " FragColor = (ambient + diffuse)*color;" - "}"; + " vec3 viewDir = normalize(viewPos - FragPos);\n" + " vec3 reflectDir = reflect(-lightDir, Normal);\n" + " float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);\n" + " vec3 specular = specularStrength * spec * vec3(1.0); \n" - + " vec3 result = (0.5 + 0.5 * diffuse) * color.rgb + specular;\n" + + " FragColor = vec4(result, color.a);\n" + "}"; \ No newline at end of file From 569a8d0f4288d71218e44e429d1915f11613c5ba Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Thu, 14 Nov 2024 20:11:30 -0600 Subject: [PATCH 18/25] Fix: specular Muy bien!!, nada mas habian 2 errores por mi parte, 'Normal' no estaba normalizado, lo que afectaba las potencias con 'pow'. Ademas habia un error con los buffers del shader lo que afectaba toda la iluminacion. Sin embargo lo hiciste muy bien, solo que te falto definir viewPos. --- src/context.c | 2 -- src/data/shaders.h | 24 ++++++++++++------------ src/mesh.c | 4 ++-- src/surface.c | 19 ++----------------- 4 files changed, 16 insertions(+), 33 deletions(-) diff --git a/src/context.c b/src/context.c index 32b1f18..df0dc5c 100644 --- a/src/context.c +++ b/src/context.c @@ -4,8 +4,6 @@ void set_clean_color_context( unsigned char r, unsigned char g, unsigned char b ) { glEnable( GL_DEPTH_TEST ); - glEnable( GL_CULL_FACE ); - glCullFace( GL_BACK ); glClearColor( (float)r/0xff, (float)g/0xff, (float)b/0xff, 1.0 ); } diff --git a/src/data/shaders.h b/src/data/shaders.h index 5ae40ac..07eac94 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -25,7 +25,7 @@ const char * vs = " index=idx;" " vec3 aNormal = vec3(aNormal_x,aNormal_y,aNormal_z);" " vec3 aPos = vec3(aPos_x,aPos_y,aPos_z);" - " Normal = mat3(transpose(inverse(rot*mdl))) * aNormal;" + " Normal = normalize(mat3(transpose(inverse(rot*mdl))) * aNormal);" " gl_Position = fix * rot * mdl * vec4( aPos, 1.0 );\n" " FragPos = vec3( rot * mdl * vec4(aPos, 1.0));" "}"; @@ -52,26 +52,26 @@ const char * fs = "uniform sampler2DArray palette;" "in float index;" - "out vec4 FragColor;" "in vec3 Normal;" "in vec3 FragPos;" - "uniform vec3 viewPos;\n" - "const float specularStrength = 0.5;\n" + + "out vec4 FragColor;" "void main()" "{" " vec4 color = texture(palette, vec3(0, 0, index));\n" - " vec3 lightPos = vec3(0, 0, -15);\n" - " vec3 lightDir = normalize(lightPos - FragPos);\n" - - " float diffuse = max(dot(Normal, lightDir), 0.0);\n" + " vec3 viewPos = vec3(0, 0, -15);\n" " vec3 viewDir = normalize(viewPos - FragPos);\n" + + " vec3 lightPos = viewPos\n;" + " vec3 lightDir = normalize(lightPos - FragPos);\n" " vec3 reflectDir = reflect(-lightDir, Normal);\n" - " float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);\n" - " vec3 specular = specularStrength * spec * vec3(1.0); \n" - " vec3 result = (0.5 + 0.5 * diffuse) * color.rgb + specular;\n" + " float specular = pow(max(dot(viewDir, reflectDir),0.0), 16);\n" + " float diffuse = max(dot(Normal, lightDir),0.0);\n" + + " vec3 result = (0.5 + 0.5 * diffuse + specular) * color.rgb;\n" " FragColor = vec4(result, color.a);\n" - "}"; \ No newline at end of file + "}"; diff --git a/src/mesh.c b/src/mesh.c index 21861c1..1b0758b 100755 --- a/src/mesh.c +++ b/src/mesh.c @@ -32,8 +32,8 @@ mesh_t create_mesh( float * d, float * n, unsigned char * coordanate, unsigned c glEnableVertexAttribArray(3); glGenBuffers( 1, &p->n_vbo ); - glBindBuffer( GL_ARRAY_BUFFER, p->n_vbo ); - glBufferData( GL_ARRAY_BUFFER, p->vertex*m*sizeof(float), n+1, + glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, p->n_vbo ); + glBufferData( GL_ELEMENT_ARRAY_BUFFER, p->vertex*m*sizeof(float), n+1, GL_STATIC_DRAW ); glVertexAttribPointer( 4,1,GL_FLOAT, 0, m*sizeof(float), (float*)(coordanate[0]*sizeof(float)) ); glEnableVertexAttribArray(4); diff --git a/src/surface.c b/src/surface.c index 40f67df..737a2ac 100644 --- a/src/surface.c +++ b/src/surface.c @@ -43,8 +43,9 @@ void klein(float *d_surface, int i, int j, int grid_size) float * generate_surface(int grid_size) { unsigned char m = 4; - long size = grid_size*grid_size*2*9*m; function_t f = klein; + + long size = grid_size*grid_size*6*m; float * d_surface; int k=0; @@ -55,14 +56,6 @@ float * generate_surface(int grid_size) { for (int j = 0; j < grid_size; j++) { - // triangle 1, front - f(&d_surface[k + 1], i, j, grid_size); - k+=m; - f(&d_surface[k + 1], i + 1, j, grid_size); - k+=m; - f(&d_surface[k + 1], i + 1, j + 1, grid_size); - k+=m; - // triangle 1, back f(&d_surface[k + 1], i + 1, j + 1, grid_size); k+=m; @@ -78,14 +71,6 @@ float * generate_surface(int grid_size) k+=m; f(&d_surface[k + 1], i + 1, j + 1, grid_size); k+=m; - - // triangle 2, back - f(&d_surface[k + 1], i + 1, j + 1, grid_size); - k+=m; - f(&d_surface[k + 1], i, j + 1, grid_size); - k+=m; - f(&d_surface[k + 1], i, j, grid_size); - k+=m; } } From 6dbc758cc3347ff8fad7b931d31eba3d3f64687f Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Thu, 14 Nov 2024 21:15:24 -0600 Subject: [PATCH 19/25] xd --- src/data/shaders.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/data/shaders.h b/src/data/shaders.h index 07eac94..dd5bc51 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -25,7 +25,7 @@ const char * vs = " index=idx;" " vec3 aNormal = vec3(aNormal_x,aNormal_y,aNormal_z);" " vec3 aPos = vec3(aPos_x,aPos_y,aPos_z);" - " Normal = normalize(mat3(transpose(inverse(rot*mdl))) * aNormal);" + " Normal = mat3(transpose(inverse(rot*mdl))) * aNormal;" " gl_Position = fix * rot * mdl * vec4( aPos, 1.0 );\n" " FragPos = vec3( rot * mdl * vec4(aPos, 1.0));" "}"; @@ -66,10 +66,11 @@ const char * fs = " vec3 lightPos = viewPos\n;" " vec3 lightDir = normalize(lightPos - FragPos);\n" + " vec3 reflectDir = reflect(-lightDir, Normal);\n" + " vec3 hafwayDir = normalize(lightDir+viewDir);\n" - - " float specular = pow(max(dot(viewDir, reflectDir),0.0), 16);\n" + " float specular = pow(max(dot(normalize(Normal), hafwayDir),0.0), 32);\n" " float diffuse = max(dot(Normal, lightDir),0.0);\n" " vec3 result = (0.5 + 0.5 * diffuse + specular) * color.rgb;\n" From 4bc45f4eeae3377585999e526ef01d3dfdb98030 Mon Sep 17 00:00:00 2001 From: "roberto.mc" Date: Fri, 15 Nov 2024 20:20:33 -0600 Subject: [PATCH 20/25] aiuda con el blinn-phong --- src/data/shaders.h | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/data/shaders.h b/src/data/shaders.h index dd5bc51..9a7b814 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -64,15 +64,24 @@ const char * fs = " vec3 viewPos = vec3(0, 0, -15);\n" " vec3 viewDir = normalize(viewPos - FragPos);\n" - " vec3 lightPos = viewPos\n;" + " vec3 lightPos = viewPos;\n" " vec3 lightDir = normalize(lightPos - FragPos);\n" - " vec3 reflectDir = reflect(-lightDir, Normal);\n" - " vec3 hafwayDir = normalize(lightDir+viewDir);\n" + " float specular = 0.0;\n" - " float specular = pow(max(dot(normalize(Normal), hafwayDir),0.0), 32);\n" - " float diffuse = max(dot(Normal, lightDir),0.0);\n" + " if (true)" + " {" + " vec3 halfwayDir = normalize(lightDir + viewDir);\n" + " specular = pow(max(dot(normalize(Normal), halfwayDir), 0.0), 16.0);\n" + " }" + " else" + " {" + " vec3 reflectDir = reflect(-lightDir, normalize(Normal));\n" + " specular = pow(max(dot(viewDir, reflectDir), 0.0), 32.0);\n" + " }" - " vec3 result = (0.5 + 0.5 * diffuse + specular) * color.rgb;\n" - " FragColor = vec4(result, color.a);\n" + " float diffuse = max(dot(normalize(Normal), lightDir), 0.0);\n" + + " vec3 result = (0.5 + 0.5 * diffuse + specular) * color.rgb;\n" + " FragColor = vec4(result, color.a);\n" "}"; From 61b014a803a28f399aa6992f7af0a2519e43497b Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Tue, 19 Nov 2024 21:54:22 -0600 Subject: [PATCH 21/25] Port to web for free --- Makefile | 5 +++- src/context.c | 9 +++++++ src/data/shaders.h | 20 +++++++++++++-- src/main.c | 64 +++++++++++++++++++++++++++++----------------- 4 files changed, 71 insertions(+), 27 deletions(-) mode change 100755 => 100644 src/main.c diff --git a/Makefile b/Makefile index 89e4d3f..b2e71e1 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,7 @@ help: @echo " $(MAKE) linux-x11" @echo " $(MAKE) linux-wayland" @echo " $(MAKE) cocoa" + @echo " $(MAKE) CC=emcc wasm" @echo "Para limpiar los archivos compilados se puede usar" @echo " $(MAKE) clean" @echo "Para ejecturar el programa sin instalarlos se puede usar:" @@ -72,6 +73,9 @@ cocoa: $(OBJ) $(MAKE) DFLAGS="-D_GLFW_COCOA" libglfw.so $(CC) -framework OpenGL -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw +wasm: $(OBJ) + $(CC) -sUSE_WEBGL2=1 -sUSE_GLFW=3 -o mani.html $(OBJ) + libglfw.so: $(CC) -fPIC -shared $(DFLAGS) -D_GLFW_BUILD_DLL -Iext/glfw/deps/wayland ./ext/glfw/src/*.c -o $@ @@ -81,5 +85,4 @@ clean: .SUFFIXES: .c .o .c.o: src/main.h - clang-format -i $< $(CC) $(CFLAGS) -c -o $@ $< diff --git a/src/context.c b/src/context.c index 39c2169..c9f00b8 100644 --- a/src/context.c +++ b/src/context.c @@ -1,10 +1,15 @@ #include "main.h" + +#ifdef EMSCRIPTEN +#include +#else #ifdef GLAD #include #include #else #include #endif +#endif void set_clean_color_context(unsigned char r, unsigned char g, unsigned char b) { @@ -15,12 +20,16 @@ void set_clean_color_context(unsigned char r, unsigned char g, unsigned char b) int init_context(void) { +#ifdef EMSCRIPTEN + return 1; +#else #ifdef GLAD return gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); #else return glewInit(); #endif +#endif } void clean_context(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } diff --git a/src/data/shaders.h b/src/data/shaders.h index 1f058ce..e166136 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -1,6 +1,10 @@ const char * vs = +#ifdef EMSCRIPTEN + "#version 300 es\n" + "precision highp float;" +#else "#version 330 core\n" - +#endif "layout (location = 0) in float aPos_x;" "layout (location = 1) in float aPos_y;" "layout (location = 2) in float aPos_z;" @@ -32,8 +36,14 @@ const char * vs = const char * fs_plain = - "#version 330 core\n" +#ifdef EMSCRIPTEN + "#version 300 es\n" + "precision highp float;" + "precision highp sampler2DArray;" +#else + "#version 330 core\n" +#endif "uniform sampler2DArray palette;" "in float index;" @@ -47,7 +57,13 @@ const char * fs_plain = "}"; const char * fs = +#ifdef EMSCRIPTEN + "#version 300 es\n" + "precision highp float;" + "precision highp sampler2DArray;" +#else "#version 330 core\n" +#endif "uniform sampler2DArray palette;" diff --git a/src/main.c b/src/main.c old mode 100755 new mode 100644 index 30084f2..4e6790f --- a/src/main.c +++ b/src/main.c @@ -8,6 +8,10 @@ #define WIDTH 512 #define HEIGHT 512 +#ifdef EMSCRIPTEN +#include +#endif + float *generate_data_surface(unsigned int, unsigned char *); float *generate_normals_surface(float *, unsigned char); @@ -29,11 +33,40 @@ void mlog(char *msg) #endif } +window_t window; +mesh_t m_surface, m_axis; +id_t shader, shader_plain; + +#ifndef EMSCRIPTEN +static inline +#endif +void main_loop(void) +{ + quat_t q; + + q = poll_input(window); + load_rot_matrix(shader, q); + load_rot_matrix(shader_plain, q); + + clean_context(); + +#ifndef DEBUG + load_mdl_matrix(shader_plain, 0, 0); + draw_mesh(m_axis); + load_mdl_matrix(shader_plain, 1, 1); + draw_mesh(m_axis); + load_mdl_matrix(shader_plain, 2, 2); + draw_mesh(m_axis); + load_mdl_matrix(shader, 0, 3); +#else + load_mdl_matrix(shader_plain, 0, 3); +#endif + draw_mesh(m_surface); +} + int main(void) { - id_t shader, texture, shader_plain; - mesh_t m_surface, m_axis; - window_t window; + id_t texture; mlog("[VENTANA] Inicializando...\n"); { @@ -117,29 +150,12 @@ int main(void) } mlog("[MAIN LOOP] Inicializando...\n"); - while (is_open_window(window)) - { - quat_t q; - - q = poll_input(window); - load_rot_matrix(shader, q); - load_rot_matrix(shader_plain, q); - - clean_context(); - -#ifndef DEBUG - load_mdl_matrix(shader_plain, 0, 0); - draw_mesh(m_axis); - load_mdl_matrix(shader_plain, 1, 1); - draw_mesh(m_axis); - load_mdl_matrix(shader_plain, 2, 2); - draw_mesh(m_axis); - load_mdl_matrix(shader, 0, 3); +#ifdef EMSCRIPTEN + emscripten_set_main_loop(&main_loop, 0, 1); #else - load_mdl_matrix(shader_plain, 0, 3); + while (is_open_window(window)) + main_loop(); #endif - draw_mesh(m_surface); - } mlog("[MAIN LOOP] Terminando...\n"); mlog("[MESH] Destruyendo...\n"); From 8811c4e0b7333c4c2ec36a1e5877212bc8a53434 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Wed, 20 Nov 2024 11:38:23 -0600 Subject: [PATCH 22/25] Prepare for Rn -> Rm surfaces --- src/surface.c | 47 +++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/src/surface.c b/src/surface.c index 342efcf..aa76d09 100644 --- a/src/surface.c +++ b/src/surface.c @@ -9,31 +9,45 @@ #define M_PI 3.14159265358979323846 #endif -void mobius(float *d_surface, int i, int j, int grid_size) +void mobius(float *d_surface, int * coord, int grid_size) { const float width = 0.5; - float u = (2 * M_PI) * ((float)i / grid_size); - float v = (2 * width) * ((float)j / grid_size) - width; + float u = (2 * M_PI) * ((float)coord[0] / grid_size); + float v = (2 * width) * ((float)coord[1] / grid_size) - width; d_surface[0] = cos(u) + v * cos(u / 2) * cos(u); d_surface[1] = sin(u) + v * cos(u / 2) * sin(u); d_surface[2] = v * sin(u / 2); } -void torus(float *d_surface, int i, int j, int grid_size) +void torus(float *d_surface, int * coord, int grid_size) { - float u = (2 * M_PI) * ((float)i / grid_size); - float v = (2 * M_PI) * ((float)j / grid_size); + float u = (2 * M_PI) * ((float)coord[0] / grid_size); + float v = (2 * M_PI) * ((float)coord[1] / grid_size); d_surface[0] = (1 + 0.5 * cos(v)) * cos(u); d_surface[1] = (1 + 0.5 * cos(v)) * sin(u); d_surface[2] = 0.5 * sin(v); } -void klein(float *d_surface, int i, int j, int grid_size) +void torus_5d(float *d_surface, int * coord, int grid_size) { - float u = (2 * M_PI) * ((float)i / grid_size); - float v = (2 * M_PI) * ((float)j / grid_size); + float u = (2 * M_PI) * ((float)coord[0] / grid_size); + float v = (2 * M_PI) * ((float)coord[1] / grid_size); + float r1 = (float)coord[2] / grid_size; + float r2 = (float)coord[3] / grid_size; + + d_surface[0] = (r1 + r2 * cos(v)) * cos(u); + d_surface[1] = (r1 + r2 * cos(v)) * sin(u); + d_surface[2] = r2 * sin(v); + d_surface[3] = r1; + d_surface[4] = r2; +} + +void klein(float *d_surface, int * coord, int grid_size) +{ + float u = (2 * M_PI) * ((float)coord[0] / grid_size); + float v = (2 * M_PI) * ((float)coord[1]/ grid_size); d_surface[0] = (0.5 * cos(v) + 0.5) * cos(u); d_surface[1] = (0.5 * cos(v) + 0.5) * sin(u); @@ -41,7 +55,7 @@ void klein(float *d_surface, int i, int j, int grid_size) d_surface[3] = sin(v) * sin(u / 2); } -typedef void (*function_t)(float *, int, int, int); +typedef void (*function_t)(float *, int *, int); float *generate_data_surface(int grid_size, unsigned char *m) { @@ -52,6 +66,7 @@ float *generate_data_surface(int grid_size, unsigned char *m) f = klein; *m = 4; + size = grid_size * grid_size * 6 * (*m); d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; @@ -61,19 +76,19 @@ float *generate_data_surface(int grid_size, unsigned char *m) for (j = 0; j < grid_size; j++) { // triangle 1, Front - f(&d_surface[k + 1], i, j, grid_size); + f(&d_surface[k + 1], (int[2]){i, j}, grid_size); k += *m; - f(&d_surface[k + 1], i + 1, j, grid_size); + f(&d_surface[k + 1], (int[2]){i + 1, j}, grid_size); k += *m; - f(&d_surface[k + 1], i + 1, j + 1, grid_size); + f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size); k += *m; // triangle 2, Back - f(&d_surface[k + 1], i, j, grid_size); + f(&d_surface[k + 1], (int[2]){i, j}, grid_size); k += *m; - f(&d_surface[k + 1], i, j + 1, grid_size); + f(&d_surface[k + 1], (int[2]){i, j + 1}, grid_size); k += *m; - f(&d_surface[k + 1], i + 1, j + 1, grid_size); + f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size); k += *m; } } From e4a4a8c60362883de86e8668305cb862fdb48afc Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Thu, 21 Nov 2024 18:56:05 -0600 Subject: [PATCH 23/25] Add riemman surfaces family --- src/surface.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/surface.c b/src/surface.c index aa76d09..2acc0e8 100644 --- a/src/surface.c +++ b/src/surface.c @@ -1,3 +1,4 @@ +#include #include #include @@ -9,6 +10,25 @@ #define M_PI 3.14159265358979323846 #endif +#ifndef CMPLX +#define CMPLX(a,b) (a+I*b) +#endif + +void riemman(float *d_surface, int * coords, int grid_size) +{ + complex double eq; + float u = 2 * ((float)coords[0] / grid_size) - 1; + float v = 2 * ((float)coords[1] / grid_size) - 1; + + eq = csqrt(CMPLX(u,v)); + + d_surface[0] = u; + d_surface[1] = v; + d_surface[2] = creal(eq); + d_surface[3] = cimag(eq); +} + + void mobius(float *d_surface, int * coord, int grid_size) { const float width = 0.5; From a8ae6aaef67133f060866c6b0eb09bc954dcfe19 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Tue, 26 Nov 2024 23:49:02 -0600 Subject: [PATCH 24/25] Add gamma correction, change illumination values --- src/context.c | 2 +- src/data/shaders.h | 30 ++++++++++++++++++++++-------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/context.c b/src/context.c index c9f00b8..4eb36bb 100644 --- a/src/context.c +++ b/src/context.c @@ -14,7 +14,7 @@ void set_clean_color_context(unsigned char r, unsigned char g, unsigned char b) { glEnable(GL_DEPTH_TEST); - + glEnable(GL_FRAMEBUFFER_SRGB); glClearColor((float)r / 0xff, (float)g / 0xff, (float)b / 0xff, 1.0); } diff --git a/src/data/shaders.h b/src/data/shaders.h index e166136..48294f5 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -15,20 +15,34 @@ const char * vs = "layout (location = 6) in float aNormal_z;" "layout (location = 7) in float aNormal_w;" - "uniform float idx;" + "uniform uint idx;" + + "uniform uint i;" + "uniform float angle;" + "uniform mat4 fix;" "uniform mat4 rot;" "uniform mat4 mdl;" - "out float index;" + "flat out uint index;" "out vec3 Normal;" "out vec3 FragPos;" + "mat2 rotate2d( float angle )" + "{" + "return mat2( cos(angle), sin(angle), -sin(angle), cos(angle) );" + "}" + "void main()" "{" " index=idx;" + " vec3 aNormal = vec3(aNormal_x,aNormal_y,aNormal_z);" " vec3 aPos = vec3(aPos_x,aPos_y,aPos_z);" + + " aNormal[i] = (vec2(aNormal_w, aNormal[i]) * rotate2d(angle))[0];" + " aPos[i] = (vec2(aPos_w, aPos[i]) * rotate2d(angle))[0];" + " Normal = mat3(transpose(inverse(rot*mdl))) * aNormal;" " gl_Position = fix * rot * mdl * vec4( aPos, 1.0 );\n" " FragPos = vec3( rot * mdl * vec4(aPos, 1.0));" @@ -46,7 +60,7 @@ const char * fs_plain = #endif "uniform sampler2DArray palette;" - "in float index;" + "flat in uint index;" "out vec4 FragColor;" "in vec3 Normal;" "in vec3 FragPos;" @@ -67,7 +81,7 @@ const char * fs = "uniform sampler2DArray palette;" - "in float index;" + "flat in uint index;" "in vec3 Normal;" "in vec3 FragPos;" @@ -85,9 +99,9 @@ const char * fs = " vec3 halfwayDir = normalize(lightDir + viewDir);\n" - " float specular = pow(max(dot(normalize(Normal), halfwayDir), 0.0), 16.0);\n" - " float diffuse = max(dot(normalize(Normal), lightDir), 0.0);\n" + " float specular = pow(abs(dot(normalize(Normal), halfwayDir)), 32.0);\n" + " float diffuse = abs(dot(normalize(Normal), lightDir));\n" - " vec3 result = (0.5 + 0.5 * diffuse + specular) * color.rgb;\n" - " FragColor = vec4(result, color.a);\n" + " vec3 result = (0.5 + 1.5*diffuse + 4*specular) * color.rgb;\n" + " FragColor = vec4(result, color.a)*1/2.2;\n" "}"; From 589721a953d98c2278ec77765fdaa1a71d335419 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Tue, 26 Nov 2024 23:51:30 -0600 Subject: [PATCH 25/25] WIP: Rotations in R4, and change colors --- src/input.c | 20 +++++++++++++++--- src/main.c | 59 ++++++++++++++++++++++++++++++++++++++++------------ src/main.h | 12 +++++++++-- src/matrix.c | 2 +- src/mesh.c | 24 ++++++--------------- src/shader.c | 6 ++++++ 6 files changed, 86 insertions(+), 37 deletions(-) diff --git a/src/input.c b/src/input.c index a639003..4e4280a 100644 --- a/src/input.c +++ b/src/input.c @@ -9,6 +9,8 @@ unsigned char selected_axis = 0; int window_width; int window_height; +unsigned char animate_index=0; + versor q = GLM_QUAT_IDENTITY_INIT; vec3 axis[3] = { @@ -49,24 +51,28 @@ void __key_callback_input( switch (key) { unsigned char tmp; - - case GLFW_KEY_P: + case GLFW_KEY_I: tmp = projection.w; projection.w = projection.x; projection.x = tmp; + + animate_index=1; break; case GLFW_KEY_O: tmp = projection.w; projection.w = projection.y; projection.y = tmp; + animate_index=2; break; - case GLFW_KEY_I: + case GLFW_KEY_P: tmp = projection.w; projection.w = projection.z; projection.z = tmp; + animate_index=3; break; } + set_projection_mesh(projection); return; } @@ -157,5 +163,13 @@ end: glm_quat_rotatev(p, axis[1], axis[1]); glm_quat_rotatev(p, axis[2], axis[2]); glm_quat_normalize(q); + + // LOG INFO + if(0) + { + printf("QUAT: %2.5f %2.5f %2.5f %2.5f\n", q[0], q[1], q[2], q[3]); + printf("PROY: %3d %3d %3d (%3d)\n", projection.x, projection.y, projection.z, projection.w ); + printf("\n"); + } return q; } diff --git a/src/main.c b/src/main.c index 4e6790f..fd7ae8d 100644 --- a/src/main.c +++ b/src/main.c @@ -12,18 +12,22 @@ #include #endif +#ifndef M_PI +#define M_PI 3.14159 +#endif + float *generate_data_surface(unsigned int, unsigned char *); float *generate_normals_surface(float *, unsigned char); -const char *wname = "manigraph: manifold grapher"; +struct projection projection = {.x = 3, .y=1, .z=2, .w=0 }; -struct projection projection = {.x = 0, .y = 1, .z = 2, .w = 3}; +const char *wname = "manigraph: manifold grapher"; unsigned char palette[][4] = { {0xEB, 0xD3, 0xF8, 0xff}, {0xEB, 0xD4, 0xF8, 0xff}, {0xEB, 0xD5, 0xF8, 0xff}, - {0x7A, 0x1C, 0xAC, 0xff}, + {0x2F, 0x3C, 0x7E, 0xff}, }; void mlog(char *msg) @@ -37,6 +41,8 @@ window_t window; mesh_t m_surface, m_axis; id_t shader, shader_plain; +extern volatile unsigned char animate_index; + #ifndef EMSCRIPTEN static inline #endif @@ -45,23 +51,48 @@ void main_loop(void) quat_t q; q = poll_input(window); + load_rot_matrix(shader, q); load_rot_matrix(shader_plain, q); + { + static float angle = 0; + + + if( animate_index ) + { + angle+=0.01; + + load_uint_to_shader( shader, "i", animate_index-1 ); + load_uint_to_shader( shader_plain, "i", animate_index-1 ); + load_float_to_shader( shader, "angle", angle); + load_float_to_shader( shader_plain, "angle", angle); + } + + if( angle > M_PI/2 && angle ) + { + animate_index=0; + angle = 0; + } + } + + clean_context(); #ifndef DEBUG load_mdl_matrix(shader_plain, 0, 0); - draw_mesh(m_axis); + draw_mesh(m_axis, 1); load_mdl_matrix(shader_plain, 1, 1); - draw_mesh(m_axis); + draw_mesh(m_axis, 1); load_mdl_matrix(shader_plain, 2, 2); - draw_mesh(m_axis); - load_mdl_matrix(shader, 0, 3); -#else - load_mdl_matrix(shader_plain, 0, 3); + draw_mesh(m_axis, 1); #endif - draw_mesh(m_surface); + load_mdl_matrix(shader, 0, 3); + draw_mesh(m_surface,0); + + load_mdl_matrix(shader_plain, 0, 3); + draw_mesh(m_surface,1); + } int main(void) @@ -86,7 +117,7 @@ int main(void) mlog("[CONTEXT] Error al inicializar...\n"); goto error_context; } - set_clean_color_context(0x2E, 0x07, 0x3F); + set_clean_color_context(0xFB, 0xEA, 0xEB); } mlog("[TEXTURE] Inicializando...\n"); @@ -126,16 +157,18 @@ int main(void) d_surface = generate_data_surface(16, &m); n_surface = generate_normals_surface(d_surface, m); - projection.m = m; - if (!(m_surface = create_mesh(d_surface, n_surface, m))) { mlog("[MESH] Error al inicializar...\n"); goto error_mesh_surface; } + projection.m = m; projection.mesh = m_surface; + set_projection_mesh( projection ); + + free(n_surface); free(d_surface); } diff --git a/src/main.h b/src/main.h index 130a91a..c003e36 100644 --- a/src/main.h +++ b/src/main.h @@ -4,7 +4,7 @@ error of the shaders. */ -/* #define DEBUG */ +/* #define DEBUG */ /* #define GLAD */ typedef const void * window_t; @@ -57,7 +57,7 @@ void set_projection_mesh( struct projection ); void destroy_mesh(mesh_t p); -void draw_mesh(mesh_t p); +void draw_mesh(mesh_t p, char lines); /* Set background color: @@ -99,6 +99,14 @@ unsigned char load_program_to_shader(id_t shader, const char * src, unsigned int void load_float_to_shader(id_t shader, char * var, float f); +/* + load unsigned int to shader: + var: name of glsl variable. + u: unsigned int to load +*/ + +void load_uint_to_shader(id_t shader, char * var, unsigned int u); + /* load matrix 4 to shader: var: name of glsl variable. diff --git a/src/matrix.c b/src/matrix.c index 2ddb925..b5c48f9 100644 --- a/src/matrix.c +++ b/src/matrix.c @@ -38,7 +38,7 @@ void load_fix_matrix(id_t shader, float ratio) void load_mdl_matrix(id_t shader, unsigned char i, unsigned char c) { - load_float_to_shader(shader, "idx", c); + load_uint_to_shader(shader, "idx", c); load_mat4_to_shader(shader, "mdl", (mat4_t)ortho[i]); } diff --git a/src/mesh.c b/src/mesh.c index 100be67..0353741 100644 --- a/src/mesh.c +++ b/src/mesh.c @@ -78,19 +78,6 @@ mesh_t create_mesh(float *d, float *n, unsigned char m) glEnableVertexAttribArray(i + 4); } - { - struct projection projection = { - .x = 0, - .y = 1, - .z = 2, - .w = 3, - }; - - projection.m = m; - projection.mesh = p; - set_projection_mesh(projection); - } - return p; } @@ -104,18 +91,19 @@ void destroy_mesh(mesh_t p) free(p); } -void draw_mesh(mesh_t p) +void draw_mesh(mesh_t p, char lines ) { struct obj *obj = p; glBindVertexArray(obj->vao); -#ifdef DEBUG + if( lines ) { int i; for (i = 0; i < obj->vertex; i += 3) glDrawArrays(GL_LINE_LOOP, i, 3); } -#else - glDrawArrays(GL_TRIANGLES, 0, obj->vertex); -#endif + else + { + glDrawArrays(GL_TRIANGLES, 0, obj->vertex); + } } diff --git a/src/shader.c b/src/shader.c index eec91c2..f7d8430 100644 --- a/src/shader.c +++ b/src/shader.c @@ -54,6 +54,12 @@ void load_float_to_shader(unsigned int program, char *var, float f) glUniform1f(glGetUniformLocation(program, var), f); } +void load_uint_to_shader(unsigned int program, char *var, unsigned int u) +{ + glUseProgram(program); + glUniform1ui(glGetUniformLocation(program, var), u); +} + void load_mat4_to_shader(unsigned int program, char *var, float *mat) { glUseProgram(program);