我正在爲opengl編寫一個lwjgl紋理地圖集,並且我的紋理地圖集創建工作正常,但是當我去渲染它時,對象顯示出來,但它完全是黑色的。我認爲這是因爲我的紋理座標位於紋理圖集的空白部分。由於我沒有正確設置混合,並且由於對象是我渲染的第一個東西,Alpha變成了完全黑色。我知道這是因爲我在0,0,0處提供了一個測試四元組,並可以看到該對象的輪廓。當我以其他順序渲染它們時,輪廓不在那裏,因爲那時混合效果正常。這裏是我的紋理座標移位代碼來改變座標m_height和m_width是整個紋理圖集和x,y,w的高度和寬度,並且是地圖集x,y中紋理的位置,寬度和高度。 y來自左上角,texCoordinate2D來自左下角,我相信這就是爲什麼我要做m_height-yh。它可以正常使用紋理而不是圖集。紋理地圖集紋理座標數學
public TexCoordinate2D getTextureCoord(int x, int y, int w, int h,
TexCoordinate2D coord) {
int nx = x;
int ny = (m_height - y) - h;
//to fix m_repeat
float cx = coord.getX();//going to fix repeat here
float cy = coord.getY();
int cpx = (int) (nx + (cx * w));
int cpy = (int) (ny + (cy * h));
float ncoordx = cpx/(float) m_width;
float ncoordy = cpy/(float) m_height;
System.out.println("Rect: " + x + " " + y + " " + w + " " + h);
System.out.println("Coord: x: " + coord.getX() + " y: " + coord.getY());
System.out.println("Coord--> pixel: x: " + cpx + " y: " + cpy);
System.out.println("Pixel-->Coord: x: " + ncoordx + " y: " + ncoordy);
TexCoordinate2D newCoord = new TexCoordinate2D(ncoordx, ncoordy);
m_coordinates.add(newCoord);
return newCoord;
}
下面是一些打印
Rect: 0 0 512 512 #The rectangle from the top left corner of atlas
Coord: x: 0.5004405 y: 0.55040383 #The input coord from bottom left corner of texture
Coord--> pixel: x: 256 y: 3865 #The pixel location in the atlas of the input coord the from bottom left corner
Pixel-->Coord: x: 0.0625 y: 0.9436035 #The coordinates in the atlas (The finished product)
Rect: 3072 0 256 256 #Starts again
Coord: x: 0.56088686 y: 0.5795429
Coord--> pixel: x: 3215 y: 3988
Pixel-->Coord: x: 0.7849121 y: 0.9736328
Rect: 2560 0 512 512
Coord: x: 0.18178056 y: 0.35738176
Coord--> pixel: x: 2653 y: 3766
Pixel-->Coord: x: 0.6477051 y: 0.9194336
那麼,什麼是錯誤?
在這個例子中,我在驗證紋理座標數學時遇到了麻煩,你使用了什麼樣的分辨率紋理圖集? –
我正在使用一個4096x4096的紋理,一個很大的紋理 – Vastsuperking