2010-11-24 5 views
2

내가 응용 프로그램을 가지고 있다고 가정 해 보겠습니다. (응용 프로그램의 세부 사항은 문제를 해결할 때 무의미해야합니다). 화면에 렌더링하는 대신, 어떻게 든 응용 프로그램을 화면에 렌더링하는 대신 프레임 버퍼 객체에 렌더링하도록 강제 할 수 있습니다 (glew로 엉망으로 처리하거나 dll에서 호출을 가로 채기).프레임 버퍼 객체에 쉐이더를 적용하여 어안 효과 얻기

일단 응용 프로그램이 FBO에 내용을 렌더링하면 FB의 내용에 쉐이더를 적용 할 수 있습니까? 내 지식은 여기에 제한되어 있으므로이 단계에서 이해할 수있는 것부터 정점에 대한 모든 정보는 더 이상 사용할 수없고 필요한 모든 테스트가 적용되었으므로 버퍼에 남아있는 것은 픽셀 데이터뿐입니다. 이 올바른지?

쉐이더를 FBO에 적용 할 수 있다면 어안 효과를 얻을 수 있습니까? (예 : http://idea.hosting.lv/a/gfx/quakeshots.html)

위의 linke에서 사용 된 기술은 6 개의 다른 뷰포트를 만들고 각 뷰포트를 큐브 맵면에 렌더링 한 다음 텍스처를 메쉬에 적용하는 것입니다.

덕분에 몇 가지 관련 정보를 원하시면 여기를

답변

4

framebuffer 객체는 다른 여러 버퍼, 특히 조각 위치에 의해 암시 적으로 인덱싱 된 버퍼를 캡슐화합니다. 그래서 하나의 프레임 버퍼 객체는 컬러 버퍼, 깊이 버퍼, 스텐실 버퍼 및 다른 것들을 묶을 수 있습니다. 개별 버퍼는 렌더 버퍼라고합니다.

맞습니다. 거기에는 기하학이 없습니다. 장면을 다시 읽으려는 목적으로 최종 단편 값만 얻을 수 있습니다. 기존 앱을 하이재킹하는 경우 프레임의 2D 픽셀 이미지와 걱정하지 않는 다른 요소가있을 수 있습니다.

GPU에 렌더링 - 텍스처 지원 (원래 OpenGL 1.3의 확장이지만 GPU가 없어도 휴대 전화에서도 찾을 수있는 경우)을 사용하면 텍스처를 렌더 버퍼로 연결할 수 있습니다 프레임 버퍼 내에서. 그래서 렌더링 코드는 정상적으로 그렇지만 결국 드로잉을위한 소스로 사용할 수있는 텍스처에 결과를 쓰게됩니다.

조각 쉐이더는 출력을 생성하기 위해 샘플링 할 텍스처 맵의 위치를 ​​프로그래밍 방식으로 결정할 수 있습니다. 따라서 어안 렌즈를 적용하는 조각 쉐이더를 작성할 수 있습니다. 물론 원래 텍스처로 렌더링 된 시야로 제한됩니다. 큐브의 6 개면 중 하나만 사용할 수 있다면 Quake 예제에서 얻을 수있는 것일 것입니다.

요약하면 : 대답은 모든 질문에 '예'입니다. 프레임 버퍼 객체 here에 대한 간단한 소개가 있습니다.

+0

그래, 렌더링 버퍼 객체를 생성하고, 응용 프로그램의 렌더링 된 출력을 텍스처로 사용하도록 캡처 한 후에는 조각 쉐이더의 목적이 무엇입니까? 프래그먼트 셰이더는 샘플링 할 위치를 프로그래밍 방식으로 결정할 수 있다고 언급했습니다. 이 문제의 맥락에서이 말의 의미를 설명해 주시겠습니까? – Adham

+0

당신이 할 수있는 일은 물고기 눈 렌즈가 들어있는 단일 쿼드를 그립니다.각 조각은 입력 (x, y)을 얻지 만 원본 이미지에서 (x, y)에있는 픽셀을 검색하고 출력 색상으로 설정하는 대신 계산할 위치를 얻는 데 필요한 계산을 수행합니다. 이미지를 어안 (어쩌면 극좌표로 전환하고 거리에서 코사인을 던지는 것과 같은 것)으로 보이게하려면 입력 색상을 입력하십시오. 정확하게 포토샵과 같습니다. 그런 다음 한 개의 쿼드 만 제출하고 완벽한 픽셀을 얻으려고합니다. – Tommy

2

봐 :

http://www.opengl.org/wiki/Framebuffer_Object

짧은, 간단한 설명이 FBO는 소프트웨어 프레임 버퍼의 3D 해당하는 것입니다. 텍스처를 수정하고 업로드하는 대신 개별 픽셀에 직접 액세스 할 수 있습니다. 셰이더가 FBO를 가리 키도록 할 수 있습니다. 위의 링크는 절차의 개요를 제공합니다.

관련 문제