一段midp1纹理的代码,是自己推的肯定不怎么好

来源:互联网 发布:淘宝c店是什么意思啊 编辑:程序博客网 时间:2024/05/16 05:33
 一段纹理的代码,是自己推的肯定不怎么好

可以把float替换为定点数,把image改为一段int 数据

    public void textureTest(float x1,float y1,
                            
float x2,float y2,
                            
float x3,float y3,
                            
float u1,float v1,
                            
float u2,float v2,
                            
float u3,float v3,
                            Image texture
            )
{
        
float dxab,dyab,dxbc,dybc,dxca,dyca;
        
        
float duab,dvab,dubc,dvbc,duca,dvca;
        
        dxab
=x2-x1;
        dyab
=y2-y1;
        
        dxbc
=x3-x2;
        dybc
=y3-y2;
        
        dxca
=x1-x3;
        dyca
=y1-y3;
        
        duab
=u2-u1;
        dvab
=v2-v1;
        
        dubc
=u3-u2;
        dvbc
=v3-v2;
        
        duca
=u1-u3;
        dvca
=v1-v3;
        
        
float dyu, dyv, dxu, dxv;
        
        
        dyu
=(duab*dxbc-dubc*dxab)/(dyab*dxbc-dybc*dxab);
        dyv
=(dvab*dxbc-dvbc*dxab)/(dyab*dxbc-dybc*dxab);
        
        dxu
=(duab-dyu*dyab)/dxab;
        dxv
=(dvab-dyv*dyab)/dxab;
        System.
out.println("textuetest, dxu="+dxu);
        System.
out.println("textuetest, dxv="+dxv);
        
        
int []textureData=new int[texture.getHeight()*texture.getWidth()];
        
        texture.getRGB(textureData,
0,texture.getWidth(),0,0,texture.getWidth(),texture.getHeight());
        
        
int textureWidth=texture.getWidth();
        
int textureHeight=texture.getHeight();
        
        System.
out.println("textuetest vpx="+vpx+" vpy="+vpy);
        
for(int y=0;y<320/*canvas height*/;y++){
            
for(int x=0;x<240/*canvas width*/;x++){
                
float u,v;
                u
=(x-x1)*dxu +(y-y1)*dyu + u1;
                v
=(x-x1)*dxv +(y-y1)*dyv + v1;
                
                u
=textureTestBetween0to1(u);
                v
=textureTestBetween0to1(v);
                
                u
*=textureWidth;
                v
*=textureHeight;
                
                
int ui=(int )u;
                
int vi=(int )v;
                
if(ui==textureWidth){
                    ui
=0;
                }

                
                
if(vi==textureHeight){
                    vi
=0;
                }

//                System.out.println("ui="+ui +" vi="+vi);
                
                
int color=textureData[ui+vi*textureWidth];
                g.setColor((color
&0x00ffffff));
                g.drawLine(x,y,x,y);
            }

        }

        
        g.setColor(
0xffffff);
        g.drawLine((
int )x1,(int )y1,(int )x2,(int )y2);
        g.drawLine((
int )x3,(int )y3,(int )x2,(int )y2);
        g.drawLine((
int )x3,(int )y3,(int )x1,(int )y1);
    }

    
    
public  float textureTestBetween0to1(float u){
        
if(u<0){
            u
=u-((int)u)+1;
        }
else if(u>=1){
            u
=u-((int)u);
        }

        
return u;
    }
原创粉丝点击