텍스처에서 특정 좌표의 색상을 가져와야합니다. 원시 png 데이터를 얻거나 보거나 생성 된 OpenGL 텍스처를 샘플링하여이 작업을 수행 할 수있는 두 가지 방법이 있습니다. 주어진 UV 또는 XY 좌표에서 컬러 (RGBA)를 얻기 위해 OpenGL 텍스처를 샘플링 할 수 있습니까? 그렇다면 어떻게?Open GL에서 텍스처 샘플링
1
A
답변
2
을, 옵션은
- 이 glGetTexImage를 (사용하여 전체 텍스처를 가져 오기) 및 관심있는 텍셀을 확인할 수 있습니다
- 립니다. 관심있는 텍셀 (예 : GL_POINTS 프리미티브 렌더링). 그런 다음 glReadPixels을 사용하여 프레임 버퍼에서 렌더링 한 픽셀을 가져옵니다.
- 텍스처 이미지의 복사본을 편리하게 유지하고 OpenGL을 빠져 나오십시오.
옵션 1과 2는 (픽셀 버퍼 개체를 사용하고 비동기 적으로 복사하여 다소 속도를 높일 수 있지만) 비효율적입니다. 당신이 (. 즉, 당신이 맥이나 아이폰에있어)를 GL_APPLE_client_storage
확장이있는 경우 그 먼 길로 승자 옵션 4의 : 그래서 지금까지 내가 가장 좋아하는 옵션 3.
편집이다.
2
가장 효율적인 방법은 텍스처 데이터에 액세스하는 것입니다. 어쨌든 텍스처로 만들려면 PNG를 디코딩하고 텍셀간에 직접 삽입해야합니다. texcoord가 [0,1]이라고 가정하면, texwidth u와 texheight를 v에 곱한 다음이를 사용하여 텍스처의 위치를 찾습니다. 숫자가 정수이면 픽셀을 직접 사용하고 그렇지 않으면 int 부분을 사용하여 경계 픽셀을 찾고 소수 부분을 기반으로 픽셀 사이를 보간합니다.
여기에 몇 가지 HLSL 형식의 의사 코드가 있습니다. 상당히 명확해야한다 : 내 머리 위로 떨어져
float3 sample(float2 coord, texture tex) {
float x = tex.w * coord.x; // Get X coord in texture
int ix = (int) x; // Get X coord as whole number
float y = tex.h * coord.y;
int iy = (int) y;
float3 x1 = getTexel(ix, iy); // Get top-left pixel
float3 x2 = getTexel(ix+1, iy); // Get top-right pixel
float3 y1 = getTexel(ix, iy+1); // Get bottom-left pixel
float3 y2 = getTexel(ix+1, iy+1); // Get bottom-right pixel
float3 top = interpolate(x1, x2, frac(x)); // Interpolate between top two pixels based on the fractional part of the X coord
float3 bottom = interpolate(y1, y2, frac(x)); // Interpolate between bottom two pixels
return interpolate(top, bottom, frac(y)); // Interpolate between top and bottom based on fractional Y coord
}
0
다른 사람들처럼 VRAM에서 텍스처를 다시 읽는 것은 매우 비효율적이며 퍼포먼스에 원격으로 관심이있는 경우 전염병처럼 피해야합니다. 지금까지
두 가지 가능한 솔루션은 내가 알고 :
- 옵션 2의 쉐이더를
관련 문제
- 1. DirectX 9 HLSL 텍스처 샘플링 문제
- 2. OpenGL ES 2.0에서 효율적인 랜덤 텍스처 샘플링
- 3. 열린 GL 텍스처 압축
- 4. OpenAL로 오디오 레벨 샘플링
- 5. linq을 사용하여 목록 샘플링
- 6. 업 샘플링 PCMU
- 7. 멀티 샘플링 OpenGL?
- 8. 확률 론적 유니버설 샘플링
- 9. visual vm에서 샘플링
- 10. 저주파수에서의 사운드 샘플링
- 11. 거대한리스트에서 효율적인 무작위 샘플링
- 12. AMR - 업 샘플링 방법
- 13. 3D 모델의 균일 샘플링
- 14. .jpg 텍스처 파일을 사용하는 OpenGL 텍스처 매핑
- 15. 텍스처 필터링과 텍스처 샘플링의 차이점은 무엇입니까?
- 16. 2D 텍스처 입력으로 3D 텍스처 슬라이스 사용
- 17. D3D9 멀티 샘플링을 사용하여 텍스처 렌더링
- 18. 텍스처 버퍼 객체와 프레임 버퍼 저장
- 19. 선택 텍스처
- 20. 텍스처 로딩
- 21. 리눅스에서 오디오 스트림 샘플링 속도
- 22. v $ session_longops에서 오라클 시간 샘플링
- 23. 아이폰 가속도계의 최대 샘플링 속도
- 24. raytracer에서 공격적인 슈퍼 샘플링 수행
- 25. Open GL ES에서 와이어 프레임으로 프리미티브를 렌더링하는 방법
- 26. D3D9에서 앤티 엘리 어싱/멀티 샘플링
- 27. 기본 OpenGL 텍스처 디버깅에 실패 했습니까? (iphone)
- 28. 거대한 면적 텍스처?
- 29. OpenGL 텍스처 및 endianness
- 30. 동적 텍스처 압축
외부를 사용하여 pixeldata 편리합니다 (그러나 폐기물 메모리)
필자는 포스터가 예제의 'getTexel'부분을 구현하는 방법을 묻는 것이지 필터링을 복제하는 방법이 아니라 (어떤 식 으로든 복제하려는 어떤 종류의 필터링에 의존하는지) 묻는 것이 었습니다. –
필자는 일종의 getTexel 파트에 대해 질문했지만, 그는 1과 2가 너무 느리고 esp는 모바일 장치로 작업하고 있다고 생각합니다. 감사합니다. : – DavidG