Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемЕгор Понтрягин
1 Лекция 7 ( )
2 /archived-tools/gpu-tools- archive/rendermonkey-toolsuite/#download /archived-tools/gpu-tools- archive/rendermonkey-toolsuite/#download RenderMonkey is a rich shader development environment for both programmers and artists which facilitates the collaborative creation of real-time shader effects.
4 glActiveTexture(GL_TEXTURE0+iTextureUnit); glBindTexture(GL_TEXTURE_2D, uiTexture); glBindSampler(iTextureUnit, uiSampler); int iSamplerLoc = glGetUniformLocation(spMain.getProgramID(), "gSampler"); glUniform1i(iSamplerLoc, 0);
5 in vec2 texCoord; out vec4 outputColor; uniform sampler2D gSampler; void main() { outputColor = texture2D(gSampler, texCoord); }
6 uniform mat4 projectionMatrix; uniform mat4 modelViewMatrix; layout (location = 0) in vec3 inPosition; layout (location = 1) in vec2 inCoord; out vec2 texCoord; void main() { gl_Position = projectionMatrix*modelViewMatrix*vec4(inPosition, 1.0); texCoord = inCoord; }
7 #ifdef GL_FRAGMENT_PRECISION_HIGH precision highp float; #else precision mediump float; #endif uniform sampler2D BaseMap; uniform vec4 lightDir; varying vec2 texCoord; varying vec3 normal; void main(void) { vec4 base = texture2D(BaseMap, texCoord); float diffuse = clamp(dot(normalize(normal), vec3(lightDir)), 0.0, 1.0); gl_FragColor = vec4( * diffuse) * base; }
8 Где 'I' - интенсивность отражения (reflection), Ld = диффузный цвет источника (gl_LightSource[0].diffuse), и Md - диффузный коэффициент материала (gl_FrontMaterial.diffuse). Эта формула известна как "Lambertian Reflection ("Закон косинуса Ламберта)
9 void main() { vec3 normal, lightDir; vec4 diffuse; float NdotL; normal = normalize(gl_NormalMatrix * gl_Normal); lightDir = normalize(vec3(gl_LightSource[0].position)); NdotL = max(dot(normal, lightDir), 0.0); diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; gl_FrontColor = NdotL * diffuse; gl_Position = ftransform(); }
10 Всё, что остаётся на долю пикселного шейдера - установить цвет пикселов, используя varying-переменную gl_Color void main() { gl_FragColor = gl_Color; }
11 void main() { vec3 normal, lightDir; vec4 diffuse, ambient, globalAmbient; float NdotL; normal = normalize(gl_NormalMatrix * gl_Normal); lightDir = normalize(vec3(gl_LightSource[0].position)); NdotL = max(dot(normal, lightDir), 0.0); diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; globalAmbient = gl_LightModel.ambient * gl_FrontMaterial.ambient; gl_FrontColor = NdotL * diffuse + globalAmbient + ambient; gl_Position = ftransform(); }
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.