Shader language 自西向东旋转的地球

本文介绍了一种使用AMDRenderMonkey进行调试的方法。该方法通过VertexProgram和FragmentProgram两个部分实现,VertexProgram负责顶点处理,其中包括了坐标转换、角度计算等步骤;FragmentProgram则主要处理纹理映射。

可以使用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); 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值