From 1e0ff2d88d97fa014d5c503f1c1cb753fd3096fe Mon Sep 17 00:00:00 2001 From: TheRedShip Date: Mon, 27 Jan 2025 16:59:06 +0100 Subject: [PATCH] + | Texture parse --- imgui.ini | 2 +- includes/RT/Object.hpp | 1 + includes/RT/Scene.hpp | 1 + includes/RT/SceneParser.hpp | 1 + shaders/light.glsl | 12 ++++++------ srcs/RT.cpp | 5 +++++ srcs/class/Scene.cpp | 5 +++++ srcs/class/SceneParser.cpp | 18 ++++++++++++++++++ texture.jpg | Bin 0 -> 7090 bytes 9 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 texture.jpg diff --git a/imgui.ini b/imgui.ini index 1ae7577..9a7500e 100644 --- a/imgui.ini +++ b/imgui.ini @@ -7,7 +7,7 @@ Pos=1645,8 Size=259,200 [Window][Material] -Pos=1646,214 +Pos=1648,217 Size=262,299 [Window][Fog settings] diff --git a/includes/RT/Object.hpp b/includes/RT/Object.hpp index 0bff2ac..583b126 100644 --- a/includes/RT/Object.hpp +++ b/includes/RT/Object.hpp @@ -23,6 +23,7 @@ typedef struct s_Material float metallic; float refraction; int type; + int texture_index; } Material; class Object diff --git a/includes/RT/Scene.hpp b/includes/RT/Scene.hpp index 9a8d2df..49b93fc 100644 --- a/includes/RT/Scene.hpp +++ b/includes/RT/Scene.hpp @@ -106,6 +106,7 @@ class Scene void addObject(Object *object); void addMaterial(Material *material); + void addTexture(std::string path); void updateLightAndObjects(int mat_id); std::set getGPULights(); diff --git a/includes/RT/SceneParser.hpp b/includes/RT/SceneParser.hpp index 142803a..59cdc0a 100644 --- a/includes/RT/SceneParser.hpp +++ b/includes/RT/SceneParser.hpp @@ -24,6 +24,7 @@ class SceneParser private: void parseMaterial(std::stringstream &line); + void parseTexture(std::stringstream &line); void parseCamera(std::stringstream &line); void parseObj(std::stringstream &line); diff --git a/shaders/light.glsl b/shaders/light.glsl index 9eb603b..e59ab7d 100644 --- a/shaders/light.glsl +++ b/shaders/light.glsl @@ -105,12 +105,12 @@ uniform sampler2D sphereTexture; void calculateLightColor(GPUMaterial mat, hitInfo hit, inout vec3 color, inout vec3 light, inout uint rng_state) { - // if (objects[hit.obj_index].type == 0) - // { - // vec2 uv = getSphereUV(hit.normal); - // color *= texture(sphereTexture, uv).rgb; - // } - // else + if (objects[hit.obj_index].type == 0) + { + vec2 uv = getSphereUV(hit.normal); + color *= texture(sphereTexture, uv).rgb; + } + else color *= mat.color; light += mat.emission * mat.color; // light += sampleLights(hit.position, rng_state); diff --git a/srcs/RT.cpp b/srcs/RT.cpp index 5b26318..3fc59b1 100644 --- a/srcs/RT.cpp +++ b/srcs/RT.cpp @@ -79,6 +79,11 @@ int main(int argc, char **argv) glBufferData(GL_SHADER_STORAGE_BUFFER, scene.getGPULights().size() * sizeof(int), nullptr, GL_STATIC_DRAW); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 6, lightSSBO); + GLuint textureSSBO; + glGenBuffers(1, &textureSSBO); + glBindBuffer(GL_SHADER_STORAGE_BUFFER, textureSSBO); + glBufferData(GL_SHADER_STORAGE_BUFFER, 1 * sizeof(int), nullptr, GL_STATIC_DRAW); + glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 6, textureSSBO); GLuint cameraUBO; glGenBuffers(1, &cameraUBO); diff --git a/srcs/class/Scene.cpp b/srcs/class/Scene.cpp index 701dbb1..22d4383 100644 --- a/srcs/class/Scene.cpp +++ b/srcs/class/Scene.cpp @@ -208,6 +208,11 @@ void Scene::addMaterial(Material *material) _gpu_materials.push_back(gpu_mat); } +void Scene::addTexture(std::string path) +{ + +} + void Scene::updateLightAndObjects(int mat_id) { for (unsigned int i = 0; i < _gpu_objects.size(); i++) diff --git a/srcs/class/SceneParser.cpp b/srcs/class/SceneParser.cpp index f68aab6..50fe81d 100644 --- a/srcs/class/SceneParser.cpp +++ b/srcs/class/SceneParser.cpp @@ -30,6 +30,7 @@ void SceneParser::parseMaterial(std::stringstream &line) float rough_refrac; float metallic; std::string type; + int texture_index; Material *mat; @@ -39,6 +40,9 @@ void SceneParser::parseMaterial(std::stringstream &line) if (!(line >> type)) type = "LAM"; + if (!(line >> texture_index)) + texture_index = -1; + mat = new Material; mat->color = glm::vec3(r / 255.0f, g / 255.0f, b / 255.0f); @@ -54,6 +58,8 @@ void SceneParser::parseMaterial(std::stringstream &line) mat->type = 1; else if (type == "TRN") mat->type = 2; + + mat->texture_index = texture_index; _scene->addMaterial(mat); } @@ -122,6 +128,16 @@ void SceneParser::parseObj(std::stringstream &line) obj.parse(*_scene, glm::vec3(x, y, z), (1.0 / scale), transform); } +void SceneParser::parseTexture(std::stringstream &line) +{ + std::string path; + + if (!(line >> path)) + throw std::runtime_error("Texture: Missing texture's path"); + + _scene->addTexture(path); +} + bool SceneParser::parseLine(const std::string &line) { if (line.empty() || line[0] == '#') @@ -156,6 +172,8 @@ bool SceneParser::parseLine(const std::string &line) this->parseCamera(ss); else if (identifier == "OBJ") this->parseObj(ss); + else if (identifier == "TEX") + this->parseTexture(ss); } catch (const std::exception& e) { diff --git a/texture.jpg b/texture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65e61c84648d6c37ac1dd17684f1cd90604f9bd7 GIT binary patch literal 7090 zcmZ9P1yq#JyT^Cw5LimOQ()=tkZzU+m6pau8tD|Ir9nV)=~&VQi3OxXa-|lP1_1?W zF2CPB_kZra^S)=^^POkrdFIS{<}>r&FWqkdKw4^=Y5*V*002HbfctNNXaGJAE*Tja zB{@0SFpxg9X43)jthjL4kkNKQCDD-=_an-S+}W z@c>0Yc}yTH0D}~WNeaA20_Y#+hz0~iY**ba?F<2G=mnoM*$vT{u`SV zpa9rEMkFW5K-m&pE2f>-9%ngf&ddbS)+o&9A!Hn3nTa2#cnD2Y+RlU!K{3zZGH!8Y z98(OmO7aQD>=$gpqQ~7aX6ml#3y3z%@VCr#Z!xx?Yu*FS@K@B+6UlTziBN-3c5=F# z&nArZtU!*LsyW@ySq}SMM*TnQp~ExG^In@4sLXg@)J^Y8Fv|(;3J`r&YvywOBFVnR z-zk&zjo_x`ju7^tkodHcS&RgigQ<}wgYlx*=DB9gbE$f>mb=-!KK}k}X#q+d^5MZ; z*IAtUB;oZHI6D+f5f?6tIif*Y$QZhEpa z$dSYSRweM=BIx6-?des(5EtXB+rwfWQ+s{sl&YbQBw68N8DdwA0~ua~psuy2JLB@py-Ht6wBu6;*5t9Junc< zi;SMlhvSeaLKj`$>N*=hC7So>mpp-!TEW>`6I>?m*}1q1g=BdG`t>_Uk5Z*RxaExs zrbAb`I6N_pjA?U*ix5>1i1SL|7&+1`Rm(_ETq{@`y(?dQ| zX9X6`tCVx}NzK$_aR45N#<>U%YyFwJ&cCdol{}Z!ww{%Y#5*^JI_H<>e3voQt0D1! z>nnngi<7vv-`cGnN1taZZ*CiNtgIaCw0y% zC|SpeRIxt_SJ4-l@F>Il`hV@F?6knBk$Xx^NotQ65P|3OfykjnBSsUY!QK?`*|B!qT9?ax6F# z_PFrC|9Rg$aX$uAVP_!@>(B{^l|3FmdFFhID8^4cTk1s0oIPTEM_TLqHvx~$S6^2a zUIUp^km8Xap`K_}1nTgVq)P>&Jj zZ?RWjlgQjvCqxdMeB_4HR)~90T?U@#V9HkE693D9ocXf3GU4N8AC><@H6`5zz_l97 zQud2B>3go}>v!&DUs{JKW9djV>!ys;_1=H83!swRk;b zWWTzl;%6<_S!Sz*1#qJdGEQ`_;Y;gJ{`yo{pJ#A{|7mY*ri<~x@ZWs^zwNsf>cs}t zZM_CP&snd%34hDdej1tHZL%`7kXRoXxZ1+%=+}wvDXS9Gw?c z&1FsVOe|`0Z;kh+eX=8+JpXDZ)@o*j>mBO2R-)S$wDe1KCn;9&MmOb;<2<(~42^m_ zI*?X-VB8ta3)~|B&qZ$cvQM_XwsxzpxqyLe*4wPa!bgRkECM9oT%!g6qM|rMJK^#! zwB8nw$SUk!IRd*18YJ>X1NQTlBa4zM-q`xCXph+oSFk z#0z;r`KN=lGVXUK&79>U|8&VT#!>phGcKWW)Hj{ZBhexa(Tf6eOZwBN+FL(~<_vbYVr(qG2b^k+1L3Q-Nb^60uEu+&o`cqNre%i}SG^IY zObD`tPb*2jhTmEy%;lE$fX;HZN}lUA-c~wOkBRP3rx5CG2bgKMnPg}B!c=rN^$+q=tBasi*VA^pZjG@>ZE;=BVW$3Bohh0Q(@zSI$9Z+O90t+TIxZepSA4!vLApnk3E?>x(c%NgQZF|rbzyfCj5AJr5dypxf>V$_lA*S+z z@AkRu8aOkZBLRxxVJ!P}rN$5DjPw`Bqq`^gFU zl*T0Zh@6Pm4cLkKZz);Zg_X*Y-xh(>7$A4$fX%;E#34p2b{Q#jCnf zE+Y$1d@{W>UbQVWtX;&LDgq5$W79_ZBqHnDJRF1;Zd@FML5w7_~O7sp%=KC%>f~Y)AB*rcV zker{4?S#)hRx`A2v3;ed`BIapG~W+)!%34#Z=u`U;R@g+!BCC;FtS4Ra^i6j`No>| z(?Bmq7#;IxqGTfAVI^ccjgSAb%u3N?=%=c*fv2Wi)`#+g?`|I*iITimuZFG4=9e8j zSzL<}i8=Zm;*+C?RrQmK4`u|3ula6CXWUrx+K91l)42}>)dMb>EtTSX+HSHEv70e_ zyo1INrbYNUSFnj?QMJD=v^kklzE3jcEZ#fy+uM!{YcRu+!HM}*zQJM!iG)Wuie6cX zFWwFa7Y;Zn;LbhYWh3id>Amc-c@ZI9I^CwxBBXEQ=t7Cl|8pR{R)$|h8qfX0p^j6* zMZOG9>TxV^z13o+;woQqw7MbD9xFxYY|P{70&f$BrGa?GfmQBA#nyicDcB6scF*1$ z2a2DgJA;&*_s9ND1ev=FXu>pCyR+ASM$0{Kqggbt zSnz;&(aaAY+{T>tSwAO9_^I@nm7hnJv2&oO(bG13?8BL1jh2YCkl~;{t|w+-ETSKb zHg5qbtm>G&`J}NXCYR#n76VH=7sHR57e2h`Fh_*)5mXSTgE_BgOuuotQ_UQW#d^%z zV2E->PTD&wAVO_I?KJ1yY7+%GlNrfi-1B}--9g!!$Y(sAwOCyzWl%#N$qb*00o|SDm`pgWvUpU*Ya(` zjjGxOegy-`D?v^!z7z3A1kE!U#{*MA$1e-R0Ad52^jbe+vO;MJ*zCKAaCqUfeB`sa z40%6@3wmXI(kGz9?MeWXGTzs5C&eg<1A9;8X;a;__c%W;c%Py56RvVuS0+SraOhWd z)8J6=NUC;na}YSV@z0Gg7WwD5;v&^Stz2JSz)sH7diMb2OUQ`5UhVFuzC1nBJa}40 z-MQ`4Mx4c};n;zsf<;MJ?;QBhnMLeDh%AGvXWiQ(s)$ZzxebkUYem-cDBj|)Rn|(J z8`h^hrLE?`__D33F~2maoUL59Zqu1TncOZ?%W{|kcR(C?fnZ@sCbx8T} z@x}HhqZc%&r*V*?!pMzZIFOJ8lrBu4x6Bxaah5qQ0!qJ8bj9M_)`J|_R24Extuo)R z;^;NcARepgY-(MwFlPTQd|8kV<#914DVSv^b;e5dC(EmAF~5w+dH&;_jJozSDBf)Ih@?;E3%lx+IofPO|HVW`F&2~Q|t^+Kr=ZEib+Fw}YPquW?5&5q zPOFR`AATBK>#ZA6MRObx+)A{(y#L1nIpO%Rdwp!BX9$5?h;3-%_NTj z;hL*YQg=F<;l*gpV&mL&`vy?Q{sbC!`TUo5cEb3Vl;wF~%gcP9S>u;@5)fVw339ZQ zI>2{-P{g|ZD0l6p#hRR%oWNVHdq5TZ512niej520hP}m+LD*F6HXmbJt=A3!_Qz}qQj6@j5)N1K8^|v&IY?ua(~j!P>rAH zo2~MDN9Nf3V!UX^>`)G&i?X{bw;`5)6yfFT-?ArO4E%;n8ZsrgO{|{Sv5GaWG@0KK zlrC{5_H+vW?(CnaamBN?=s_PqM7j1v>_?hjMgtmii}hra?t5lt;z`{=n=4IDPunUf z%>1?$p3DlXdWuKn7DlKRRX6hcc^iRnLH$Bv5t_!1_MJz_3oKAHOVBWWc|$8=c9` zVJ7XU%QT-4)g!Q|Lzdt@9EXdS9 zW@;rH(!Xb@v5pNVdYAl4fuoHMR>-Y2kyXG(y{1vA4C;A@emD{UlpZlezJhpjBR{)B zGPPzm{2-sQI$j78bG@3VY-Dtsx_D=|k-xTe;j@y^)bf-@PO|15VIC0bobz@A=a<5S z1O&@HBrJrC=W9gp^AIrU7NRh1ISaK^jk<`FFDaY`tYC3#IdS`E0vtyejo5F=&AVtA zvW>7W^lH{hB&*cuWZYlrim!C5fui}N1RvIo{Bj^42S_)*@=Axr$Y(C^%|}S%ndYoz zSmoadj!hqI@k;l@f~%E$#6Gl3c0mtR)*{3E*es)&1)Jl~l0#x(Bv*C&JwO$hMpGEP zf`7VFY_u#UEZgxo4NLC=E9d;oy17Ox)On;vVg2{gV!7nb%=7bpEl@XJMOLLG3to)P z|JmXHif(&{2xO@r&M)Ur{5Vkpf>Ua6O|}}1-^P4?5O#G+-z106Px1k59}GP|qD?nf z7Bo4rzWsS2#ye^08RV_W%E{}3vxKS8ZDPs`dalIEY%U-q*3#wgsVnf3FeZt;Y%vE7 zGaUIAt_=G0DB>Y^EZ2rjC$!2%{?ZRiguAuqb~phpYtu7YpiY@;2>dOvS}L2Nv+hA)Ti1w{gXZOJ=K&DvOrm%6f0UaZl8bdpo2w!g!e|nF)v1_R`U01% z`BuKBH(M6^?yG}83OJd#x#B7)$?8zIy)97HndIMmxHL5AzMPtk}lYCjNq4GcN;ZsH3aG_1mtoW`SM zE=MGG%or@mD{j8*#+d6mkFTNnQf`w-k--`{EBB?Cm|39AbSJ)g6>2)|WKRY(*l)n%`URcwW7pS$fhK)|P->f$|zxh&_JotlV z1ZzrJXVt(C>IM5P9l{*+Bp-Uj4`{>EU{@0P>6y@x?3RzKCKQ=r*sveMNGcvwageQa{Q1Zi+yp62+zL++5I%L=hO zyE0q{RcVq1YLGA@(4*&T5^ijl?(k0%2iric*MbY%CPQnw5!)k1=6P;&nOZuV+|R=3 z&g~=kv*v62E-cSM(l1@)%bom+Y+Vu}vuInjGPwqG>%h)zf$oknzjl3j$#vtj)MyCH z4#Jw-$tCmp!RS&>uUFO^Y+t~n*OJQ{>VCfiKb-vj`iw%GTo?NxK>V|wY+LaF7cXy5 zmHNN=$qqY+p^&13za+O(`j6#{&vVWQdiWUdAbGhE4y>um` zbN}T9jQ1JZ2zb~}scty#h<;)O0}cHX!j6Rl&WR3c+rW%9Q+glZ28k+d<#NT;t2RHM zs_#EHIb^Nn)Ya6fly@_GMsZh$e$C8zF{m89iL62?I0cN_neX{N9gfcWG}F&Eb!N%) zXPx7jl%J4>X}(oUN3Gz5WtzPcmk2%k(Q$^aDO^|1P_3@BR_?7#lkv^cF@hm3^hT9? zQ-sNJF3!n$e5~uGZ?_|Ei*dWu04#GmAos6ykap9Av!8Hs3KCH`RLHBYPQx|hEUs^J zOe#j?S~SO?JuObsX*n8F21NL-1{pTLX3U}eSFn=TKc54NjsCGz6LeW3893P+_HO36Y!ds*tbL@+1-UPnv>Vh z4eK6|Pxy4V6d*2AqiDv^_x<|M^EXnr{V|+v4$G9({8MOWL{BD*PNBEl2Ge<*HoABzBYppt&wg{21Y`MRa5D$~@$G^L| zHa>eBlQ{?#RwBifDgnp#%RdD=|5z~8#Fkqe1(s9NJ9HRB(}M~=&UE^=Z{UM$Qr0OZ z7!q}3Er&3Xc=Dq&AIyAAhOP_pNtUM1N080A8@6|ctmNPW4`mzKd}M+rt7PKNCyN1% zNFY5`6h>dEeM!p4MdaKOq?|nW;I4PNJ=o||Ck~G2J>bi5juk^u)A1bh?8k*(3>8}> z334YpaIYbhBJ{_tf#By)wcAFJ)$Di1exzz8@kBynH>@`L_iqSt1MUMH-7?ZY>vaft3!SqVNOa1V{0^+=yC{58DIz9CDUOat$ zgF}+JueIBU{S34KAmi_AS;ZK#N;`n~V3;qNd