2011-03-11 70 views
0
//pixelcolour with ambient 
    //pixelcolour = vec4(textureshade*shadescale + ambient* textureshade+ textureshade*diffuseshadescale, 1.0); 

    //ambient   
    pixelcolour += vec4(ambient*textureshade,1.0); 

    //diffuse 
    //pixelcolour += vec4(textureshade*diffuseshadescale, 1.0); 

    //ambient && diffuse 
    //pixelcolour += vec4(ambient* textureshade+ textureshade*diffuseshadescale, 1.0); 

    //ambient && specular 
    //shadescale= pow(dot(h,nn),shinyness); 
    //pixelcolour += vec4 (textureshade*shadescale + ambient* textureshade, 1.0); 

    //specular && diffuse 
    //shadescale= pow(dot(h,nn),shinyness); 
    //pixelcolour += vec4 (textureshade*shadescale + textureshade*diffuseshadescale , 1.0); 

    //ambient && specular && diffuse 
    //shadescale= pow(dot(h,nn),shinyness); 
    //pixelcolour += vec4 (textureshade*shadescale + textureshade*diffuseshadescale + ambient*textureshade, 1.0); 

上面代碼使用不同的計算來顯示照明,在像素着色器文件I有。我需要從鍵盤控制這個,需要在main中聲明,例如,VK_A將循環使用我擁有的不同模式。我如何去實現這個?鍵盤輸入來控制像素着色器

你們通常如何增加鍵盤控制來改變這個?謝謝

+0

在現代GLSL中,可以使用[着色器子程序](https://www.khronos.org/opengl/wiki/Shader_Subroutine)來選擇程序變化。 – Rabbid76 2017-07-03 19:55:54

回答

1

爲每種模式編譯一個獨立版本的着色器,無論是手動創作還是使用字符串操作來生成每組源代碼。

在您的應用程序中,在渲染受影響的幾何體之前,請跟蹤當前模式並在設備上設置適當的着色器,每幀。

是否有一些更具體的問題,你遇到?

0

有多個着色器的替代方法是在着色器中使用統一方法在不同代碼路徑之間進行選擇,並基於鍵盤輸入循環該統一數值。