2013-08-23 8 views
0

OpenGL 용 lwjgl 텍스처 아틀라스를 쓰고 있습니다. 텍스처 아트 레이션을 잘 만들었지 만 렌더 할 때 객체가 나타나지만 완전히 검은 색입니다. 내 텍스처 좌표가 내 텍스처 맵의 빈 섹션에 있기 때문에 이렇게 생각합니다. 블렌딩을 올바르게 설정하지 않았고 객체가 렌더링되는 첫 번째 객체이기 때문에 알파가 완전히 검은 색이됩니다. 내가 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 

그래서 버그가 무엇입니까?

+0

이 예제에서 텍스처 좌표 계산을 확인하는 데 문제가 있습니까, 어떤 해상도 텍스처 맵을 사용하고 있습니까? –

+0

4096x4096 텍스처를 사용하고 있습니다. 거대한 하나의 – Vastsuperking

답변

1

(0,0)은 OpenGL 정규화 된 텍스처 좌표의 왼쪽 하단에 있고 (1,1)은 오른쪽 상단입니다. 귀하의 예제 출력에서 ​​

, 나는 참조 : 당신은 텍스처를 사용하는

Rect: 1024 0 512 512 
Coord: x: 0.737651 y: 0.30223513 
Coord--> pixel: x: 1401 y: 4249 
Pixel-->Coord: x: 0.34212455 y: 1.0376068 (texture coordinates ?) 

은 정규화 된 범위 밖에이 예에서 조정합니다. 이 경우, 동작은 텍스처 랩 상태에 달려 있습니다. 좌표는 등

감안할 때 기본 텍스처 랩 동작 (반복), 당신의 T, 간단하게, 테두리 색상은 텍스처 (기본) 반복 수, 사용될 수있는, 고정 할 수 사용될 수있는 미러링 본질적으로 (1.0376068)의 좌표는 (0.0376068)이된다. 텍스처 아트랩의 컨텍스트에서 텍스처 래핑은 거의 의미가 없으므로 범위를 벗어나는 좌표는 아마도 여러분이 뭔가 잘못하고 있음을 의미 할 것입니다. :)

텍스처 좌표가 정렬되어야 함을 알아야합니다 중심에서 벗어난 위치에서 샘플링하면 텍셀 센터 나 근처에있는 텍셀이 흐려질 수 있습니다. 화면의 모든 픽셀을 텍셀 중심으로 매핑하는 것이 거의 불가능하기 때문에 가장 단순한 형상의 경우 일반 솔루션은 함께 사용하는 것입니다. 아틀라스의 각 텍스처 주위에 테두리를 배치하여 가장 가까운 텍셀이 텍스처의 가장자리에 가까우므로 텍스처 필터링은 인접한 텍스처의 샘플에 결코 손을 대지 않습니다.

+0

포장을 풀어서 인쇄 한 것을 보았 기 때문에 coord.x를 추가하여 수정했습니다. - Floor (coord.x)라고 생각합니다. 더 오래된 테스트, 잠깐 만요. – Vastsuperking

+0

텍스처 아트라스에 패딩을 추가 할 수 있습니다. 이미 가지고 있지만, 둘 다 내 문제를 해결하지 못합니다. 제 y 계산에 문제가 있습니다. 그러나 무엇을 모르겠습니다. – Vastsuperking

관련 문제