From baef478bbacea2204b2e8528c7b5da3fe8915407 Mon Sep 17 00:00:00 2001 From: mmcwilliams Date: Mon, 1 Apr 2024 17:45:50 -0400 Subject: [PATCH] Texture loads but is drawn at right angle --- main.cpp | 80 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 21 deletions(-) diff --git a/main.cpp b/main.cpp index 6c5421b..4f50f1e 100644 --- a/main.cpp +++ b/main.cpp @@ -26,49 +26,87 @@ GLint screenWidth = 0; GLint screenHeight = 0; time_stamp ts; -void getScreenDimensions () { +void loadTexture (GLuint& imageTexture1) +{ + string image_path = samples::findFile("chart.png"); + Mat image = imread(image_path, IMREAD_COLOR); + if (image.empty()) { + cout << "image empty" << endl; + } else { + cout << "loaded " << image_path << endl; + //flip(image, image, 1); +#if (CV_VERSION_MAJOR >= 4) + cvtColor(image, image, cv::COLOR_BGR2RGB); +#else + cvtColor(image, image, CV_BGR2RGB); +#endif + //glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glGenTextures(1, &imageTexture1); + glBindTexture(GL_TEXTURE_2D, imageTexture1); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + // Set texture clamping method + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + + glTexImage2D(GL_TEXTURE_2D, // Type of texture + 0, // Pyramid level (for mip-mapping) - 0 is the top level + GL_RGB, // Internal colour format to convert to + image.cols, // Image width i.e. 640 for Kinect in standard mode + image.rows, // Image height i.e. 480 for Kinect in standard mode + 0, // Border width in pixels (can either be 1 or 0) + GL_RGB, // Input image format (i.e. GL_RGB, GL_RGBA, GL_BGR etc.) + GL_UNSIGNED_BYTE, // Image data type + image.ptr()); // The actual image data itself + } +} + +void getScreenDimensions () +{ if (screenWidth == 0 && screenHeight == 0) { GLint dims[4] = {0}; glGetIntegerv(GL_VIEWPORT, dims); screenWidth = dims[2]; screenHeight = dims[3]; cout << screenWidth << "," << screenHeight << endl; + loadTexture(imageTexture); } } -void displayMe(void) +void display(void) { getScreenDimensions(); - - string image_path = samples::findFile("chart.png"); - Mat image = imread(image_path, IMREAD_COLOR); - #if (CV_VERSION_MAJOR >= 4) - cvtColor(image, image, cv::COLOR_BGR2RGB); - #else - cvtColor(image, image, CV_BGR2RGB); - #endif + ts = time_point_cast(system_clock::now()); - // Set every pixel in the frame buffer to the current clear color. glClear(GL_COLOR_BUFFER_BIT); - glBegin(GL_POLYGON); - glColor3f(1, 0, 0); glVertex3f(-1.0, -1.0, 0.5); - glColor3f(0, 1, 0); glVertex3f(1.0, -1.0, 0); - glColor3f(0, 0, 1); glVertex3f(1.0, 1.0, 0); - glColor3f(0, 0, 0); glVertex3f(-1.0, 1.0, 0); - glEnd(); + glEnable(GL_TEXTURE_2D); + //glViewport(0, 0, screenWidth, screenHeight); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + glBindTexture(GL_TEXTURE_2D, imageTexture); - // Flush drawing command buffer to make drawing happen as soon as possible. - glFlush(); + glBegin(GL_QUADS); // front face + glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f); //bottom right + glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 1.0f, 0.0f); //top right + glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f); //top left + glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, -1.0f, 0.0f); //bottom left + glEnd(); + glDisable(GL_TEXTURE_2D); + glutSwapBuffers(); + + //glFlush(); } int main(int argc, char** argv) { - ts = time_point_cast(system_clock::now()); glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE); glutCreateWindow("opengl_opencv_example"); glutFullScreen(); - glutDisplayFunc(displayMe); + glutDisplayFunc(display); glutMainLoop(); return 0; } \ No newline at end of file