Executor, у меня тут ХП, но дома на винде 7 работало, проект правда не конкретно этот.. но исходник за основу был взят тот же
Какая у Вас видюшка? Работает вроде на восьмой серии нвидии и выше...
Попробуйте пересоберите мою ехе'шку, если просто мой бинарник запускали...
Сейчас сам скачал этот файлик, скомпилил проект... все работает, но на ХП... под вин7 проверить сейчас нет возможности.
Белые точки это мелочь, вставишь туда свою планету и сразу уйдут белые точки, он же считай почти рейтрес прямоугольника в демке делает, конечно у него там артефакты на границе с космосом.
Какой релиз смотрите ? Первый или второй поправленный, ссылка на который лежит на геймдев.нет: http://www.gamedev.net/community/forums/topic.asp?topic_id=508117 (последний пост)
someone, спасибо! То что я использовал и выложил тут это первая версия. Причем я ее немного менял. Соберу второй исходник.
Не могу понять как туда планету свою прилепить... в этом основная проблема. Насколько я понял, он шейдером рисует на прямоугольнике. Земля отрисовывается в earth.glsl?
Подскажите, пожалуйста, как и где рисовать сетку ландшафта и другие объекты в таком случае?
Я рисовал Землю (тупо сферу) примитивной функцией gluSphere вроде.
Прочие объекты заталкивал в VBO. При перерисовке кадра вызывал его.
Для моих задач этого было вполне достаточно, но душа тянется к прекрасному)))
Буду разбираться. Спасибо!
Там всё очень просто, убирай рендер прямоугольника на весь экран.
Вот тебе примитивный шойдер земли на Cg (я переводил на Cg его шейдеры):
#include "common.cgfxh"
float3 lightDirection : lightDirection;
float3 eye_position;
struct VS_IN
{
float2 pos : POSITION;
};
struct PS_IN
{
float4 oPos : POSITION;
float3 pos : TEXCOORD0;
float2 uv : TEXCOORD1;
float3 view_vector : TEXCOORD2;
float4 hpos : TEXCOORD3;
};
sampler2D heightMap : TEXUNIT10 = sampler_state
{
generateMipMap = false;
minFilter = Linear;
magFilter = Linear;
};
sampler2D diffuseMap : TEXUNIT11 = sampler_state
{
generateMipMap = true;
minFilter = Linear;
magFilter = Linear;
};
sampler2D normalMap : TEXUNIT12;
sampler2D detailMap : TEXUNIT13;
samplerCUBE skyBox : TEXUNIT14 = sampler_state
{
generateMipMap = true;
minFilter = Linear;
magFilter = Linear;
};
float3 groundColorNonSpherical(float3 x, float3 v, float3 s, float r, float mu,float3 terrain_reflectance,float3 shading_point,float3 normal)
{
float3 x0 = shading_point;
// ground reflectance at end of ray, x0
float3 n = normal;
float3 reflectance = terrain_reflectance*0.2f;
// direct sun light (radiance) reaching x0
float muS = saturate(dot(n, s)+0.3f);
float3 sunLight = transmittanceWithShadow(length(x0), muS);
// precomputed sky light (irradiance) (=E[L*]) at x0
float3 groundSkyLight = irradiance(irradianceSampler, length(x0), muS);
// light reflected at x0 (=(R[L0]+R[L*])/T(x,x0))
float3 groundColor = reflectance * (max(muS, 0.0) * sunLight + groundSkyLight) * ISun / M_PI;
// attenuation of light to the viewer, T(x,x0)
float3 attenuation = transmittance(r, mu, v, x0);
return attenuation * groundColor; //=R[L0]+R[L*]
}
PS_IN VS(in VS_IN IN)
{
PS_IN OUT;
........
OUT.uv = .......;
float H = tex2D(heightMap,OUT.uv).x;
float4 f4pos = make_position_on_earth_sphere(float4(IN.pos.xy*100,H,1.0f));
OUT.view_vector = (f4pos.xyz-eye_position);
OUT.oPos = mul(modelViewProj,f4pos);
OUT.pos = f4pos.xyz;
OUT.hpos = mul(modelViewProj,f4pos);
return OUT;
}
float4 PS(in PS_IN IN) : COLOR0
{
float3 s = normalize(sun_direction);
float3 v = normalize(IN.view_vector);
float3 x = eye_position.xyz;
float3 earth_pos = make_position_on_earth_sphere(IN.pos.xyz);
float r, mu;
float3 normal = normalize(tex2D(normalMap,IN.uv.xy).xyz*2-1);
float4 detail = tex2D(detailMap,IN.uv.xy*100.0f);
float4 albedo = tex2D(diffuseMap,IN.uv.xy)*detail;
float r_,mu_;
float3 inscatterColor = fullGroundInscatter(x, v, s, earth_pos, r, mu);
r_ = r;
mu_ = mu;
float3 groundClr = groundColorNonSpherical(x, v, s, r_, mu_, albedo, earth_pos.xyz, normal); //R[L0]+R[L*]+S|x-T(x,xs)S|xs
return float4(HDR(groundClr+inscatterColor),1.0f); // Eq (16)???
}
technique terrain
{
pass
{
VertexProgram = compile gp4vp VS();
FragmentProgram = compile gp4fp PS();
}
}
----------------
make_position_on_earth_sphere - чтоб точка лежала на сфере земли. 1 условная единица = 1км (может 100м не помню).
положение камеры тоже есесно в системе координат с цетром в центре земли, осью зед к северному полюсу.
почитайте доку, чтобы хоть понимать что такое x, v, s, r, mu.
Neptune
> У меня сразу скомпилилось, и работало без проблем, и тифф нормальный, IrfanView
> открывает... Не знаю что у вас не получилось.
Скачал IrfanView... Да, РГБ он открывает, а на альфу благополучно забивает...
СнэгИТ хоть и конвертит, но при расмотрении оказалось, что альфу он просто чёрной делает...
Чего за ТИФФ такой неведомый, что его никто не понимает? Ппц, уже замучился...
Или подскажите тогда уж как эту тиффлиб собрать?
Правка:
Нашёл инфу как собрать - http://libtiff.maptools.org/build.html
Но кучу ошибок вываливает...
Chertov
> Какая у Вас видюшка?
GF9600GT
Executor
В альфе там просто маска воды, чтоб блик от морей и рек делать. IrfanView это смотрелка картинок, нафиг ей альфа канал? Вот он его и не грузит, хотя в настройках что-то связанное с ним есть. Неужели фотошоп не откроет?
libtiff можно и не собирать, скачай бинарники, и все дела.
Или просто скачай текстуру Земли с альфой в png, например здесь.
someone
Да, ничего себе примитивный:))) Оказывается я совсем не знаю Cg...
someone, спасибо! Статью читал, в теории немного представляю что к чему.
Executor, ну тогда даже и не знаю... дома проверю на винде7
Neptune
> В альфе там просто маска воды, чтоб блик от морей и рек делать.
Это понятно...
> IrfanView это смотрелка картинок, нафиг ей альфа канал?
Чтобы я мог сохранить в другом формате... Проблема та в том, что тиффлиб не знаю как собрать, хотел сконвертить в какойто нормальный формат и собственно юзать его... А этот тифф никто понять не может, либо видят только альфу, либо видят только РГБ, фотошоп видит всё, НО он треть картинки обрезает...
> libtiff можно и не собирать, скачай бинарники, и все дела.
На офф сайте я ничего подобного не нашёл...
> Или просто скачай текстуру Земли с альфой в png, например здесь.
Она без альфы! :(
Chertov
> Залил сюда проект http://narod.ru/disk/12437336000/Earth%20Render.rar.html
В твоей картинке нет альфы!
Executor
>На офф сайте я ничего подобного не нашёл...
Вот тебе бинарники, сам вчера качал: http://gnuwin32.sourceforge.net/packages/tiff.htm
Раздел Download, Complete package, except sources.
>Она без альфы! :(
Странно, у меня почему-то с альфой... А почему-это фотошоп что-то там отрезает?
Попробуй текстуру без альфы загрузить, по-идее просто всё будет блестеть, и океаны, и материки
Executor, тиффлиб когда-то давно собирал, но удобнее загружать нвидивской либой, например.
Юзаю пнг... в нем можно сохранить альфу. Но тут она мне не нужна была.
Neptune, у меня такое ощущение что тиффка там битая, я поэтому и поменял на загрузку пнг.
Neptune
> Вот тебе бинарники, сам вчера качал:
> http://gnuwin32.sourceforge.net/packages/tiff.htm
> Раздел Download, Complete package, except sources.
Спс, попробую...
> Странно, у меня почему-то с альфой...
Хз, я фотошопом открыл и альфа канала там не обнаружил...
ИрфанВью говорит что она 24 бита (то бишь без альфы), на тифф покрайней мере говорила, что 32 бита (с альфой)...
> А почему-это фотошоп что-то там отрезает?
Спроси у Адобе... :)
Скомпилил... При загрузке тиффа ошибка:
earth.tiff: 20: Strip out of range, max 20.
Но картинка вроде загрузилась, правда если сильно приблизить - фигня однотонная земля становится...
Вам не пофигу на tiff, господа? Демка про атмосферу, а не высокодетализированную планету Земля?
someone
> Вам не пофигу на tiff, господа? Демка про атмосферу, а не
> высокодетализированную планету Земля?
Просто я хотел пощупать как оно в оригинале...
В оригинале - смотрите видео на геймдев.нет :) вот там вообще
убийственно красиво)
Тема в архиве.