我正在嘗試使用OpenGL和GLSL渲染帶有普通貼圖的高度圖。 我到目前爲止: 四邊形網格,高度根據高度圖在頂點着色器中更新。 生成正常紋理 實施例OD呈三角之一: http://www.leadwerks.com/wiki/images/0/08/Terr16.JPGOpenGL hieghtmap用法線貼圖進行渲染
地形沒有切線或頂點法線。沒有這些屬性,我無法讓我的燈光系統工作。我猜測我必須使用TBN矩陣來正確生成向量。但如何做到這一點沒有頂點正常或切線?有沒有比複雜的一切複製更簡單的方法? 正常轉型是否真的泄露?或者我的整個光計算方法是錯誤的? 代碼片段:
VS:
vec4 pos=vertex_position;//grid position (only x,z)
pos.y=((texture(heightmap_tex,uv_coords).x)*scale_height);
pos.w=1.0;//to be safe
vec4 P=viewMatrix*pos;
vec3 L=mat3(MVmatrix)*vec3(worldLightPos)-P.xyz;
Out.lightDir=L;
vec3 V=-P.xyz;
Out.eyeDir=V;
Out.texCOORD=uv_coords;
gl_Position = MVPmatrix * pos;
FS:基於攝像頭
vec3 V=normalize(In.eyeDir);
vec3 L=normalize(In.lightDir);
vec2 norm_texture=texture(texturenormal,In.TexCoord).xy*2.0-vec2(1.0);
vec3 N=normalize(vec3(norm_texture,sqrt(1.0-dot(norm_texture.xy, norm_texture.xy))*2.0-vec3(1.0)));//unpacking from 2 channel
vec3 R=reflect(-L,N);//phong
vec3 specular=pow(max(dot(R,V),0.0),shininess)*specularColor;//phong
vec3 diffuse=max(dot(N,L),0.1)*vec3(texColor);//phong
眼下地勢越來越亮/暗向左/向右旋轉。所以這很不正確。
現在,基於相機左/右旋轉,地形變得更亮/更暗。所以這很不正確。 – Skides 2014-09-28 13:53:17
除非你正在變形,否則你不應該需要地形法線貼圖的切線。我認爲你在頂點着色器中計算'L'看起來有點可疑。什麼是'MVmatrix',當你從它構造一個'vec3'時會發生什麼? – GuyRT 2014-09-29 08:48:02