使用opengl和opencv加载纹理
Loading texture using opengl and opencv
我在试图使纹理在某些几何体上正确显示时遇到问题。基本上,我有一些三角形来描述一个人的脸的形状,然后有一个png,我必须用opencv加载。我有以下代码
void Geometry::loadTex(const char* fileName){
RenderUtils * u = new RenderUtils();
IplImage* img = u->getImg(fileName);
GLuint texture;
// allocate a texture name
glGenTextures( 1, &texture );
// select our current texture
glBindTexture( GL_TEXTURE_2D, texture );
// select modulate to mix texture with color for shading
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, img->imageData);
glEnable(GL_TEXTURE_2D);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
//delete [] t;
}
IplImage* RenderUtils::getImg(const char *fileName){
IplImage* img = 0;
img = cvLoadImage(fileName, CV_LOAD_IMAGE_COLOR);
if(!img) cout << "Couldn't load image " << fileName << endl;
return img;
}
void Geometry::display(){
glPushMatrix();
glTranslatef(20.0f, 20.0f, -40.f);
glRotatef(180.f, 0.0, 0.0, 1.0);
for(int i = 0; i < numTris; i+=3){
glBegin(GL_TRIANGLES);
glTexCoord3f(mean[tri[i]] / texWidth, ((mean[meanLength/2 + tri[i]] - maximumMu) * -1) / texHeight, 0 );
glVertex3f(mean[tri[i]], (mean[meanLength/2 + tri[i]] - maximumMu) * -1, 0);
glTexCoord3f(mean[tri[i+1]] / texWidth, ((mean[meanLength/2 + tri[i+1]] - maximumMu) * -1) / texHeight, 0 );
glVertex3f(mean[tri[i+1]], (mean[meanLength/2 + tri[i+1]] - maximumMu) * -1, 0);
glTexCoord3f(mean[tri[i+2]] / texWidth, ((mean[meanLength/2 + tri[i+2]] - maximumMu) * -1) / texHeight, 0 );
glVertex3f(mean[tri[i+2]], (mean[meanLength/2 + tri[i+2]] - maximumMu) * -1, 0);
glEnd();
}
glPopMatrix();
glutSwapBuffers();
glFlush();
}
因此首先调用loadTex,它调用loadgetImg,然后从Glut调用display方法。
您可能想看看这个。它正是你想要的。
相关文章:
- 在 OpenGL 中加载纹理C++
- 从文件问题加载纹理 Android NDK 和 OpenGL
- 是什么导致 glTexSubImage1D() - 加载纹理时在此示例中出现GL_INVALID_VALUE错误?
- Directx11 加载纹理
- 如何在单独的线程上加载纹理到主内存并使用它在另一个线程上渲染
- 如何加载纹理Opengl
- DirectX9 C++ - 在窗口最小化时加载纹理
- 渲染时加载纹理 (OpenGL)
- 使用 Openscenegraph 加载纹理时出错
- SDL2和GLFW3:加载纹理;违反访问
- 使用opengl和opencv加载纹理
- 加载纹理无法正常工作的功能
- 仅使用 alpha 值加载纹理
- OpenGL 更改/重新加载纹理
- 在DirectX9/C++中为OBJMesh加载纹理坐标
- OpenGL在没有或有静态设备上下文的情况下加载纹理
- 使用 OpenCV 为 OpenGL 加载纹理
- c++ OpenGL/SDL 2.0加载纹理失败
- 我如何使用FreeImage库加载纹理到OpenGL
- 使用SOILs OGL函数和OpenGL加载纹理