OpenCV image laden für OpenGL-Textur

Möchte ich ein Bild laden (jpg und png) mit OpenCV als OpenGL-Textur.

Hier ist, wie ich das Bild laden zu OpenGL:

glEnable(GL_TEXTURE_2D);
  textureData = loadTextureData("textures/trashbin.png");
  cv::Mat image = cv::imread("textures/trashbin.png");
  if(image.empty()){
      std::cout << "image empty" << std::endl;
  }else{
      glGenTextures( 1, &textureTrash );
      glBindTexture( GL_TEXTURE_2D, textureTrash );
      glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
      glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
      glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S , GL_REPEAT );
      glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
      glTexImage2D(GL_TEXTURE_2D,0,3,image.cols, image.rows,0,GL_RGB,GL_UNSIGNED_BYTE, image.data);
  }

Das Bild geladen ist, als "Bild.leer" immer false zurück

Hier ist, wie ich das Rendern der Szene mit dem erstellten textur:

  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, textureTrash);
  glm_ModelViewMatrix.top() = glm::translate(glm_ModelViewMatrix.top(),0.0f,-13.0f,-10.0f);
  glUniformMatrix4fv(uniformLocations["modelview"], 1, false, glm::value_ptr(glm_ModelViewMatrix.top()));

  std::cout << "textureShaderID: " << glGetUniformLocation(shaderProgram,"texture") << std::endl;

  glUniform1i(glGetUniformLocation(shaderProgram,"texture"), 0);
  objLoader->getMeshObj("trashbin")->render();

Und schließlich der fragmentShader wo ich will, um die textur anwenden, um meine geometrie

#version 330
in vec2 tCoord;

//texture //
//TODO: set up a texture uniform //
uniform sampler2D texture;

//this defines the fragment output //
out vec4 color;

void main() {
  //TODO: get the texel value from your texture at the position of the passed texture coordinate //
  color = texture2D(texture, tCoord);
}

Die textur-Koordinaten sind comeing von einem Vertex-Buffer-Objekt und sind richtig eingestellt, aus dem .obj-Datei. Auch ich kann sehen, dass das Objekt in meiner Szene, wenn ich die Farbe auf z.B. rot in den fragment-shader, oder vec4(tCoord,0,1); dann das Objekt ist schattiert in verschiedenen Farben.

Leider bleibt der Bildschirm schwarz, wenn ich will, um die textur anwenden... Kann mir jemand helfen und mir sagen, warum bleibt schwarz?

InformationsquelleAutor glethien | 2013-05-29
Schreibe einen Kommentar