From 756c2326d4e5ece3238c1242b4863e4da4f7f46d Mon Sep 17 00:00:00 2001 From: blobt Date: Thu, 13 Aug 2020 09:07:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E5=B1=8F=E5=AF=B9=E6=AF=94=E9=9B=BE?= =?UTF-8?q?=E7=9A=84density?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/shader3/v14/.suo | Bin 50688 -> 50688 bytes main.cpp | 73 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/.vs/shader3/v14/.suo b/.vs/shader3/v14/.suo index 002eae871ed0e9ae4c55ebe95cf3886a93fa2951..a25c18f45700f1f97d2fd1e1697a017ed9abac70 100644 GIT binary patch delta 1756 zcmc(fZA@EL7{~9qeIK{wtsO0NaL2o>V_m6`724gphAk|E6_IV(g7^}Y#6V$nQ)IEs ze!@!VeKKUzE$kW%E`S?nZjs=q5~IT}%d#yn)NjY-kESAi4Bq{!K#4fv5}o+c}P_LXIG1NGVc+ zh=>mPdwqSq9(xUP5OE+|kY^Bdty^G7T_kT&zph7vuwgV~Z$vT>(}s-&XX5(~>o#Jkve1#!t5UGvycYFi};Ye$bOE4H`Lp*bMT$TrJ4bYtB7~% z4M)*&49R2FLR9mEAw-QSF|*|)VQjgqF)7leVYbcEFdLIbjijVuHYN>|rDU@# zmFP&9g-xbKTLtpJ%CeQoLZgO3t?Ud4?DrZFwiXDgN@>^`CA?cl|FUR#c_sq#tztMa zZ3p+f51Mb5!gn7W&~S}>Sem8_`T8yL#J@z!O@GXAyBCNqsg$*vn zwX~@CAyIO8rJR?or?XUf1OA`x9J%r2D1-BtuARQWVvm53bJr{OGYaB!vs zoV=5DTtx@{9!$-hBZlgB)_sJKq*?-Ua(bRV5!zCrY=Z}Kg_`|P{ zVO9$`x2;gowVc5eC7ARPMOAJc2cZRt)=OWiDBt=75!gc6+4* zLxJrbj7&DAl2^KT<#}Gt4+!iG@<=KN4d=&*?D|Tdt`#cT1_ufqsN`XR3CWh78lg!F z34iW8sAlS?sey^wL=X!n^^Ixqu=?U%SS<1??b_MsZ3BtH(xF-`NNz3!$yx{9BTvyQ zBkcqdEfSUF1fPK`=W;QFiW`Q@y+KIyWI)yh9ju(Y4imj+Gf^+XG-It>+8k4TGf>YUA*`G>)eH39^G%!p89w$DpIbBY-%U@T!vxX+Z2?9esO}GpV42)IjbX~pu zFI1nBPe=HZW$@cr?nYf2sCdT)6JO|)k%!*(fMx*a;`JaYS_m}?RyHNuEbO9FAxwy$ z`>x)GuyT(a1~Tr2H7N%@BKY6ymd88gaUY!V+tE@Ccj*pTnbO1PxIjD@TLBYu0(HKB zPpzCaL2$$j<||z!3S{~?j5uoXAg qxCt+mXYumz;c?T;pWFwRV+4!nARHLyZOQ_fy^-K)!Y&bIPWT6e%rr{? delta 2082 zcmcgtZ%k8H6o2=%v=rJ}v5Xc9JOr^Q3gW`Zru7Y;j5!BX(YU4ZXS5ETW0e+$$h33# ziMr5t+#)7h@JSZ4nFabXqi%6^y2Ke1VN3k5B?hM7mbfkB!?I;_=aiN~W3q3%&F`Ii z&pr3vbIjy}M1%oB*Q2nIU20fJM`0nE8Wz$C zIF}k0R7YBh9vc}Qnn&FKOJq!Vlsae_(kW(MDdFXUe&&M11-DGB7-uL3bUtO#pU90p7}B8GhoZ7V@Mvs);KH9*H=w?*pwZQMF)viJ%xUI!d$r~WJrWtP7D`9R; zlZnxLDMTdqf#BL^BMmARDdiF^{2pk4nZv7~=}b-r(SjkQ2>8!<;QZHS%i!RVn%a#u zRrp(1T~%2n_l97$-)1rUys!G&yuP5XGq`?Vpd5bfE}#W0*)z$OIurNU>+q#|_#^L@ zwhWI-dauqoj4bN?hOu$Db+QFwVpA5?1ahaLl1u#H%dU5T-|vFZ{uuOhmB84$1yC!w zEGwlKF6&*B?XNAf-1}rW?*|x>E~TfY4MNKuszY)zBkh_xD?0=bZ0FOHPmn07&e@Di z*{xGr`Dp!3mUI^5HlGkmNgLBD+j(UhFSp!GW!fFM&Tq*44NnUou&G-Ps65uY&73Aa zeg^sF$mBRGacNu#!|n#pdzEY<0WjU~WG5*dhCo+GkKfn5ejiNrm$7g>MS^IETb#nt zUMMRyv-m8Gzdxc)yZBGFg;oUQ>{;8 z;mD8o+cjB`Hn15)MF-6T#tbUaL`P{!d5434uTT_3-lt zZjgiB@afnN__ntj9-hs@-7}zQ?+x{aXA`3`6K|LCOMhlWvH3hB(WlSa6DxG~(YV?C zXNfUXC^$StZ%JuvOk@v3$e{a<+{X13SG1#A7k#xH%dMF*t55zzX(? zBI}fKrbJluOvnnMi&_{u>VO}Qw!+cu+RVNhn@PuN&B6lJf5u`2>R#BIkW1a(-0.4f, 0.0f, -20.0f) * glm::rotate(-30.0f, 1.0f, 1.0f, 1.0f); glm::mat4 cubeNormalMatrix3 = glm::inverseTranspose(cubeModelMatrix); - - //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, (float)viewportWidth / (float)viewportHeight, 0.1f, 1000.0f); + //初始化fsq + FullScreenQuad fsq; + fsq.Init(); + + //初始化2个fbo + FBO fbo[2]; + fbo[0].AttachColorBuffer("color", GL_COLOR_ATTACHMENT0, GL_RGBA, viewportWidth, viewportHeight); + fbo[0].AttachDepthBuffer("depth", viewportWidth, viewportHeight); + fbo[0].Finish(); + fbo[1].AttachColorBuffer("color", GL_COLOR_ATTACHMENT0, GL_RGBA, viewportWidth, viewportHeight); + fbo[1].AttachDepthBuffer("depth", viewportWidth, viewportHeight); + fbo[1].Finish(); ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); - glClearColor(0.6f, 0.6f, 0.6f, 1.0f); + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); MSG msg; while (true) { @@ -163,7 +182,6 @@ INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ DispatchMessage(&msg); } glEnable(GL_DEPTH_TEST); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(gpuProgram.mProgram); @@ -184,25 +202,64 @@ INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ glUniform1f(gpuProgram.GetLocation("U_FogStart"), fogStart); glUniform1f(gpuProgram.GetLocation("U_FogEnd"), fogEnd); glUniform4fv(gpuProgram.GetLocation("U_FogColor"), 1, fogColor); - glUniform1f(gpuProgram.GetLocation("U_FogDensity"), fogDensity); + + fbo[0].Bind(); + fogDensity = 0.11; + glUniform1f(gpuProgram.GetLocation("U_FogDensity"), fogDensity); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUniformMatrix4fv(gpuProgram.GetLocation("M"), 1, GL_FALSE, glm::value_ptr(cubeModelMatrix)); glUniformMatrix4fv(gpuProgram.GetLocation("NM"), 1, GL_FALSE, glm::value_ptr(cubeNormalMatrix)); cube.Bind(gpuProgram.GetLocation("pos"), gpuProgram.GetLocation("texcoord"), gpuProgram.GetLocation("normal")); cube.Draw(); - glUniformMatrix4fv(gpuProgram.GetLocation("M"), 1, GL_FALSE, glm::value_ptr(cubeModelMatrix2)); glUniformMatrix4fv(gpuProgram.GetLocation("NM"), 1, GL_FALSE, glm::value_ptr(cubeNormalMatrix2)); cube.Bind(gpuProgram.GetLocation("pos"), gpuProgram.GetLocation("texcoord"), gpuProgram.GetLocation("normal")); cube.Draw(); + glUniformMatrix4fv(gpuProgram.GetLocation("M"), 1, GL_FALSE, glm::value_ptr(cubeModelMatrix3)); + glUniformMatrix4fv(gpuProgram.GetLocation("NM"), 1, GL_FALSE, glm::value_ptr(cubeNormalMatrix3)); + cube.Bind(gpuProgram.GetLocation("pos"), gpuProgram.GetLocation("texcoord"), gpuProgram.GetLocation("normal")); + cube.Draw(); + fbo[0].Unbind(); - + fbo[1].Bind(); + fogDensity = 0.31; + glUniform1f(gpuProgram.GetLocation("U_FogDensity"), fogDensity); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glUniformMatrix4fv(gpuProgram.GetLocation("M"), 1, GL_FALSE, glm::value_ptr(cubeModelMatrix)); + glUniformMatrix4fv(gpuProgram.GetLocation("NM"), 1, GL_FALSE, glm::value_ptr(cubeNormalMatrix)); + cube.Bind(gpuProgram.GetLocation("pos"), gpuProgram.GetLocation("texcoord"), gpuProgram.GetLocation("normal")); + cube.Draw(); + glUniformMatrix4fv(gpuProgram.GetLocation("M"), 1, GL_FALSE, glm::value_ptr(cubeModelMatrix2)); + glUniformMatrix4fv(gpuProgram.GetLocation("NM"), 1, GL_FALSE, glm::value_ptr(cubeNormalMatrix2)); + cube.Bind(gpuProgram.GetLocation("pos"), gpuProgram.GetLocation("texcoord"), gpuProgram.GetLocation("normal")); + cube.Draw(); glUniformMatrix4fv(gpuProgram.GetLocation("M"), 1, GL_FALSE, glm::value_ptr(cubeModelMatrix3)); glUniformMatrix4fv(gpuProgram.GetLocation("NM"), 1, GL_FALSE, glm::value_ptr(cubeNormalMatrix3)); cube.Bind(gpuProgram.GetLocation("pos"), gpuProgram.GetLocation("texcoord"), gpuProgram.GetLocation("normal")); cube.Draw(); + fbo[1].Unbind(); glUseProgram(0); glFlush(); + + + + glClearColor(0.6f, 0.6f, 0.6f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glActiveTexture(GL_TEXTURE0); + + glUseProgram(fsqProgram.mProgram); + glBindTexture(GL_TEXTURE_2D, fbo[0].GetBuffer("color")); + glUniform1i(fsqProgram.GetLocation("U_MainTexture"), 0); + fsq.DrawToLeftTop(fsqProgram.GetLocation("pos"), fsqProgram.GetLocation("texcoord")); + + glBindTexture(GL_TEXTURE_2D, fbo[1].GetBuffer("color")); + glUniform1i(fsqProgram.GetLocation("U_MainTexture"), 0); + fsq.DrawToRightTop(fsqProgram.GetLocation("pos"), fsqProgram.GetLocation("texcoord")); + + glUseProgram(0); + + SwapBuffers(dc); } return 0;