我正在为opengl编写一个lwjgl纹理图集,我的纹理图集创建工作正常,但是当我去渲染它时,对象出现了,但它是完全黑色的。我认为这是因为我的纹理坐标位于纹理图集的空白部分。由于我没有正确设置混合,并且由于对象是我渲染的第一件事,因此 alpha 变得完全黑色。我知道这一点是因为我在 0,0,0 处渲染了一个测试四边形,并且可以看到对象的轮廓。当我以其他顺序渲染它们时,轮廓不存在,因为那时混合工作正常。这是我的纹理坐标移动代码,用于更改坐标m_height和m_width是整个纹理图集的高度和宽度以及x,y,w,并且是图集中纹理的位置,宽度和高度,x,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
那么错误是什么?