Как вы кладете текстуры на квадрат с помощью OpenGL? - PullRequest
0 голосов
/ 17 ноября 2018

Я пытался применить текстуры к квадратам с помощью следующего кода, но они не применялись.Есть ли проблема с кодом выше?«дд» печатается в окне консоли.Я думаю, что это читать файл BMP.но я вижу только белый квадрат, как на следующих рисунках.

white square

Растровые файлы находятся в папке проекта.

path

LoadBMP() - это функция, открывающая файл bmp.LoadGLTextures() - это функция для загрузки текстур.

пс.Я не очень хорош в английском.Прости.

#define _CRT_SECURE_NO_DEPRECATE
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <GL/GLAUX.H>

#pragma comment (lib,"glaux.lib")

unsigned int MyTextureObiect[1];
AUX_RGBImageRec *pTextureImage[1];

AUX_RGBImageRec *LoadBMP(char *szFilename) {
    FILE * pFile = NULL;
    if (!szFilename) {
        return NULL;
    }
    pFile = fopen(szFilename, "r");
    if (pFile) {
        fclose(pFile);
        return auxDIBImageLoad(szFilename);
    }
    return NULL;
}

int LoadGLTextures() {
    int Status = FALSE;
    memset(pTextureImage, 0, sizeof(void *) * 1);
    if (pTextureImage[0] = LoadBMP("butterflyans.bmp")) {
        printf("dd");
        Status = TRUE;
        glGenTextures(1, &MyTextureObiect[0]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexImage2D(GL_TEXTURE_2D, 0, 3, pTextureImage[0]->sizeX, pTextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pTextureImage[0]->data);
        glEnable(GL_TEXTURE_2D);
    }
    if (pTextureImage[0]) {
        if (pTextureImage[0]->data) {
            free(pTextureImage[0]->data);
        }
        free(pTextureImage[0]);
    }
    return Status;
}




void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBindTexture(GL_TEXTURE_2D, MyTextureObiect[0]);
    glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f);
    glVertex3f(-0.5, -0.5, 0.0);
    glTexCoord2f(1.0f, 0.0f);
    glVertex3f(0.5, -0.5, 0.0);
    glTexCoord2f(1.0f, 1.0f);
    glVertex3f(0.5, 0.5, 0.0);
    glTexCoord2f(0.0f, 1.0f);
    glVertex3f(-0.5, 0.5, 0.0);
    glEnd();
    glFlush();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("OpenGL Drawing Example");
    glutDisplayFunc(myDisplay);
    if (LoadGLTextures()) {
        glEnable(GL_TEXTURE_2D);
    }
    glutMainLoop();

    return 0;
}

1 Ответ

0 голосов
/ 17 ноября 2018

Вы пропустили привязку glBindTexture объекта текстуры, прежде чем устанавливать параметры текстуры и задавать текстуру.
Примечание. glTexParameter и glTexImage2D применяются к текущей привязанной текстуре:

glGenTextures(1, &MyTextureObiect[0]);

glBindTexture(GL_TEXTURE_2D, MyTextureObiect[0]); // <---- bind the texture

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D( .... );

Кстати, вы устанавливаете GL_TEXTURE_MIN_FILTER дважды, но вы никогда не устанавливаете GL_TEXTURE_MAG_FILTER.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...