i was in holiday and skiing. Before my holiday i work on a new command MP_ParticleAcceleration(Entity, VarVelocity.f) ; Acceleration of particle , a new help file with a nice translation from Peter and some bug fixes. 
 website (14 000 open gl shader) i have translated them with my new Shaderconverter program. The program translated GLSL to HLSL for mp3d dx9 shader functions. You can test the shader with my shadereditore ...
Code: Select all
float4x4 worldViewProjI; float postfx;
#ifdef GL_ES
// precision mediump float;
#endif
// Rainbow Dash rendered by mapping signs of improper equations of graphic primitives,
// mainly lines, circles, and ellipses.
// (c) mniip 2014
uniform float time;
uniform float2 mouse;
uniform float2 resolution = float2(933,511) ; // Screensize;
static float2 m;
  float3 COLOR_LINE = float3(0x77, 0xB0, 0xE0) / 255.0;
  float3 COLOR_MANELINE = float3(0x1E, 0x98, 0xD3) / 255.0;
  float3 COLOR_BODY = float3(0x9E, 0xDB, 0xF9) / 255.0;
  float3 COLOR_MANE1 = float3(0xEE, 0x41, 0x44) / 255.0;
  float3 COLOR_MANE2 = float3(0xF3, 0x70, 0x33) / 255.0;
  float3 COLOR_MANE3 = float3(0xFD, 0xF6, 0xAF) / 255.0;
  float3 COLOR_MANE4 = float3(0x62, 0xBC, 0x4D) / 255.0;
  float3 COLOR_MANE5 = float3(0x67, 0x2F, 0x89) / 255.0;
  float3 COLOR_EYEBROW = float3(0x00, 0x00, 0x00) / 255.0;
  float3 COLOR_IRIS1 = float3(0xC6, 0x00, 0x6F) / 255.0;
  float3 COLOR_IRIS2 = float3(0x46, 0x00, 0x25) / 255.0;
  float3 COLOR_BLACK = float3(0x00, 0x00, 0x00) / 255.0;
  float3 COLOR_WHITE = float3(0xFF, 0xFF, 0xFF) / 255.0;
