我正在開發一個使用opengl es 2.0的android遊戲,並使用高度貼圖位圖來創建地形。這很好。從位圖的Android getPixel隨機地開始返回黑色
在遊戲過程中,我有一些代表遊戲中存儲實體(x,y)位置的實體的類。 爲了得到z值,我使用查詢高度圖位圖的方法。
這是方法:
public float zAt(float pos[]){
float xPos = pos[0] + terrainWidth/2;
float yPos = height-(pos[1] + terrainHeight/2);
int bitMapWidth = zMap.getWidth();
int bitMapHeight = zMap.getHeight();
int pixelX= (int) (((bitMapWidth-1) * xPos)/terrainWidth);
int pixelY = (int) (((bitMapHeight-1) * yPos)/terrainHeight);
if(pixelX < 0 || pixelX >= bitMapWidth || pixelY < 0 || pixelY >= bitMapHeight)
return 0;
else{
System.out.println("DEBUG! >> "+"("+pixelX+","+pixelY+"):"+zMap.getPixel(pixelX, pixelY)+" <<");
float toReturn = ((zMap.getPixel(pixelX, pixelY) & 0xFF)-(255f/2f))/zDiv;
return toReturn;
}
}
遊戲開始時,一切都很好。但是在一些遊戲循環之後,我注意到遊戲中的對象始終保持在z = 0。我去檢查zAt方法,將那個println扔到那裏,然後我證實實際上,經過一段時間(每次我運行遊戲時這個時間都不相同),zMap.getPixel開始返回0.
這就是這樣一個奇怪的問題,因爲我不改變我的位圖在遊戲過程中。
有時它甚至閃爍了一下,也就是和GetPixel返回0,然後返回正確的值,然後再返回0 ......大多數結束了時代總是返回0。
這是我的加載位圖:
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap terrainBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.heightmap, options);
有人知道爲什麼會發生這種情況嗎?
是xPos和yPos總是(您是否斷言等)之間(0..1)? – mehmetminanc
@Mehmet M. I. xPos和yPos不在0和1之間,他們不需要。 POS []是在遊戲/ OpenGL的座標和一系列的變換應用,你可以看到,得到相應的像素的座標到該位置。 在生成的日誌中,可以看到諸如: 'DEBUG! >>(408,300):453213 <<' ..稍後有些遊戲循環... 'DEBUG! >>(40.83萬):0 <<' 這意味着有事位圖之間,以及座標轉化爲像素不是在這種情況下'S 0問題 – jmacedo