Тема: Вивід зображення opengl
Тут виникла проблема при виведені зображення на екран і малюванні після того .
1.Хто може підкажіть інші методи виведення зображення.
2.Підкажіть як вирішити мою проблему хто може дякую.
3.Код і фото внизу
#include <freeglut.h>
#include <fstream>
#include <stdio.h>
#include <iostream>
#include <malloc.h>
#include <time.h>
#define WIDTH 80
#define HEIGHT 45
GLuint textura_id;
struct textura_struct
{
int W;
int H;
unsigned char *Image;
}get_textura;
int LoadTexture(char *FileName)
{
FILE *F;
/* Открываем файл */
if ((F = fopen(FileName, "rb")) == NULL)
return 0;
/*Перемещаемся в bmp-файле на нужную позицию, и считываем ширину и длинну */
fseek(F, 18, SEEK_SET);
fread(&(get_textura.W), 2, 1, F);
fseek(F, 2, SEEK_CUR);
fread(&(get_textura.H), 2, 1, F);
printf("%d x %d\n", get_textura.W, get_textura.H);
/* Выделяем память под изображение. Если память не выделилась, закрываем файл и выходим с ошибкой */
if ((get_textura.Image = (unsigned char *)malloc(sizeof(unsigned char) * 3 * get_textura.W * get_textura.H)) == NULL)
{
fclose(F);
return 0;
}
/* Считываем изображение в память по 3 бита, то бишь RGB для каждого пикселя */
fseek(F, 30, SEEK_CUR);
fread(get_textura.Image, 3, get_textura.W * get_textura.H, F);
glGenTextures(1, &textura_id);
glBindTexture(GL_TEXTURE_2D, textura_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, get_textura.W, get_textura.H, GL_BGR_EXT, GL_UNSIGNED_BYTE, get_textura.Image);
free(get_textura.Image);
fclose(F);
return 1;
}
void draw() {
HDC hDC;
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textura_id);
glPushMatrix();
glRotatef(0.0f, 0.0f, 0.0f, 1.0f);
glBegin(GL_QUADS);
glTexCoord2d(0, 0); glVertex2d(0, 0);
glTexCoord2d(0, 1); glVertex2d(0, 30);
glTexCoord2d(1, 1); glVertex2d(80, 30);
glTexCoord2d(1, 0); glVertex2d(80, 0);
glEnd();
glPopMatrix();
glBegin(GL_QUADS);
glColor3f(1, 1, 0);
glVertex2d(0, 30);
glColor3f(1, 0, 1);
glVertex2d(0, 45);
glColor3f(1, 1, 0);
glVertex2d(80, 45);
glColor3f(0, 1, 0);
glVertex2d(80, 30);
glEnd();
glutSwapBuffers();
}
void Timer(int){
draw();
glutTimerFunc(150, Timer, 0);
}
int main(int argc, char ** argv){
srand(time(NULL));
glutInit(&argc, argv);
glutInitDisplayMode(/*GL_BGR_EXT */GLUT_RGB);
glutInitWindowPosition(100, 50);
glutCreateWindow("***TEST***");
glutDisplayFunc(draw);
glutTimerFunc(150, Timer, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, WIDTH, 0, HEIGHT, -1, 1);
if (LoadTexture((char *)"s1.bmp") != 1){ printf("Не удалось загрузить изображение\n"); }
glutMainLoop();
return(0);
}