From f4ab56af4310e4a69c01f3edd75d1db5e0ce1fbb Mon Sep 17 00:00:00 2001 From: blobt Date: Mon, 3 Aug 2020 09:19:04 +0800 Subject: [PATCH] =?UTF-8?q?bloom=E5=9C=BA=E6=99=AF=E6=90=AD=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/shader3/v14/.suo | Bin 47616 -> 42496 bytes main.cpp | 54 +++++++++++++++++++++++++++++++------- res/shader/hdr.fs | 2 +- res/shader/lightSource.fs | 8 ++++++ res/shader/lightSource.vs | 10 +++++++ shader3.vcxproj | 2 ++ shader3.vcxproj.filters | 6 +++++ 7 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 res/shader/lightSource.fs create mode 100644 res/shader/lightSource.vs diff --git a/.vs/shader3/v14/.suo b/.vs/shader3/v14/.suo index e4bb53a58cc1c924e3490392e9e7abd10b15cbe0..1997834a5163bb8ca5e07d07c6d0892a4e16758f 100644 GIT binary patch delta 3515 zcmd^>e^6A{702IwF3Yl6aFIoREG!FIW`f=SbM5z|U)W6aOCnjg({+Wt{vr!~{yq|)zw?lz#9 zj{kHz(>wE-bMATXo_pVU_ndp>%c6Wn3^?tg5N&2bFhb@1tD~c%+&T#y^FGgLlr<;) z_2rNMJZsInY$|_JPFut+>^yxcF4C2vPu>H!lT%D2X{~|eNivHkrnA;1;88l54B&G# z5t2L4hD-%X;7(uy9xx5u3sOKK;A3u!N-HEE%UeElJqUW!9fs)h0?1@g9PO7teg!xI zozRtJ&4E%0xPvN4e6XflAcNkll7-Pef9{5!3GN4rqV_3}Ua$ZJy(biLeNyDbKWH(@ zfayQPB>sDy@p$QcWL`PiI z{9g~2(c$FF8cPq>@+1g=AW#5--Cz&bA22%7_d?kR_Ja`U2S)(~jLyzuP{Ke3$H5EW zWiSBvOfN;{Pat0bKLtMnKL-&o2u^|_a0ixM4$gu%1Yx>x z4$7P0E$}vY2fPdTfZs&r?`V@TCs?;FY;uVI?=eu!cCybbFz_OS5RH;I-l6(u%FOgD zSk7@XTF4|S1vQDx37zll*qd=>=#EAwqHm^SPYUrx;#WZ$_sV4`PFjhk6 zdTqC@U$eT&zhq;3>#7DC9I#OE&>d_k4caS9)(dNd)k2ft7nTScg?6D;SS2(Fr9z|7 zCcNJDooDyoYdE;0ar5w>Hs`$u_ZHnMVdIyN?7+y=gBK64Tw$xI{O*Rr^6bwK@sU|g zLVcdg{Zf4OvAT7W%^w`uWj(JePH8pOe{gZUq7-vYoWM(Z zZ11RkvtPXR-LLIewS8eH8@Ev>a^KCA+HrfG) z6rjpT~^DA@9~N!NX^;*!X_b>8)B9zTEMwfU`M=Yq{O$5-Fb;akQzZY%KK`sX4oO@lVd?H#Gs*1U#75TH_wSdh1>C6hRYuGY6cc3cmCP_k_W!b7O zw2je6E~DCYpo7r|2MS1{leDsQ@wKrzHyJDNdXL+?dhGb$8F_lM68M(n_lO#P^w1}d zPN6e9QfT4csiX{OswwWSui(03-ZpY_|z7z9P`uBN(BDRsO2B)K!`2hTs+FZVNAd`BJ? nQ5rpcG@t77ZR9L7Qs7_Ir zg|tyi(uRB|qai>DfmQ9Msl{KlfzXDl^^Xp9f}(2wY-_`$J-SENP4thVj_h1xCvE^S zDoxszemeJ@d%pYl-E+^qANL`{-C<5>)uLcgibPRZXAt+6mzSxTATC+nCa_Gp70TBY zXV-W9nxvqS%Yh+gh|I&6Of?wgTF^3KptDJVTgQGkL`wzg)0Tv?Jt)nH+K~1QShpbPLh1r?V@Nx4D2fZ{&!J31 zOj}Oyj9syyiuBXB9!-y?FZ|_^1a$Z}_D{#4F*9NGAFJWitt9O4*cUYL8=;5;TeORm5wEDZ~lHG=fI}Vg^C|pk9_q z?oC_b;e<>(U7ry3(?G)&Dlb`*h*zG;{13Y2m1RGq9Cz4@^g8f;(l>n~=c>8JX!sOz6kKZoyqW z$;bWqzv!4xy+fXbFH=XzF7TvH@Hzd;=Ff(Ut)E;?8n1t+YhIn|g!J4rI1{x|@a5loNDp8?FtTH)Q3 zX5y{=fJkYe2i@eCQE5cb!Yj+9G`$2H1-FtTk_oglFv8t!5(a9gwV+)10&dQzLD%o& z&-_w(!F6@+v*#422Qt6*X-^%CKptY@^CDiEVcc^iy!cXc*LvkAKblDT4LIkVyxAZY zWnqWGEfC!1NkZw|IaJ(`RVvB)JhtRJed90uJcQ0M^2DS>`boiY=upe2uRqx=*DQ0J zGWYf$e>V1)IeV?~{GF3=-8vZUAK`~|pkDOxM>tqo^b_$QXUap`@clRF zT_A#UGdqEMEhlCjDup7W=owLys9j_g^@$RIo$iDmPVI%}IgVEw5jB=I#LtO>IkIf3-X z_l5WO-z0?KiQ6Lh4(Q0@^I`mfnN`EO#U=){-%|;y*1r+B)f%Wc+Z2Mrd6kei;QHZ0 zukBqzen)HY*UngeAeBF3frA5$WGkE>h)<)}6D?-ZpHx}5-rlsS^e2C~eROkccY)sw z*A9)rv94m^x^z-ekLVD+k70R!l-Qwppb77W$A8EzIv9AlR|(4A-zSzB_1dGuE?Y~x zwKqS9jzKS2v513@Jli7z+ael<^Mx^>9nZwg$p-etgh&&*QBSGg(}HbU@+yAQBx&pE zZtZly#E=HO?g=u5#zydU>AVgfiL~}M+1h)1t&VmpM0+%31k&9#>q_+1a2~azR1>3? zV}p?wv&oyZL%3F`09~OBmS>}2YABn`1gz2UkFm>PQju}(xN_P3IaqT#T-iAD)W|h@ z+^Vi=vF7b)DQwklwdRAbNB0O~j$^i3CFcHe>B{n9iBrReN8(|9zfw|ygc#Q>BK-b( z5-5Wb|I$LLv+&N-=bkro*EQ7Y_Zn?AjfHGOrK!Sc>(1@y>&q*v>@yk6odq6`zQAHJ zmazjxZDoV5N)xpi*@hDRJ~q$OS#ppyn%TiNhcmaJBfo6O)L*9`H0AB=ZOQGaX#n4t zM!d@S<2Xfz1+P1ago#DQ2YlBJ4tb!Pj3QcfFSF|w9GD?@Lv&Hd(t*5thsK?=MvBO7PZh&36jOGMd zj5GjLBjv50eTIgfdVNQ$E3d7xzp<^{w1+J+)EUcJy~$8o&Q`bS4-ZuDW1aTOdV_1< z4wvU3DHyx4{5k^<~It zN|VzGeX1oAi;GqtP86yWQ2+ zYqdHKds^Ca`dqM3sHKPs4dViSl!Mz`+JnT=h%Hdgox;-S(yd%t$^xC3Eg z`dR34O@-f{%7l?qBd|1=3^Ql#$UojA3%12`gfQ^wLOQ4~6oYei1Jo=g!yEj+E^rr! zFbf<3wI}6)XfR{{^nd0N(UABtwgt=Iv66!DM*~=rT+p0UO%g+%1xvu4#g~eIM#1;n zlcuVb=gtDCC!1m6qRxN#fScjyv1(0.0f, 0.0f, -2.5f) * glm::rotate(-60.0f, 1.0f, 1.0f, 1.0f); - glm::mat4 viewMatrix = glm::lookAt(glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, -1.0f), glm::vec3(0.0f, 1.0f, 0.0f)); - glm::mat4 projectionMatrix = glm::perspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f); + glm::mat4 model = glm::translate(0.0f, 0.0f, -2.0f) * glm::rotate(-60.0f, 1.0f, 1.0f, 1.0f); glm::mat4 normalMatrix = glm::inverseTranspose(model); + glm::mat4 quadModel = glm::translate(0.0f, 0.0f, -2.0f) * glm::rotate(-90.0f, 1.0f, 0.0f, 0.0f) * glm::scale(8.0f, 8.0f, 8.0f); + glm::mat4 quadNormalMatrix = glm::inverseTranspose(quadModel); + + glm::mat4 sphereModel = glm::translate(0.1f, 3.0f, -2.2f) * glm::scale(0.2f, 0.2f, 0.2f); + glm::mat4 sphereNormalMatrix = glm::inverseTranspose(sphereModel); + + + glm::mat4 viewMatrix = glm::lookAt(glm::vec3(1.0f, 0.5f, -10.0f), glm::vec3(0.0f, 0.0f, -1.0f), glm::vec3(0.0f, 1.0f, 0.0f)); + glm::mat4 projectionMatrix = glm::perspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f); + + //初始化fsq FullScreenQuad fsq; fsq.Init(); @@ -176,7 +199,7 @@ INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glClearColor(0.1f, 0.1f, 0.1f, 1.0f); MSG msg; while (true) { @@ -212,12 +235,25 @@ INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ glUniformMatrix4fv(gpuProgram.GetLocation("NM"), 1, GL_FALSE, glm::value_ptr(normalMatrix)); obj.Bind(gpuProgram.GetLocation("pos"), gpuProgram.GetLocation("texcoord"), gpuProgram.GetLocation("normal")); obj.Draw(); + + glUniformMatrix4fv(gpuProgram.GetLocation("M"), 1, GL_FALSE, glm::value_ptr(quadModel)); + glUniformMatrix4fv(gpuProgram.GetLocation("NM"), 1, GL_FALSE, glm::value_ptr(quadNormalMatrix)); + quad.Bind(gpuProgram.GetLocation("pos"), gpuProgram.GetLocation("texcoord"), gpuProgram.GetLocation("normal")); + quad.Draw(); + + + glUseProgram(lightSourceProgram.mProgram); + glUniformMatrix4fv(lightSourceProgram.GetLocation("M"), 1, GL_FALSE, glm::value_ptr(sphereModel)); + glUniformMatrix4fv(lightSourceProgram.GetLocation("V"), 1, GL_FALSE, glm::value_ptr(viewMatrix)); + glUniformMatrix4fv(lightSourceProgram.GetLocation("P"), 1, GL_FALSE, glm::value_ptr(projectionMatrix)); + sphere.Bind(lightSourceProgram.GetLocation("pos"), lightSourceProgram.GetLocation("texcoord"), lightSourceProgram.GetLocation("normal")); + sphere.Draw(); + glUseProgram(0); HDRfbo.Unbind(); glFlush(); - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glActiveTexture(GL_TEXTURE0); diff --git a/res/shader/hdr.fs b/res/shader/hdr.fs index 0c26809..09198be 100644 --- a/res/shader/hdr.fs +++ b/res/shader/hdr.fs @@ -68,7 +68,7 @@ void main() //gl_FragColor = ambientColor + diffuseColor; - vec4 color = ambientColor + diffuseColor; + vec4 color = ambientColor + diffuseColor + specularColor; if(color.r > 1.0){ diff --git a/res/shader/lightSource.fs b/res/shader/lightSource.fs new file mode 100644 index 0000000..8aa0878 --- /dev/null +++ b/res/shader/lightSource.fs @@ -0,0 +1,8 @@ +uniform vec4 U_AmbientLightColor; +uniform vec4 U_AmbientMaterial; +uniform vec4 U_LightPos; +void main() +{ + gl_FragData[0] = vec4(1.0); + gl_FragData[1] = vec4(1.0); +} \ No newline at end of file diff --git a/res/shader/lightSource.vs b/res/shader/lightSource.vs new file mode 100644 index 0000000..396feda --- /dev/null +++ b/res/shader/lightSource.vs @@ -0,0 +1,10 @@ +attribute vec3 pos; + +uniform mat4 M; +uniform mat4 P; +uniform mat4 V; + +void main() +{ + gl_Position=P*V*M*vec4(pos,1.0); +} \ No newline at end of file diff --git a/shader3.vcxproj b/shader3.vcxproj index f834c86..aa60c63 100644 --- a/shader3.vcxproj +++ b/shader3.vcxproj @@ -89,6 +89,8 @@ + + diff --git a/shader3.vcxproj.filters b/shader3.vcxproj.filters index ce15ea6..b8b5d19 100644 --- a/shader3.vcxproj.filters +++ b/shader3.vcxproj.filters @@ -73,5 +73,11 @@ src + + src + + + src + \ No newline at end of file