2013-02-06 31 views
4

我正在改變形狀的圖像效果,當我觸摸並移動頂點進行正常顯示時,它正確地移動到頂點,但是在視網膜顯示中,它正在移動到錯誤的頂點。意思是它在觸摸位置不移動頂點。錯誤的頂點在視網膜顯示器上移動

//Here I'm implementing grid on texture, storing each vertex point in array. 

    GLint width = texture2D.contentSizeInPixels.width; 
GLint height = texture2D.contentSizeInPixels.height; 
int i, j; 
int k; 

if (mass == NULL) 
{ 
    mass = (MASS *) malloc(sizeof(MASS)*GRID_SIZE_X*GRID_SIZE_Y); 
    if (mass == NULL) 
    { 
     fprintf(stderr, "body: Can't allocate memory.\n"); 
     exit(-1); 
    } 
} 

k = 0; 
for (i = 0; i < GRID_SIZE_X; i++) 
    for (j = 0; j < GRID_SIZE_Y; j++) 
    { 
     //this code implements grid on texture2D, gets vertex & side vertex in array 
     mass[k].nail = (i == 0 || j == 0 || i == GRID_SIZE_X - 1 
         || j == GRID_SIZE_Y - 1);//value is 0/1 

     mass[k].x[0] = i/(GRID_SIZE_X - 1.0)*width; 
     NSLog(@"mass[%d].x[0]:: %f",k,mass[k].x[0]); 

     mass[k].x[1] = j/(GRID_SIZE_Y - 1.0)*height; 
     NSLog(@"mass[%d].x[1]:: %f",k,mass[k].x[1]); 

     mass[k].x[2] = -(CLIP_FAR - CLIP_NEAR)/4.0; 
     NSLog(@"mass[%d].x[2]:: %f",k,mass[k].x[2]); 

     mass[k].v[0] = 0.0; 
     mass[k].v[1] = 0.0; 
     mass[k].v[2] = 0.0; 

     mass[k].t[0] = i/(GRID_SIZE_X - 1.0); 
     mass[k].t[1] = j/(GRID_SIZE_Y - 1.0); 

     k++; 
    } 
} 

//Here I am returning index position of stored vertex in array near by touch point. 

- (int)body_grab:(int)x:(int)y { 

float dx[2]; 
float d; 
float min_d; 
float min_i; 
int i; 

for (i = 0; i < GRID_SIZE_X*GRID_SIZE_Y; i++) 
{ 
    dx[0] = mass[i].x[0] - x; 
    dx[1] = mass[i].x[1] - y; 
    d = sqrt(dx[0]*dx[0] + dx[1]*dx[1]); 
    if (i == 0 || d < min_d) 
    { 
     min_i = i; 
     min_d = d; 
    } 
} 

return min_i; 
} 


//Here I am getting other 3 vertex of cell where touch point exists and moving these vertex in a touch direction. 

- (void)body_dynamics:(int)x:(int)y { 

if (mass[grab].x[0] > x && mass[grab].x[1] > y) { 

    grab2 = grab - GRID_SIZE_X; 
    grab3 = grab2 - 1; 
    grab4 = grab - 1; 
} 
if (mass[grab].x[0] > x && mass[grab].x[1] < y) { 

    grab2 = grab - GRID_SIZE_X; 
    grab3 = grab2 + 1; 
    grab4 = grab + 1; 
} 
if (mass[grab].x[0] < x && mass[grab].x[1] < y) { 

    grab2 = grab + GRID_SIZE_X; 
    grab3 = grab2 + 1; 
    grab4 = grab + 1; 
} 
if (mass[grab].x[0] < x && mass[grab].x[0] > y) { 

    grab2 = grab + GRID_SIZE_X; 
    grab3 = grab2 - 1; 
    grab4 = grab - 1; 

} 



if (grab != -1 && !mass[grab].nail &&!isFirstTouch) 
{ 
    mass[grab].x[0] = mass[grab].x[0] + mousex1; 
    mass[grab].x[1] = mass[grab].x[1] + mousey1; 
    mass[grab].x[2] = -(CLIP_FAR - CLIP_NEAR)/4.0; 

    mass[grab2].x[0] = mass[grab2].x[0] + mousex1; 
    mass[grab2].x[1] = mass[grab2].x[1] + mousey1; 
    mass[grab2].x[2] = -(CLIP_FAR - CLIP_NEAR)/4.0; 

    mass[grab3].x[0] = mass[grab3].x[0] + mousex1; 
    mass[grab3].x[1] = mass[grab3].x[1] + mousey1; 
    mass[grab3].x[2] = -(CLIP_FAR - CLIP_NEAR)/4.0; 

    mass[grab4].x[0] = mass[grab4].x[0] + mousex1; 
    mass[grab4].x[1] = mass[grab4].x[1] + mousey1; 
    mass[grab4].x[2] = -(CLIP_FAR - CLIP_NEAR)/4.0; 
} 
} 

回答

2

我得到了解決這個問題的

您只需在2種 手段乘觸摸點假設你得到X位置123和Y 342必須由2乘以這些值:123 * 2,所以你會得到正確的頂點位置。

+0

請在視網膜顯示屏上添加一些細節,說明爲什麼要將位置乘以2。任何遺留問題? –

+0

參考以下注釋的代碼://在這裏,我在紋理上實現了網格,將每個頂點存儲在數組中。 數組將像素位置x和y存儲在數組中,同時實現網格將屏幕分爲640 * 960大小,但在touchBegin和touchMoved方法中,我們獲得的位置爲320 * 480大小 –

相關問題