bool linee(float2 p, float2 a, float2 b)
{
	return (p.x - a.x) * (a.y - b.y) > (p.y - a.y) * (a.x - b.x);
}
bool circle(float2 p, float2 a, float r)
{
	return (p.x - a.x) * (p.x - a.x) + (p.y - a.y) * (p.y - a .y) > r * r;
}
bool ellipse(float2 p, float2 a, float2 r)
{
	return (p.x - a.x) * (p.x - a.x) / r.x / r.x + (p.y - a.y) * (p.y - a .y) / r.y / r.y > 1.0;
}
bool ear(inout float3 c, float2 p)
{
	bool A = circle(p, float2(638, 664), 362.);
	bool B = circle(p, float2(1075, 641), 323.);
	bool C = circle(p, float2(646, 708), 378.);
	if(!A && !B && !C)
	{
		bool D = circle(p, float2(637, 662), 345.);
		bool E = circle(p, float2(1109, 588), 363.);
		bool F = circle(p, float2(651, 692), 269.);
		bool G = circle(p, float2(395, 732), 516.);
		if(D || E || (!F && G))
			c = COLOR_LINE;
		else
			c = COLOR_BODY;
		return true;
	}
	return false;
}
bool mane(inout float3 c, float2 p)
{
	bool A = circle(p, float2(434, 460), 514.);
	bool B = circle(p, float2(254, 110), 903.);
	bool C = circle(p, float2(384, 228), 668.);
	bool D = circle(p, float2(475, 505), 425.);
	bool E = circle(p, float2(513, 281), 536.);
	bool F = circle(p, float2(777, 435), 360.);
	bool G = circle(p, float2(915, 174), 554.);
	bool H = circle(p, float2(659, 444), 536.);
	bool I = circle(p, float2(-201, 601), 337.);
	bool J = linee(p, float2(-253, 218), float2(176, 590));
	bool K = circle(p, float2(-164, 1212), 882.);
	bool L = circle(p, float2(650, 764), 80.); // lol weird
	if(!A && !B && (C || (!D && E) || (!F && G) || (!H || (I && !J)) && !K) || !L)
	{
		bool M = circle(p, float2(422, 434), 518.);
		bool N = circle(p, float2(372, 261), 647.);
		bool O = circle(p, float2(491, 499), 425.);
		bool P = circle(p, float2(395, 377), 402.);
		bool Q = circle(p, float2(790, 454), 352.);
		bool R = circle(p, float2(891, 216), 527.);
		bool S = circle(p, float2(680, 453), 536.);
		bool T = circle(p, float2(-217, 1332), 992.);
		bool U = circle(p, float2(-150, 586), 305.);
		bool V = linee(p, float2(280, 404), float2(119, 566));
		if((!M && N) || ((!O && P || !Q && !M) && R) || (!S && !M && !T) || (U && !T && V))
		{
			if(circle(p, float2(491, 84), 764.))
				c = COLOR_MANE1;
			else
				if(circle(p, float2(686, 204), 576.))
					c = COLOR_MANE2;
				else
					c = COLOR_MANE3;
		}
		else
			c = COLOR_MANELINE;
		return true;
	}
	return false;
}
bool mane2(inout float3 c, float2 p)
{
	bool A = circle(p, float2(607, 464), 306.);
	bool B = circle(p, float2(777, 485), 339.);
	bool C = circle(p, float2(1181, -127), 463.);
	bool D = circle(p, float2(-433, 198), 1442.);
	bool E = linee(p, float2(554, -80), float2(1055, -80));
	if((A && !B || !C) && !D && E)
	{
		bool F = circle(p, float2(613, 461), 319.);
		bool G = circle(p, float2(769, 486), 323.);
		bool H = circle(p, float2(1195, -123), 454.);
		bool I = circle(p, float2(288, 485), 691.);
		bool J = circle(p, float2(122, 278), 864.);
		if((F && !G || !H) && !I && !J)
			c = COLOR_MANE4;
		else
		{
			bool K = circle(p, float2(388, 235), 607.);
			bool L = circle(p, float2(416, 87), 570.);
			if(K && !L)
				c = COLOR_MANE5;
			else
				c = COLOR_MANELINE;
		}
		return true;
	}
	return false;
}
bool face(inout float3 c, float2 p)
{
	bool A = circle(p, float2(588, 396), 357.);
	bool B = linee(p, float2(325, 74), float2(887, 122));
	bool C = ellipse(p, float2(489, 237), float2(287, 166));
	bool D = circle(p, float2(209, 437), 163.);
	if(!A && B || !C && D)
	{
		bool E = ellipse(p, float2(536, 253), float2(315, 170));
		bool F = circle(p, float2(500, 921), 828.);
		bool G = circle(p, float2(220, 367), 110.);
		bool H = linee(p, float2(201, 454), float2(658, 108));
		bool I = linee(p, float2(237, 115), float2(363, 238));
		bool J = ellipse(p, float2(283, 204), float2(68, 57));
		bool K = ellipse(p, float2(253, 192), float2(102, 70));
		bool L = circle(p, float2(285, 228), 19.);
		bool M = circle(p, float2(281, 236), 19.);
		if((!E && !F && G || H) && (I || !J || K) && (L || !M))
			c = COLOR_BODY;
		else
			c = COLOR_LINE;
		return true;
	}
	return false;
}
bool eye1(inout float3 c, float2 p)
{
	// skewed ellipse please ignore
#define SQR(q) ((q) * (q))
	bool A = SQR((p.x - 590.0) / 150.0 - (p.y - 378.0) / 900.0) + SQR((p.y - 378.0) / 180.0) < 1.0;
	if(A)
	{
		bool B = SQR((p.x - 593.0) / 149.0 - (p.y - 382.0) / 900.0) + SQR((p.y - 361.0) / 180.0) < 1.0;
		if(B)
		{
			float2 d = m - float2(580, 360);
			if(length(d) > 60.0)
			   d = d / length(d) * 60.0;
			bool C = ellipse(p, float2(580, 360) + d, float2(112, 162));
			if(C)
				c = COLOR_WHITE;
			else
			{
				bool D = ellipse(p, float2(551, 305) + d, float2(19, 26));
				bool E = ellipse(p, float2(601, 410) + d, float2(35, 57));
				if(D && E)
				{
					bool F = ellipse(p, float2(580, 360) + d * 1.3, float2(71, 126));
					if(F)
						c = lerp(COLOR_IRIS1, COLOR_IRIS2, SQR((p.y - 360.0 - d.y) / 252.0 + 0.5));
					else
						c = COLOR_BLACK;
				}
				else
					c = COLOR_WHITE;
			}
		}
		else
			c = COLOR_EYEBROW;
		return true;
	}
	// rotating ellipses hacks, nothing to see here
	bool G = ellipse(p, float2(757, 430), float2(40, 5));
	bool H = ellipse(float2(p.x + p.y * 0.3, p.x * -0.3 + p.y), float2(890, 260), float2(40, 6));
	bool I = ellipse(float2(p.x + p.y * 0.5, p.x * -0.5 + p.y), float2(990, 175), float2(40, 7));
	if(!G || !H || !I)
	{
		c = COLOR_BLACK;
		return true;
	}
	return false;
}
bool eye2(inout float3 c, float2 p)
{
	bool A = linee(p, float2(207, 460), float2(323, 265));
	bool B = circle(p, float2(213, 434), 158.);
	bool C = circle(p, float2(739, 417), 500.);
	bool D = ellipse(p, float2(289, 444), float2(50, 144));
	if(!A && !B && !C || !D)
	{
		bool E = ellipse(p, float2(285, 390), float2(47, 184));
		if(!E)
		{
			float2 d = m - float2(290, 360);
			if(length(d) > 60.0)
			   d = d / length(d) * 60.0;
			d *= float2(0.33, 1.0);
			bool F = ellipse(p, float2(290, 360) + d, float2(50, 162));
			if(F)
				c = COLOR_WHITE;
			else
			{
				bool D = ellipse(p, float2(304, 446) + d, float2(17, 41));
				bool E = ellipse(p, float2(278, 354) + d, float2(11, 24));
				if(D && E)
				{
					bool F = ellipse(p, float2(290, 360) + d * 1.3, float2(42, 126));
					if(F)
						c = lerp(COLOR_IRIS1, COLOR_IRIS2, SQR((p.y - 360.0 - d.y) / 252.0 + 0.5));
					else
						c = COLOR_BLACK;
				}
				else
					c = COLOR_WHITE;
			}
		}
		else
			c = COLOR_EYEBROW;
		return true;
	}
	return false;
}
bool neck(inout float3 c, float2 p)
{
	bool A = circle(p, float2(1247, -28), 638.);
	bool B = circle(p, float2(353, 258), 638.);
	bool C = linee(p, float2(554, -80), float2(1055, -80));
	if(!A && !B && C)
	{
		bool D = circle(p, float2(1235, -21), 606.);
		if(D)
			c = COLOR_LINE;
		else
			c = COLOR_BODY;
		return true;
	}
	return false;
}
float2 transform(float2 x)
{
    return (x - resolution / 2.0) / resolution.y * 1000.0 + 500.0;
}
float4 main(float2 gl_FragCoord: TEXCOORD0, float4 gl_FragColor: COLOR ) : COLOR
{
if (postfx == 1) gl_FragCoord.x = gl_FragCoord.x + 0.23;
gl_FragCoord.y = 1 - gl_FragCoord.y; gl_FragCoord = gl_FragCoord * resolution;
	m = transform(mouse * resolution);
	float2 p = transform(gl_FragCoord.xy);
	float3 c = float3(1, 1, 1);
//	ear(c, p) || mane(c, p) || mane2(c, p) || eye1(c, p) || eye2(c, p)  || face(c, p) || neck(c, p);
                neck(c, p) || face(c, p) || eye2(c, p)  ||eye1(c, p) ||mane2(c, p) || mane(c, p) ||ear(c, p);	return  float4(c, 1);
}
// Vertex Shader
struct VS_INPUT
{
    float3 position	: POSITION;
    float2 texture0     : TEXCOORD0;
};
struct VS_OUTPUT
{
     float4 hposition : POSITION;
     float2 texture0  : TEXCOORD0;
};
VS_OUTPUT myvs( VS_INPUT IN )
{
    VS_OUTPUT OUT;
    if (postfx == 0) {
      OUT.hposition = mul( worldViewProjI, float4(IN.position.x ,IN.position.y ,IN.position.z, 1) ); 
    } else {
      OUT.hposition = float4(IN.position.x ,IN.position.y ,IN.position.z, 1);
    }    
    OUT.texture0 = IN.texture0;
    return OUT;
}
// ---------------------------------------------
technique Start
{
    pass p1  
    {
        VertexShader = compile vs_3_0 myvs();
        PixelShader = compile ps_3_0 main();
    }
}
 
