2013-03-13 4 views
0

GLcontrol에서 텍스처를 그린 상태에서 그 위에 점을 그립니다. 대신, 나는 그려야 할 점의 색으로 설정된 전체 텍스처를 얻습니다. 텍스처 형식을 비활성화하고 점 도면을 활성화해야하지만 솔루션에 도달 할 수없는 것 같아요.텍스처 위쪽의 드로잉 포인트 OpenGL

다음은 draw 함수입니다. 기본적으로 그릴 점은 ROI [0]이지만 포인트는 아래 그림과 같습니다 (이미지는 "포인트"를 그리기 전에 그레이 스케일입니다).

내 코드를 변경해야합니까
private: void drawImg(int img){ 

     int w=this->glControl_create_grid->Width; 
     int h=this->glControl_create_grid->Height; 
     GL::MatrixMode(MatrixMode::Projection); 

     GL::LoadIdentity(); 
     GL::Ortho(0, w, 0, h, -1, 1); // Bottom-left corner pixel has coordinate (0, 0) 
     GL::Viewport(0, 0, w, h); // Use all of the glControl painting area 

     GL::Clear(ClearBufferMask::ColorBufferBit | ClearBufferMask::DepthBufferBit); 
     GL::ClearColor(Color::LightGray); 
     GL::MatrixMode(MatrixMode::Modelview); 
     GL::LoadIdentity(); 

     GL::Enable(EnableCap::Texture2D); 
     GL::BindTexture(TextureTarget::Texture2D, img); 
     OpenTK::Graphics::OpenGL::ErrorCode error=GL::GetError(); 
      GL::Begin(BeginMode::Quads); 
       GL::TexCoord2(0, 0); 
       GL::Vertex2(0 ,h); 

       GL::TexCoord2(1, 0); 
       GL::Vertex2(w, h); 

       GL::TexCoord2(1, 1); 
       GL::Vertex2(w, 0); 

       GL::TexCoord2(0, 1); 
       GL::Vertex2(0, 0); 
      GL::End(); 
      GL::Disable(EnableCap::Texture2D); 
      if (ROI[0].x!=0||ROI[0].y!=0){ 
       GL::Color3(Color::Red); 
       GL::Begin(BeginMode::Points); 
       GL::Vertex2(ROI[0].x,ROI[0].y); 
       GL::End(); 
      } 


    } 

enter image description here

? 나는 그것을 달성 할 수 없습니다 ....

답변

3

나는 대답을 찾았습니다. 텍스처를 그리기 전에 텍스처를 적용 할 때 색상을 적용하는 것만으로도 텍스처를 그리기 전에 GL::Color3(Color::White)을 추가해야했습니다.

+1

텍스처 환경 (glTexEnv로 설정)의 설정에 따라 정점 색상이 텍스처 색상을 변조 할 수 있습니다. 이것이 GL_MODULATE 모드입니다. 또 다른 모드 인 GL_DECAL이 있는데 이것은 정점 색상의 "꼭대기"에 텍스처를 그립니다. 주로 투명 영역이있는 텍스처와 함께 유용합니다. 그러나 오늘날 모든 것은 셰이더를 통해 발생하며 프로세스의 모든 단계에서 담당합니다 (고정 된 기능과 비교하여 몇 개의 스위치 만 사용할 수 있음). – datenwolf