Показать сообщение отдельно
Старый 25.12.2014, 23:42   #17
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Наложение нескольких текстур на загружаемый Mesh



Ты что то типа этого замутить пытался?

uniform sampler2D texture0;
uniform sampler2D texture1;
uniform sampler2D texture2;
uniform sampler2D texture3;

in vec3 fragmentn;
in vec2 fragmentuv;
in vec3 lightvec;


out vec4 color;





void main(void) {
float diff = dot(fragmentn,normalize(lightvec));

//получаю отклонение нормали от вертикали
float v_diff = dot(fragmentn, vec3 (0.0f,1.0f,0.0f));
//...
float disp=0.0f;

vec4 diffuse;
vec4 diffuse1;
vec4 diffuse2;

if(v_diff>0.95){diffuse = texture(texture0,fragmentuv);}

if(v_diff>0.91 && v_diff<=0.95){
			diffuse2 = texture(texture1,fragmentuv);
			diffuse1 = texture(texture0,fragmentuv);
			diffuse=mix(diffuse1,diffuse2,25*(0.95-v_diff));}

//если местность имеет небольшой уклон
if(v_diff>0.88 && v_diff<=0.91){diffuse = texture(texture1,fragmentuv);}		

if(v_diff>0.84 && v_diff<=0.88){
			diffuse2 = texture(texture2,fragmentuv);
			diffuse1 = texture(texture1,fragmentuv);	
			diffuse=mix(diffuse1,diffuse2,25*(0.88-v_diff));}

//если местность имеет большой уклон
if(v_diff>0.79 && v_diff<=0.84){diffuse = texture(texture2,fragmentuv);}		

if(v_diff>0.75 && v_diff<=0.79){
			diffuse2 = texture(texture3,fragmentuv);
			diffuse1 = texture(texture2,fragmentuv);	
			diffuse=mix(diffuse1,diffuse2,25*(0.79-v_diff));}

//если местность имеет пипец большой уклон
if(v_diff<=0.75){diffuse = texture(texture3,fragmentuv);}

color = diffuse*diff;
}
Миниатюры
Нажмите на изображение для увеличения
Название: planet.jpg
Просмотров: 1342
Размер:	159.2 Кб
ID:	21300  
(Offline)
 
Ответить с цитированием