Code: Select all
float4x4 worldViewProjI; float postfx;
#ifdef GL_ES
// precision mediump float;
#endif
uniform float time;
uniform float2 mouse;
uniform float2 resolution = float2(933,511) ; // Screensize;
float2 hash( float2 p )
{
	p = float2( dot(p,float2(127.1,311.7)), dot(p,float2(269.5,183.3)));
	return -1.0 + 2.0*frac(sin(p)*43758.5453123);
}
float noise( in float2 p )
{
	float2 i = floor( p );
	float2 f = frac( p );
	float2 u = f*f*f*(6.0*f*f - 15.0*f + 10.0);
	return lerp( lerp( dot( hash( i + float2(0.0,0.0) ), f - float2(0.0,0.0) ), 
		         dot( hash( i + float2(1.0,0.0) ), f - float2(1.0,0.0) ), u.x),
	            lerp( dot( hash( i + float2(0.0,1.0) ), f - float2(0.0,1.0) ), 
		         dot( hash( i + float2(1.0,1.0) ), f - float2(1.0,1.0) ), u.x), u.y) * 0.5 + 0.5;
}
float fbm( in float2 p ) 
{
	float ret = 0.0;
	ret += noise( p * 1.0 ) * 1.0;
	ret += noise( p * 2.0 ) * 0.5;
	ret += noise( p * 4.0 ) * 0.25;
	ret += noise( p * 8.0 ) * 0.125;
	ret *= 0.533333;
	return ret;
}
float4 main(float2 gl_FragCoord: TEXCOORD0, float4 gl_FragColor: COLOR ) : COLOR {
if (postfx == 1) gl_FragCoord.x = gl_FragCoord.x + 0.23;
gl_FragCoord.y = 1 - gl_FragCoord.y; gl_FragCoord = gl_FragCoord * resolution;
	float2 uv = gl_FragCoord.xy / resolution.xy * 2.0 - 1.0;
	uv.x *= resolution.x / resolution.y;
	float2 m = mouse * 2.0 - 1.0;
	m.x *= resolution.x / resolution.y;
	float2 p = floor(uv);
	float2 f = frac(uv);
	float3 normal;
	float offset = 0.0001;
	float mult = 10.0;
	float2 vl = float2(uv.x - offset, uv.y) * mult;
	float2 vr = float2(uv.x + offset, uv.y) * mult;
	float2 vu = float2(uv.x, uv.y - offset) * mult;
	float2 vd = float2(uv.x, uv.y + offset) * mult;
	
	float hl = fbm(vl);
	float hr = fbm(vr);
	float hu = fbm(vu);
	float hd = fbm(vd);
	
	float3 vlh = float3(vl.x, vl.y, hl);
	float3 vrh = float3(vr.x, vr.y, hr);
	float3 vuh = float3(vu.x, vu.y, hu);
	float3 vdh = float3(vd.x, vd.y, hd);
	
	normal = normalize(cross(vlh - vrh, vuh - vdh));
	
	float3 color;
	float3 lightDir = normalize(-float3(uv.x - m.x, uv.y - m.y, -0.4));
	float3 eye = float3(0.0, 0.0, -1.0);
	float3 view = normalize(float3(uv.x, uv.y,  0.0) - eye);
	float3 ref = reflect(view, normal);
	float3 d = max(float3(0,0,0), dot(normal, lightDir));
	float3 s = pow(d, float3(7,7,7));
	color = d*0.5 + s;
	gl_FragColor = float4(float3(pow(color, float3(1.0, 0.8, 0.7))), 1.0);
            return gl_FragColor;
}
// Vertex Shader
struct VS_INPUT
{
    float3 position	: POSITION;
    float2 texture0     : TEXCOORD0;
};
struct VS_OUTPUT
{
     float4 hposition : POSITION;
     float2 texture0  : TEXCOORD0;
};
VS_OUTPUT myvs( VS_INPUT IN )
{
    VS_OUTPUT OUT;
    if (postfx == 0) {
      OUT.hposition = mul( worldViewProjI, float4(IN.position.x ,IN.position.y ,IN.position.z, 1) ); 
    } else {
      OUT.hposition = float4(IN.position.x ,IN.position.y ,IN.position.z, 1);
    }    
    OUT.texture0 = IN.texture0;
    return OUT;
}
// ---------------------------------------------
technique Start
{
    pass p1  
    {
        VertexShader = compile vs_3_0 myvs();
        PixelShader = compile ps_3_0 main();
    }
}