문제

텍스처를 사용하여 OpenGL에 2D 이미지를 표시해야합니다.
이미지 치수는 반드시 2의 힘이 아닙니다.
나는 더 큰 텍스처를 만들고 디스플레이를 내가 사용중인 부품으로 제한하는 것을 생각했지만 이미지 데이터는 OpenCV와 공유되므로 한 번에 한 번에 픽셀을 더 큰 텍스처로 복사하고 싶지 않습니다.

편집-Windows 아래에서 가장 간단한 인텔조차도 2 텍스처의 전력이없는 것을 지원하는 것으로 나타났습니다.

EDIT2- ARB 텍스처 크기가 없어도 이미지를 작게 만들고 창 크기로 저장하는 것은 저급 하드웨어에서도 매우 빠릅니다.

도움이 되었습니까?

해결책

두 개의 GL 확장이 떠오른다. 살펴보십시오 gl_arb_texture_rectangle (mipmapping이 필요하지 않은 경우), 또는 gl_arb_texture_non_power_of_two (그렇다면).

다른 팁

피해야 할 한 가지 함정은 어떤 이유로 어떤 이유로 일부 비디오 카드는 gl_unpack_alignment가 1 (glpixelstorei (glpixelstorei (gl_unpack_alignment, 1);)로 설정되어야한다는 것입니다.

미래 에이 문서를 만날 수있는 사람을 추가 할 수 있다면 OpenGL에 대한 웹에서 찾을 수있는 대부분의 문서 및 튜토리얼/예제는 Nehe.gamedev 물건을 포함하여 몇 년이 지나면 몇 년이 지났으며이를 믿게 할 것입니다. 두 가지 힘이 아닌 텍스처 크기와 같은 것은 현실적으로 그렇지 않을 때 문제가되거나 오랫동안 감가 상각 된 OpenGL 기능 또는 10 년 동안 업데이트되지 않은 라이브러리를 사용하도록 권장합니다.

우선, 대부분의 현대 비디오 카드는 실제로 비소 및 두 가지 크기가 아닌 텍스처 치수를 지원합니다. 그러나 최대의 호환성을 위해서는 두 텍스처의 전력 만 사용하는 것이 좋습니다.

각 이미지 치수 (너비 및 높이)에 대해 더 큰 두 가지의 가장 가까운 전력을 결정하고 그 크기의 질감을 만듭니다. 그런 다음 두 가지 옵션이 있습니다. 첫 번째는 이미지에 맞게 픽셀 데이터의 소프트웨어 크기 크기를 수행 한 다음 표시해야 할 때 원래 측면 배급에 따라 쿼드를 크기를 조정하는 것입니다. 또는 텍스처의 일부를 이미지 데이터로 채우고 나머지 투명 픽셀을 넣을 수 있습니다.

2 텍스처의 전원을 사용하려면 이미지를 차지할 수있는 가장 작은 텍스처를 만들고 이미지가 포함 된 텍스처의 일부만 표시하도록 적절한 텍스처 좌표를 계산하십시오. 예를 들어 이미지가 400x300 인 경우 512x512 텍스처를 사용하고 이미지를 라인별로 복사하면 오른쪽 텍스처 좌표가 400.0/512.0, 낮은 300.0/512.0입니다. 소프트웨어 스케일링보다 더 좋아 보일 것입니다.

나는 당신이 설명하는대로 정확하게, 2 개의 질감으로 복사하고 그에 따라 UV를 조정합니다. 확장은 좋지만 임의의 컴퓨터에서 지원되는 것을 보장하지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top