Тема: Странное.
Показать сообщение отдельно
Старый 23.10.2011, 18:46   #168
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Странное.

делал нечто подобное, только шейдером, имея карту высот на видюхе и рендеря лайтмап за несколько кадров кусками. шейдер выглдяит вот так:
	float2 TexCoords = IN.ScreenTC / MapSize;
	float h = tex2D(heighttex,TexCoords).r;
	float height = h * heightMult;
	float3 pos = float3(TexCoords.x,height,TexCoords.y);

	float3 end = saturate(pos - LightDir*(1.0f/MapSize)*128); 

	float3 step = (end - pos)/128.0f;


	float p = 0;

	for(int i=0;i<128;i++)
	{
		pos += step;

		p = tex2D(heighttex,pos.xz).r * heightMult;
		if (pos.y < p) return float4(0,1-(step.y*i)/heightMult,0,1);  //0;// Intersection!//
	}

	return 1;// (no intersections)
суть в том что от каждого обрабатываемого пикселя ведётся луч в направлении солнца, и если за требуемое кол-во итераций, луч врезается в хейтмап, значит пиксель затенён.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (23.10.2011)