OpenGL/GLUT вывод простой картинки
Всем привет!
встала задача вывести картинку средствами OpenGL/GLUT без особого использования других библиотек. Не долго думая, получился вот такой код (который рисует белое окно):
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
GLuint texId;
unsigned char *data;
uint32_t width, height;
void renderScene(void) {
// Clear Color and Depth Buffers
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Reset transformations
//glLoadIdentity();
// Set the camera
glBindTexture (GL_TEXTURE_2D, texId); // Set as the current texture
glTexImage2D (GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glBegin(GL_QUADS);
glTexCoord2d( 0.0, 1.0); glVertex2d(-1.0, -1.0);
glTexCoord2d( 0.0, 0.0); glVertex2d(-1.0, 1.0);
glTexCoord2d( 1.0, 0.0); glVertex2d( 1.0, 1.0);
glTexCoord2d( 1.0, 1.0); glVertex2d( 1.0, -1.0);
glEnd();
glutSwapBuffers();
}
int main(int argc, char **argv) {
const char* filename=argv[1];
cv::Mat img = cv::imread(filename);
width=img.cols;
height=img.rows;
data=(unsigned char *)img.data;
// init GLUT and create window
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("Lighthouse3D- GLUT Tutorial");
// register callbacks
glutDisplayFunc(renderScene);
// glutReshapeFunc(renderScene);
glutIdleFunc(renderScene);
// enter GLUT event processing cycle
glutMainLoop();
return 1;
}
OpenCV здесь чисто для облегчения загрузки картинки и будет позже заменено. В последствии не планируется даже натягивать текстуру на что-то - просто вывод на экран. Вопрос знатокам - что здесь я забыл сделать для вывода картинки?