opengl 무늬 이미지 복사

4312 단어 video
https://blog.csdn.net/weixin_34008805/article/details/86870790
http://www.bagualu.net/wordpress/archives/2463
 
  • 텍스쳐 재복사
  • unsigned char * data = new unsigned char[normal_texture.width*normal_texture.Hight*4];
    glBindTexture(GL_TEXTURE_2D,src_id);
    glGetTexImage(GL_TEXTURE_2D,0,GL_RGBA,GL_UNSIGNED_BYTE,data);
    glBindTexture(GL_TEXTURE_2D,dest_id);glTexSubImage2D(GL_TEXTURE_2D,0,0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE,data);
    glBindTexture(GL_TEXTURE_2D,0);
    
  • FBO 복제본
  • GLuint fbo;glGenFramebuffers(1,&fbo);
    /// bind the FBO
    glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
    /// attach the source texture to the fbo
    glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, src_id, 0);
    /// bind the destination texture
    glBindTexture(GL_TEXTURE_2D, dest_id);
    /// copy from framebuffer (here, the FBO!) to the bound texture
    glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, width,height);
    /// unbind the FBO
    glBindFramebuffer(GL_FRAMEBUFFER, 0);
    glBindTexture(GL_TEXTURE_2D,0);

    작성자: gpr 링크:https://www.jianshu.com/p/9fa3cd2fa391출처: 약서 약서의 저작권은 작가의 소유이며, 그 어떠한 형식의 전재도 작가에게 연락하여 권한을 수여받고 출처를 밝혀 주십시오.
     

    OpenGL 프레임 버퍼(10장)


    opengl3.1에서 이 기술들은 모두 폐기되었지만 개념은 여전히 관련이 있다.
     
    1. 버퍼 및 용도: 색상, 깊이, 템플릿, 누적 버퍼.그 중에서 색깔은 왼쪽 앞, 오른쪽 앞, 왼쪽 뒤, 오른쪽 뒤와 그 어떠한 수량의 보조 색 버퍼로 나뉜다.GL은 반드시 왼쪽 버퍼를 실행해야 합니다.
    2. 버퍼를 지웁니다. 이 함수는 각 버퍼의 지우기 값을 설정할 수 있습니다.
    glClearColor, glClearDepth, glClearStencil , glClearAccum.지우기 값을 설정하면 glClear(GLbitField mask)를 사용하여 mask에서 지정한 버퍼를 지울 수 있습니다.
    gl3.0 이후에는 glClearBuffer를 사용하여 buffer를 지우고 이 함수에서 지우는 값을 지정할 수 있습니다.
    3. 읽기와 쓰기에 사용할 색상 버퍼를 선택합니다. 드로잉과 읽기 대상은 색상 버퍼일 수 있습니다.드로잉의 대상으로 하나 이상의 버퍼를 선택할 수 있습니다.glDrawBuffer는 쓰기 위한 버퍼를 선택할 수 있습니다.glReadBuffer는 읽기 버퍼를 선택합니다. 이 선택한 버퍼는 glReadPixels입니다.glCopyPixels의 데이터 소스입니다.
     
    glDrawBuffer(GLenum mode), 기본적으로 단일 버퍼는 GLFRONT, 이중 버퍼 GLBACK .
    gl2.0은glDrawBuffers()를 추가하여 여러 색상 버퍼를 지정합니다.
    gl3.0프레임 버퍼 객체가 추가되었습니다.GL이 사용자 정의 프레임 버퍼에 바인딩되는 경우 GLCOLOR_ATACHMENTi에서 색상 버퍼가 드로잉 대상임을 지정합니다.
     
    glReadBuffer. 나중에 glReadPixels,glCopyPixels,glCopyTexImage,glCopyTexSubImage,glCopyConcolutionFilter 픽셀에서 읽을 수 있는 원본으로 색 버퍼를 선택하십시오.
    4. 버퍼 차단gl은 활성화된 색 버퍼, 깊이 또는 템플릿 버퍼에 데이터를 쓰기 전에 먼저 데이터에 대한 차단 작업을 수행합니다. 모든 마스크는 논리적인 AND를 사용하여 조합됩니다. glIndexMask glColorMask glColorMaksi glDepthMask,glStencilMask,glStencilMaksSeperate.
    5. 세션 테스트와 조작.세션은 프레임 버퍼에 쓰기 전에 다음 동작을 실행해야 합니다. 어떤 동작이 통과되면 후속 테스트를 계속하지 않습니다.
    재단 테스트,alpha 테스트,템플릿 테스트,깊이 테스트,혼합,떨림,논리 조작.
    glScissor(), glEnable(GL ALPHA TEST) + glAlphaFunc, glStencilFunc + glStencilOp, glDepthFunc, glEnable(GL END), glEnable(GL DITHER), glLogicOp.
    깊이 테스트에 관해서는 조회 대상과 조건 그리기를 제시해야 한다. 우리는 한 물체를 그리기 전에 한 물체가 보이는지 아닌지를 판단할 수 있다. 구체적인 절차는
    glGenQueries(n , *ids) ;  glBeginQuery(GL_SAMPLES_PASSED , ids[0]) ; glBegin(GL_TRANGLES) ; glVertex3f() ; glVertex3f() ; glVertex3f() ;  glEnd() ; glEndQuery(GL_SAMPLES_PASSED) ;
    질의 결과 판단:glGetQueryObjectiv(id, GLenum pname, glint * params);id는 이전 질의의 이름입니다. pname이 GL 인 경우QUERY_RESULT의 경우 params는 깊이 테스트를 통과한 세그먼트나 샘플을 포함하고 0이면 객체가 완전히 가려진 것입니다.
    질의가 끝나면 glDeleteQueries()를 호출하여 질의를 삭제합니다.
    조건 렌더링:glBeginConditionalRender(GLuint id, GLenum mode),   glEndConditionalRender (void) ;다음 예는 다음과 같습니다.
    glBeginConditionalRender(Query , GL_QUERY_WAIT ) ;  glDrawArrays( GL_TRIANGLES_FAN , 0 , NumVertices) ; glEndConditionalRender () ;
    또한 누적 버퍼 작업은 함수 glAccum을 통해 이루어지며, 사용 시 매뉴얼을 조회할 수 있습니다.이 함수는 주로 색 버퍼의 내용을 누적 버퍼로 옮기고, 마지막으로 누적 버퍼의 내용을 색 버퍼로 옮겨서 표시합니다.이렇게 하면 움직임이 흐리멍덩해지는 효과를 낼 수 있다.
    부드러운 그림자에 대해서도 한 번에 하나의 광원을 켜고 한쪽을 그린 다음 그 결과를 누적하는 누적 버퍼를 사용하여 완성할 수 있다.
    6. 프레임 버퍼 객체응용 프로그램이 만든 프레임 버퍼는 스크린 렌더링에만 사용할 수 있습니다.
    프레임 캐시 객체glGenFrameBuffers(n,*buffers)를 생성합니다.glBindFrameBuffer(GLenum target , gluint fb) ; 여기서 target은 GLDRAW_FRAMEBUFFER 시 fb는 target이 GL 인 프레임 버퍼의 렌더링 대상을 지정합니다.READ_FRAMEBUFFER에서 fb는 읽기 작업의 원본을 지정합니다.
    화면을 떠나서 렌더링하는 실례에 관한 책 336페이지를 참조할 수 있습니다.1개의 fb는 몇 개의renderbuffer와 연결되어 있으며, 각각의renderbuffer는glRenderbuffer Storage를 이용하여 그 형식을 지정해야 한다.그림을 그릴 때, bind fb를 사용해서 화면 렌더링을 하고, bind fb가 0이면 창에 렌더링합니다.
    스크린에서 렌더링하는 또 다른 용도는 동적 업데이트 무늬:glFramebuffer Texture2D (target,attachment,teturetarget,texture,level) 이다.2D 텍스쳐를 동적으로 업데이트하는 338페이지의 인스턴스를 참조하십시오.

    좋은 웹페이지 즐겨찾기