opengl 4. X (스크린 렌 더 링 - 배경 렌 더 링) off - screen rendering
4433 단어 OpenGLrenderingoff-screen
void glGenFramebuffers(GLsizei n, Gluint * ids);
장치 컨 텍스트 에 연결 하여 초기 화 합 니 다.
void glBindFramebuffer(GLenum target, GLuint framebuffer);
일반적인 상황 에서 glBindFramebuffer () 는 응용 프로그램 이 제공 하 는 framebuffer object 를 현재 framebuffer 로 합 니 다.그 중에서 매개 변수 framebuffer 는 우리 가 미리 남 긴 이름 중 하나 입 니 다. (opengl 은 모두 GLuint 로 object 의 이름 을 색인 합 니 다.) target 매개 변 수 는 보통 GL 입 니 다.FRAMEBUFFER。물론 두 개의 framebuffer 대상 을 동시에 연결 합 니 다. 하 나 는 읽 기 에 사용 되 고 하 나 는 쓰기 에 사용 할 수 있 습 니 다.framebuffer 대상 을 GL 에 연결 하기 만 하면READ_FRAMEBUFPER 버퍼 만 있 으 면 됩 니 다.(저 자 는 한 마디 를 삽입 합 니 다. 처음에 초보 자 들 은 왜 opengl 이 이런 방식 으로 gl 대상 을 만 들 고 연결 한 다음 에 모든 gl 대상 을 초기 화 하 는 지 모 를 수 있 습 니 다. 일반적인 정점 배열 buffer, 무늬 buffer 등 을 포함 합 니 다. 사실 우 리 는 그의 호출 순서 와 논리 에서 알 수 있 듯 이 glGen 이 시작 하거나 glCreate 가 시작 하 는 함 수 는 모두 배열 크기 와 배열 을 입력 해 야 합 니 다.포인터, 들 어 오 는 것 은 모두 GLuint 입 니 다. '생 성' 대상 에 이 함 수 는 OpenGL 에 대상 의 이름 을 미리 남 겼 을 뿐 입 니 다. 예 를 들 어 OpenGL 은 정점 buffer 에 게 '1' 이라는 이름 을 주 었 습 니 다.텍 스 처 buffer 에 게 이름 '2' 를 주 고 두 번 째 정점 buffer 이름 '3' 을 줍 니 다. 어차피 하나의 정수 이 므 로 최소한 opengl 도 65535 개의 대상 을 제공 할 수 있 습 니 다. 그러면 이 이름 들 은 미리 남 겨 진 후에 실제 메모리 에 데 이 터 를 저장 하지 않 았 고 어떤 칸 으로 데 이 터 를 저장 할 지 모 르 기 때문에 glBind 로 시작 하 는 함수 로 연결 해 야 합 니 다. 어디 에 연결 해 야 합 니까? OpenGL 내장의 버퍼 에 서 는 GL FRAMEBUFPER, GL ARRAY BUFFER, GL UNIFORM BUFFER 등 이 연결 되면 이 대상 들 의 '이름' 이 데 이 터 를 저장 하 는 방법 을 알 고 glBufferData () 를 초기 화 합 니 다.이 커 다란 GL XX BUFFER 버퍼 에 일정한 메모리 공간 을 할당 하여 이 대상 들 에 게 '이름' 을 부여 합 니 다. 이 를 통 해 저 희 는 이 대상 들 의 이름 을 버퍼 바 인 딩 포인트 로 데 이 터 를 저장 하고 데 이 터 를 읽 으 며 데 이 터 를 수정 할 수 있 습 니 다. 전체 프로 세 스 는 다음 과 같 습 니 다. 예약 이름 - > 바 인 딩 버퍼 - > 버퍼 에서 메모리 이름 - > 버퍼 바 인 딩 포인트 로 데 이 터 를 읽 고 쓸 수 있 습 니 다.주의해 야 할 것 은 우리 가 바 인 딩 버퍼 를 통 해 데 이 터 를 읽 고 쓰 는 것 입 니 다. 예 를 들 어 glBufferData 는 이름 대상 이 아 닌 GL BUFFER 를 받 습 니 다. 이것 은 데이터 와 기능 을 잘 분리 시 켰 습 니 다. 이름 대상 1 이 GL BUFFER 에 연결 되면 GL BUFFER 를 통 해 1 색인 구역 의 데 이 터 를 수정 한 다음 에 다른 이름 대상 2 를 GL BUFFER 에 연결 하고 GL BUFFER 를 통 해 2 색인 구역 을 수정 합 니 다.의 데이터, '이름 대상' 은 버퍼 에 저 장 된 데이터 의 위치 와 데이터 의 형식 만 인덱스 하고 버퍼 는 데 이 터 를 저장 하 는 메모리 와 구체 적 인 읽 기와 쓰기 기능 을 관리 하 며 데이터 와 방법 은 mvc 와 유사 하고 버퍼 는 controller 이 며 이름 대상 은 model 과 유사 합 니 다.쓰기 만 하면 target 을 GL 로 설정 합 니 다.DRAW_FRAMEBUFPER. 쓰기 대상 의 바 인 딩 은 모든 렌 더 링 을 대상 에 지정 합 니 다 (커팅, 템 플 릿, 깊이 테스트, 최종 색상 템 플 릿 혼합 등 포함).framebuffer 만 읽 으 면 데이터 원본 이 라 할 말 이 없습니다.target 이 GL 로 설정 되면FRAMEBUFPER 는 이 framebuffer 는 읽 을 수도 있 고 쓸 수도 있 습 니 다. 보통 우 리 는 이런 대상 이 필요 합 니 다.
framebuffer 를 만 들 면 텍 스 처 스티커 데 이 터 를 붙 일 수 있 습 니 다. (텍 스 처 스티커 는 자신의 구성 형식 이 있 고 framebuffer 는 픽 셀 형식 으로 장치 출력 에 가장 적합 합 니 다) 물론 텍 스 처 스티커 의 깊이, 템 플 릿 이나 색상 중 하나 만 붙 일 수 있 습 니 다. 그러면 framebuffer 는 깊이, 템 플 릿 이나 색상 버퍼 가 됩 니 다!함수 glFramebuffer Texture () 함 수 를 사용 하 십시오. 무늬 를 framebuffer 에 붙 이 고 원형 은?
void glFramebufferTexture(GLenum target, Glenum attachment, Gluint texture, GLint level);
그 중에서 target 은 framebuffer 대상 의 버퍼 묶음 점 으로 GL 일 수 있 습 니 다.READ_FRAMEBUFFER,GL_DRAW_FRAMEBUFPER, 또는 GLFRAMEBUFFER。 attachment 매개 변 수 는 openGL 에 어떤 데 이 터 를 붙 이 고 싶 은 지 알려 줍 니 다.DEPTH_ATTACHMENT,GL_STENCIL_ATTACHMENT, 데이터 2 개 와 함께 GLDEPTH_STENCIL_ATTACHMENT. 프레임 버퍼 를 색 버퍼 로 만 들 려 면, GLCOLOR_ATTACHMENT, 사실 여러 색상 스티커 를 동시에 저장 할 수 있 습 니 다. GLCOLOR_ATTACHMENT1,GL_COLOR_ATTACHMENT 2..............................................................................매개 변수 texture 는 framebuffer 에 붙 이 고 싶 은 스티커 입 니 다. 매개 변수 level 은 mipmap level 입 니 다. 다 중 무늬 가 없 으 면 0 입 니 다.다음 코드 는 깊이 프레임 버퍼 를 설정 하고 다른 스티커 로 렌 더 링 하 는 방법 을 보 여 줍 니 다.
// framebuffer ( )
glGenFramebuffers(1,&fbo);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Common Lisp에서 GPU 벡터 기반 글꼴 렌더링그때 조금만 쓴 문자열 드로잉 라이브러리의 소개입니다. 브라우저의 렌더링 엔진을 만드는데 있어서, 취급하기 쉬운 묘화 백엔드가 필요했다. Gecko는 Cairo를 사용하는 것처럼 보였습니다 (과거의 이야기?) 그래서...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.