2011-10-09 48 views
2

我成功在iOS上實現陰影量。OpenGLES Shadow Volume

但是,我得到了以下問題,我如何能像NV_depth_clamp在GLSL中那樣將頂點位置剪切到遠平面?這是我的頂點着色器代碼:

void main(void) { 

highp vec3 eyepos = vec3(MODELVIEW * vec4(VERTEX, 1.0)); 

normal = normalize(NORMALMATRIX * NORMAL); 

highp vec3 ldir = normalize(LIGHTPOS - eyepos); 

highp float ndotl = max(dot(normal, ldir), 0.0); 

// How can I clip that to the far plane automatically!??!!? 
if(ndotl > 0.0) gl_Position = PROJECTION * vec4(eyepos + (ldir * -2000.0), 1.0); 

else gl_Position = PROJECTION * vec4(eyepos, 1.0); 
} 

第二,而尋找上述問題,筆者發現,影卷zfail方法(這是我實現)是專利是真的嗎?這是否意味着我不能在App Store上的商業應用程序中使用它?

TIA!

回答

0

歡呼聲,在遠處的剪輯平面z/w = 1。因此,您需要通過投影來轉換eyepos和ldir,然後向eyepos添加儘可能多的ldir,以便它在遠平面處結束。這可能會很棘手,因爲如果它們完全躺在它上面,那麼遠剪切平面可能會夾住你的多邊形,所以可能需要進行一些調整。