From 1735bdd3fffdf1adfabd34137f8e1c9504d79dab Mon Sep 17 00:00:00 2001 From: blobt Date: Mon, 6 Jul 2020 22:12:03 +0800 Subject: [PATCH] =?UTF-8?q?=E7=82=B9=E5=85=89=E6=BA=90=E5=92=8Cblin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/shader3/v14/.suo | Bin 23040 -> 31744 bytes main.cpp | 4 +-- res/shader/{pointLight.fs => dirLight.fs} | 0 res/shader/{pointLight.vs => dirLight.vs} | 0 res/shader/test.fs | 31 ++++++++++++++++------ 5 files changed, 25 insertions(+), 10 deletions(-) rename res/shader/{pointLight.fs => dirLight.fs} (100%) rename res/shader/{pointLight.vs => dirLight.vs} (100%) diff --git a/.vs/shader3/v14/.suo b/.vs/shader3/v14/.suo index e77638feb3233e4723e258005c8d954ca1b22016..56039f565f52fdf821d916836ec7c954653ad2e6 100644 GIT binary patch delta 2127 zcmbtVT}&KR6ux(uElWEK1MHR-7IrDivcML0ftDY^Zu#r-&lXcP?Sn|M#bPyK5c{JJ z#up<-+0zHD51M_|n829$C<%?}gRwDbd@*Tkeb5-2m=qF-k@}rwm#n0THQvd$=iGDW zp1I%oxodtY%?&l3l2NQii7@|mvoy@E*T2;biHmEtLvB1MkQZ2NXLMs6lV@{_EsRQhZ$H8rTs5oV- zg7g4eSaU$`0m@Tz8zk>3gM_b00J0`!JDifdUI)D%2mxWB0cZr8fFrW=OB6kexFa14{$VcfI|T9*;~(u0uAz+x=mY=LYA z+JGkjC$JRLC4Hzmtrh$4GVbiMN%n+X2FY-aI3)YyRIucP)0%UHRu6~Ca6ux=DC&)m3a{H~)A5UwkDiVv>mB@&wcL=MCj&eQ=1nKxN|J<;Nhkll61)@^J6$hHSV!=Rc#x! zAbGV4-esA37ox|7`p;Kt1LXDxG_Jf|rx;baijp<4=D)>G;(?oXF4vu-nysjU0II-+ z%BWtb>=sdRQcQ{o;G!@@H>4rP#gv#9GvXBFq?p4cQ$mqCRdd6YH^W`?>nQ^SwnoL6 zn8TKruz4KrCdJd3T@+`<%dkf=pAzT9d11hziz1_Ty6FnqOzgFT{fT6=zV8duXk!ad zM68FDeTjZ0Ueo1}918BS9Wq7@a?hPto@rf!Rq~CcWLk~dQH?jI8h=yjMdg)Ft9~$FdhZ{3&=6mKZ}2Pi-ck2&SzqMu8uZ-I zr-_pa9cXldL69Q8W_`H&n}-j6z4}h&sodUi83W|N=-EE;olY|(V!&S)a54ACd+8PwL}WCTCZh?@DGK@dadn_ zO81VvMe_Lb^l@j6bvE*?lpZVG`AJrO4D_~#wlV>wlJ54@Kho;Sdgj(%%Id`p(Hkgg z6lX-Q=oBNU!U^#T9wG1tYJJ^1FR7rt-|Bx-laK#Z>u!%np-9vuJ-VO1JE4<*pqN&o P5sLHyL+y06@9n<9#6lE2r|pC`s0laua_^jb&bjA1kBKB%L{uTF5w!?(%VA*5RK$wqb&ZiN4t7Pk(;1qpBhxuF13cML3=|I0*%xm} z>P<70qTgsujQ+=%GGfTQq_8LET7<&fi03@SKA0D%+-N}I*WkXr*ryPeP5D2NeK_j! zgWu@`$ra)cq6(>zda8Jdsuh7Tlu+Ikshn^IIkJ(Zsvr{>~Nb5#KFIee=VpMEq$*d4Ebr;xoFLU9yDXq}~JZZVe=bfWXM>zq|{K zibsvH`}V%xnva!pQF|9p=B6As_LX#aMIm@=^y;SZazZ68bd@e3&> zrCC$Tk_Tx}`_<*R@F0zjc9=cf$t#nn_}2wcvqcYEP1prAf;6_uB}m>(Nc2b9mHMzJ z1fQ1TWU$#DG-PHr6|pRd^DNfQ#d>uw1|tjukHGgUJ#x>bS86$a{Q`qGLswy7qyg+V zXJz-$d&cbY`tTDqnC{lg$vXxP;-jK0HpE%1fh$wpR!OQx)eYRW=e%s<>%+C5{g1v) zy%ug^TCH+ZqnUwt)C8eP58Q8>%Qk4Un}1m!kFNIln=gM#TonImK=mMMl$l+Mju1~j oy6kMQ6R_c)VXZLkJiE70+SEA7o2_{qaAGG<1M13hnMsT04^-gzjsO4v diff --git a/main.cpp b/main.cpp index ebdfdc7..05832f9 100644 --- a/main.cpp +++ b/main.cpp @@ -96,8 +96,8 @@ INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ float ambientLightColor[] = {0.4f,0.4f,0.4f,1.0f}; float ambientMaterial[] = { 0.2f,0.2f,0.2f,1.0f }; float diffuseLightColor[] = { 1.0f,1.0f,1.0f,1.0f }; - float diffuseMaterial[] = { 0.8f,0.8f,0.8f,1.0f }; - float lightPos[] = {1.0f,1.0f,0.0f,0.0f}; + float diffuseMaterial[] = { 0.6f,0.6f,0.6f,1.0f }; + float lightPos[] = {3.0f,3.0f,0.0f,1.0f}; float specularLightColor[] = { 1.0f,1.0f,1.0f,1.0f }; float specularMaterial[] = { 1.0f,1.0f,1.0f,1.0f }; float eyePos[] = { 0.0f,0.0f,0.0f }; diff --git a/res/shader/pointLight.fs b/res/shader/dirLight.fs similarity index 100% rename from res/shader/pointLight.fs rename to res/shader/dirLight.fs diff --git a/res/shader/pointLight.vs b/res/shader/dirLight.vs similarity index 100% rename from res/shader/pointLight.vs rename to res/shader/dirLight.vs diff --git a/res/shader/test.fs b/res/shader/test.fs index c90c75b..598f0f5 100644 --- a/res/shader/test.fs +++ b/res/shader/test.fs @@ -17,20 +17,35 @@ void main() vec4 ambientColor = U_AmbientLightColor * U_AmbientMaterial; //diffuse - vec3 L = normalize(U_LightPos.xyz); + vec3 L = vec3(0.0); + float distance = 0.0; + float attenuation = 1.0; + + //light attribute + float constantFactor=0.5; + float linearFactor=0.3; + float expFactor=0.1; + + if(U_LightPos.w==0.0){ + //这是方向光 + L = normalize(U_LightPos.xyz); + } else { + //这是点光源 + //model point -> light pos + L = normalize(U_LightPos.xyz - V_WorldPos); + distance = length(U_LightPos.xyz - V_WorldPos); + attenuation = 1.0 / (constantFactor + linearFactor * distance + expFactor * distance * distance); + } vec3 N = normalize(V_Normal); - float diffuseIntensity = max(0.0, dot(L,N)); - vec4 diffuseColor = U_DiffuseLightColor * U_DiffuseMaterial * diffuseIntensity; - //specular - //vec3 reflectDir = normalize(reflect(-L,N));//-L是入射光向量,通过reflect函数求到反射光方向 - //vec3 viewDir = normalize(U_EyePos - V_WorldPos); - //vec4 specularColor = U_SpecularLightColor * U_SpecularMaterial * pow(max(0.0, dot(viewDir,reflectDir)), 64.0); + + float diffuseIntensity = max(0.0, dot(L,N)); + vec4 diffuseColor = U_DiffuseLightColor * U_DiffuseMaterial * diffuseIntensity * attenuation; //specular blin vec3 viewDir = normalize(U_EyePos - V_WorldPos); vec3 M = normalize(L + viewDir); - vec4 specularColor = U_SpecularLightColor * U_SpecularMaterial * pow(max(0.0, dot(M,N)), 64.0); + vec4 specularColor = U_SpecularLightColor * U_SpecularMaterial * pow(max(0.0, dot(M,N)), 64.0) * attenuation; gl_FragColor = ambientColor + diffuseColor + specularColor;