可以使用AMD Render Monkey 调试
Vertex Program:
uniform float cos_time_0_2PI, sin_time_0_2PI, time0_1;
varying vec2 TexCoord;
varying float R,r,theta, phi;
varying vec4 pos;
const float PI = 3.141592653589793;
void main(void)
{
TexCoord = vec2 (gl_MultiTexCoord0);
//TexCoord.x = -TexCoord.x;
//TexCoord.y = -TexCoord.y;
pos = gl_Vertex;
R = sqrt(pos.x * pos.x + pos.y * pos.y + pos.z * pos.z);
r = sqrt(R * R - pos.y * pos.y);
theta = 2.0 * PI * time0_1 ;
if(pos.x + 0.01 > r){
phi = 0.0;
}else if(pos.x - 0.01 < -r){
phi = PI;
}else{
phi = acos(pos.x / r);
}
if(pos.z < 0.0){
phi = 2.0 * PI - phi;
}
pos.x = r * cos(theta + phi);
pos.z = r * sin(theta + phi);
if(pos.y + 0.000001 > R){
pos.y = R;
r = 0.0;
pos.x = 0.0;
pos.z = 0.0;
}else if(pos.y - 0.000001 < -R){
pos.y = -R;
r = 0.0;
pos.x = 0.0;
pos.z = 0.0;
}
gl_Position = gl_ModelViewProjectionMatrix * pos;
}
Fragment Program:
uniform sampler2D myTexture;
varying vec2 TexCoord;
varying float R,r,theta;
varying vec4 pos;
void main (void)
{
gl_FragColor = texture2D(myTexture, TexCoord);
//gl_FragColor = vec4(1,0,0,1);
}