OpenGV Texture ile OpenCV (jpg ve png) içeren bir resim yüklemek istiyorum. İşteOpenGL Texture için OpenCV resmi yükleme
Ben OpenGL'ye resim yüklemek nasıl: Her zaman döndürür "image.empty" olarak, görüntü yüklenir
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);
}
yanlış
İştebenim yarattığım doku kullanarak sahne işlemek nasıl : Ben geometrisine doku uygulamak istediğiniz
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();
Ve nihayet fragmentShader
#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);
}
Doku koordinatları Vertex Arabellek Nesnesinden geliyor ve .obj dosyasından doğru şekilde ayarlanıyor. Ayrıca, rengi, örn. fragman gölgelendiricisinde kırmızı veya vec4'e (tCoord, 0,1); sonra nesne farklı renkte gölgelenir.
Doku uygulamak istediğimde ekran siyah renkte kalıyor ... Birisi bana yardım edebilir ve bana neden siyah kaldığını söyleyebilir mi?
Bu şekilde mi çalışıyor? Bu arada, filtre ve sıkma modlarını neden değiştirdiniz? Ve bir mipmapping filtresi kullanmıyorken neden mipmap oluşturuyorsunuz? –
Evet, bu şekilde çalışıyor - Kesinlikle en iyi çözüm değil ve geliştirmek için çok fazla potansiyele sahip - Ama çalışıyor - Ve mipmap'ler bir sonraki özellik olarak uygulanacak, ben sadece kullanıyorum satır – glethien
kaldırmak unuttum Görüntünüzü gösterme yönteminiz, ancak image.ptr() işlevini kullanmak için okuma erişimi ihlali yapıyorum. Lütfen gönderimi buradan görebilirsiniz: https://stackoverflow.com/questions/45013214/qt-signal-slot-cvmat-unable-to-read-memory-access-violation#45014271 – Pete