Save Me!
The following function is -supposed- to move a pixel along a vector from the current point to the origin a little way.
Variables and array's and all that are fine, what the problem is, is the -equation- for moving the point.
What's supposed to happen is:
A point's X and Y distances from the origin are found, then the distance of the point directly from the origin is calculated using SQRT( DX*DX + DY*DY),
The X length and Y length are then reduced to single units by dividing DX and DY by the distance between the origin and the pixel.
Then the new distance is calulated by adding a small amount (can be negative) to the current distance.
Then the X and Y unit values are multiplied by the new distance value to find the co-ordinates of the translated pixel to be used instead of the pixel found at that point.
It should work, but the effect the following code generates produces is to move a pixel that should only move on the X direction (as the x pixel is in aline with the x origin) a little on the Y position too.
What on earth is going on? why does the pixel on the X origin's plane move on the Y too, and why does the same happen for Y?
It -must- be the equation, but I can't see what the problem is!
HELP!
void generateBumpAndBaseImage()
{
int currentPixel=0;
int dx=-((windowX/2)+centerX),dy=-((windowY/2)+centerY),rx=0,ry=0,mainPixel,dry,targetX=0,targetY=0,tempX,tempY,distX,distY;
float sx,sy,smy,scaler,distance,xVector,yVector,newDistance;
consta+=3;
for(int y=dy;y<dy+windowY;targetY++,y++)
{
//**lighting**
sy=y/40f;
smy=(sy*sy)+consta;
//**texture**
distY=(targetY-centerY);
dry=distY*distY;
targetX=0;
for(int x=dx;x<dx+windowX;targetX++,x++)
{
//**lighting**
sx=x/40f;
logo.imageA[currentPixel]=(int)(((Math.sin(((sx*sx)+consta)+smy)*128)+128)/depth);
//**texture**
distX=(targetX-centerX);
//Find the distance current pixel is away from origin
distance=(float)(Math.sqrt((distX*distX)+dry));
//Find the unit x and y values of the pixel from the origin
xVector=distX/distance;
yVector=distY/distance;
//Create new distance using bumpmap information as the alteration
newDistance=distance+(float)((logo.imageA[currentPixel]-128f)/10f);
//Move from the origin to the offset pixel
tempX=(int)(xVector*newDistance)+centerX;
tempY=(int)(yVector*newDistance)+centerY;
//Check the new pixel is in bounds
if(tempX<0) tempX=0;
if(tempX>windowX) tempX=windowX;
if(tempY<0) tempY=0;
if(tempY>windowY-2) tempY=windowY-2;
//Map the X,Y co-ordinates onto the array
mainPixel=tempX+(tempY*windowX);
//Store translated pixel in the image array
logo.imageR[currentPixel]=baseTexture.imageR[mainPixel];
logo.imageG[currentPixel]=baseTexture.imageG[mainPixel];
logo.imageB[currentPixel]=baseTexture.imageB[mainPixel];
currentPixel++;
}
}
}
site: http://www.untamed.co.uk