So that was fun. Adding sphere surface coordinates to texture space converter. Used this “trivial” technique UV mapping.
Apart from that, I moved the code around and cleaned it slightly. that resulted in few additional frames per second. Each Sphere is semi-transparent with the same texture.
now what, normal mapping ?
[edit: 29 Jul 2013]
Apparently ther was a bug in my texturing. It is gone now 🙂
and night version,
There is a code that I used.
//intersection point, sphere
//algorithm from http://en.wikipedia.org/wiki/UV_mapping
float3 getTexelID(float3 point, sphere * ss)
{
float3 pole = (float3)(0.0f,1.0f,0.0f);
float3 equator = (float3)(1.0f,0.0f,0.0f);
float U=0.0f;
float V=0.0f;
float phi = 0.0f;
float theta = 0.0f;
float3 normal = point - ss->pos.xyz;
normal = normalize(normal);
phi = acos( -dot(normal, pole));
V=phi/3.141592653589793 ;
theta = acos( dot(normal, equator)/ sin( phi )) / ( 2 * 3.141592653589793 );
if ( dot((cross(pole, equator)), normal) > 0 )
U = theta;
else
U = 1 - theta;
float3 x = (float3)((float)V, (float)U, 0.0f);
return x;
}