1 Востаннє редагувалося c3c (31.01.2017 15:37:41)

Тема: Вивід зображення 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);
}
Post's attachments

code.rar 4.64 kb, 62 downloads since 2017-01-31 

2

Re: Вивід зображення opengl

97 рядок

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
Подякували: c3c, Yola2

3

Re: Вивід зображення opengl

83

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

Там потрібно очистити кольори

Подякували: c3c1

4 Востаннє редагувалося c3c (01.02.2017 21:38:50)

Re: Вивід зображення opengl

тема закрита .всім дякую!!