2013-07-15 4 views
1

내 프로그램의 목표는 Kinect의 비디오 스트림을 OpenGL을 사용하는 간단한 삼각형과 혼합하는 것입니다. 내 비디오 스트림을 표시하기 위해 간단한 쿼드를로드하고 고전적인 텍스처 매핑과 같이 비디오 프레임 버퍼를 넣습니다. 여기까지는 모두 괜찮습니다. 그러나 내 장면에 간단한 삼각형 (빨강, 초록, 파랑)을 추가하면 삼각형이 올바르게 표시되지만 질감이 파란색으로 오염됩니다. 실제로 API는 삼각형의 마지막 꼭지점에 마지막 색상을로드하는 것으로 보입니다. 파란색 색상입니다. 그러나 나는 그것이 그것을 지키는 이유를 이해하지 못한다.OpenGL을 사용하여 텍스처 매핑이 올바르게 작동하지 않습니다.

enter image description here

그리고 두 번째의 성상과 다음 프레임 : 여기

(모든이 올바른지) 첫 번째 프레임의 화면입니다

enter image description here

그리고 내 C++ 렌더링 코드 :

getKinectVideoData(_videoData); //Method that fills the video frame buffer for each frame 

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 
    glClearDepth(1.0f); 

    glViewport(0, 0, width, height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45.0f, (float)width/(float)height, 1.0f, 100.0f); 
    gluLookAt(0.0f, 0.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); 

    glMatrixMode(GL_MODELVIEW); 

    glBindTexture(GL_TEXTURE_2D, textureId); 


    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, (GLvoid*)_videoData); 
    glBindTexture(GL_TEXTURE_2D, 0); 

    glEnable(GL_TEXTURE_2D); 

    glBindTexture(GL_TEXTURE_2D, textureId); 
    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, (GLvoid*)_videoBuffer->GetBuffer()); 

    glBegin(GL_QUADS); 
    glTexCoord2f(0.0f, 0.0f); 
    glVertex3f(-1, -1, 0.0f); 
    glTexCoord2f(1.0f, 0.0f); 
    glVertex3f(1, -1, 0.0f); 
    glTexCoord2f(1.0f, 1.0f); 
    glVertex3f(1, 1, 0.0f); 
    glTexCoord2f(0.0f, 1.0f); 
    glVertex3f(-1, 1, 0.0f); 
    glEnd(); 

    glBindTexture(GL_TEXTURE_2D, 0); 

    glDisable(GL_TEXTURE_2D); 

    glBegin(GL_TRIANGLES); 
    glColor3ub(255, 0, 0); 
    glVertex3f(0.0f, 0.75f, 0.0f); 
    glColor3ub(0, 255, 0); 
    glVertex3f(0.75f, 0.0f, 0.0f); 
    glColor3ub(0, 0, 255); 
    glVertex3f(-0.75f, 0.0f, 0.0f); 
    glEnd(); 

glClear 호출을 사용하여 각 프레임의 시작 부분에서 버퍼를 지우고 매우 이상합니다. 누구든지 나를 도울 수 있습니까?

+0

또한 올바르게 작동합니다. 그것은 단지 당신에게 당신이 원하는 효과를주지 못합니다')) –

답변

2

텍스처 처리에 영향을주기 때문에 (255, 255, 255) (glColor 사용)으로 다시 설정해야합니다.

첫 번째 프레임에서 색이 흰색이므로 이미지가 올바르게 표시됩니다. 그러나 glColor에 대한 마지막 호출은 (0,0,255)이고 루프가 처음으로 돌아갑니다.

+0

Ok. 당신의 대답에 감사드립니다. – user1364743

관련 문제