Хотите поместить текстуры на фразу в OpenGL - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу поместить текстуры в фразу, которую я создал.Тем не менее, в настоящее время мой код не имеет наложения текстур.Он открывает только предупреждение о том, что файл не может быть открыт при запуске.Зачем?И, пожалуйста, исправьте это.

void view() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);
    glDisable(GL_TEXTURE_GEN_S);
    glDisable(GL_TEXTURE_GEN_T);
    glLoadIdentity();
    glBindTexture(GL_TEXTURE_2D, id);
    glutSolidSphere(0.4, 20, 20);
}

void main(int argc, char** argv) {
    unsigned int id;
    AUX_RGBImageRec *texture;
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(1200, 800);
    glutCreateWindow("test");
    GLfloat plane_coef_s[] = { 1.0, 0.0, 0.0, 1.0 };
    GLfloat plane_coef_t[] = { 0.0, 1.0, 0.0, 1.0 };
    glEnable(GL_TEXTURE_GEN_S);
    glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
    glTexGenfv(GL_S, GL_OBJECT_PLANE, plane_coef_s);
    glEnable(GL_TEXTURE_GEN_T);
    glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
    glTexGenfv(GL_T, GL_OBJECT_PLANE, plane_coef_t);
    sphere = gluNewQuadric();
    gluQuadricTexture(sphere, GL_TRUE);
    tex = auxDIBImageLoad("test.bmp");
    glGenTextures(2, &id);
    glBindTexture(GL_TEXTURE_2D, id); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, tex->sizeX, tex->sizeY, 0, GL_RGB,
    GL_UNSIGNED_BYTE, tex->data);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}

1 Ответ

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

Сначала убедитесь, что файл text.bmp находится в том же месте, что и файл .cpp.

glutSolidSphere (0.4, 20);, по-видимому, не имеет сопоставления текстуры.Объявите GLUquadric *sphere; как глобальную переменную и измените glugSphere (sphere, 0.4, 20, 20);.

И эти две переменные необходимо объявить как глобальные переменные.

Итак, перейдите к приведенному ниже коду.

unsigned int id;
AUX_RGBImageRec *texture;
GLUquadric *sphere;

void view() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);
    glDisable(GL_TEXTURE_GEN_S);
    glDisable(GL_TEXTURE_GEN_T);
    glLoadIdentity();
    glBindTexture(GL_TEXTURE_2D, id);
    gluSphere(sphere, 0.4, 20, 20);
}

void main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(1200, 800);
    glutCreateWindow("test");
    GLfloat plane_coef_s[] = { 1.0, 0.0, 0.0, 1.0 };
    GLfloat plane_coef_t[] = { 0.0, 1.0, 0.0, 1.0 };
    glEnable(GL_TEXTURE_GEN_S);
    glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
    glTexGenfv(GL_S, GL_OBJECT_PLANE, plane_coef_s);
    glEnable(GL_TEXTURE_GEN_T);
    glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
    glTexGenfv(GL_T, GL_OBJECT_PLANE, plane_coef_t);
    sphere = gluNewQuadric();
    gluQuadricTexture(sphere, GL_TRUE);
    tex = auxDIBImageLoad("test.bmp");
    glGenTextures(2, &id);
    glBindTexture(GL_TEXTURE_2D, id); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, tex->sizeX, tex->sizeY, 0, GL_RGB,
    GL_UNSIGNED_BYTE, tex->data);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...