一段纹理的代码,是自己推的肯定不怎么好
可以把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;
}
可以把float替换为定点数,把image改为一段int 数据



























































































