Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
Leviosa
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 29
#1

Наложение текстуры на цилиндр и тор

18.09.2017, 19:55. Просмотров 324. Ответов 5
Метки нет (Все метки)

Добрый вечер!
Есть задача. Необходимо, чтобы на цилиндр и тор по нажатию клавиши накладывались текстуры.
Вот код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <windows.h>
#include <freeglut.h>
#include <glut.h>
#include <GL/glaux.h>
#include"Constatnts.h"
 
AUX_RGBImageRec* photo_image;
GLuint texture;
 
static void resize(int width, int height)
{
    const float ar = (float)width / (float)height;
 
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
 
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}
 
static void display(void)
{
 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3d(1, 1, 0);
 
    glPushMatrix();
    glTranslated(-1.4, -1.4, -10);
    glRotated(65, 1.0, 0.0, 0.0);
    glutSolidCylinder(1, 2.5, 16, 16);
    glPopMatrix();
 
    glPushMatrix();
    glTranslated(-2.0, 2.0, -8);
    glRotated(65, 1.0, 0.0, 0.0);
    glutSolidTorus(0.1, 0.5, 16, 16);
    glPopMatrix();
 
    glutSwapBuffers();
}
 
void keyboard(unsigned char key, int x, int y)
{
    switch (key) {
    case 27: /* escape */
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                
                glEnable(GL_TEXTURE_2D);
        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
        glBindTexture(GL_TEXTURE_2D, texture);
        
        glPushMatrix();
        glTranslated(-1.4, -1.4, -10);
        glRotated(65, 1.0, 0.0, 0.0);
        glScalef(2.0, 2.0, 2.0);
        glutSolidCylinder( 1, 2.5, 16, 16);
        glPopMatrix();
 
        glPushMatrix();
        glTranslated(-2.0, 2.0, -8);
        glRotated(65, 1.0, 0.0, 1.0);
        glScalef(1.0, 1.0, 1.0);
        glutSolidTorus(0.1, 0.5, 16, 16);
        glPopMatrix();
 
        glutSwapBuffers();
        break;
    }
    glFlush();
    glDisable(GL_TEXTURE_2D);
}
 
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
 
    glutInitWindowSize(640, 640);
    glutInitWindowPosition(10, 10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
 
    glutCreateWindow("Graph1");
 
    glutReshapeFunc(resize);
    glutDisplayFunc(display);
 
    glClearColor(1, 1, 1, 1);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
 
        photo_image = auxDIBImageLoad(L"texture1.bmp");
    
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 
    glTexImage2D(GL_TEXTURE_2D, 0, 3,
        photo_image->sizeX,
        photo_image->sizeY,
        0, GL_RGB, GL_UNSIGNED_BYTE,
        photo_image->data); glutKeyboardFunc(keyboard);
 
    glutMainLoop();
    
    return EXIT_SUCCESS;
}
Однако при нажатии Esc ничего не происходит. Тор и цилиндр остаются своего цвета. Как это исправить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2017, 19:55
Ответы с готовыми решениями:

Наложение текстуры
Здравствуйте, как наложить текстуру на пятиугольник?

Наложение текстуры
Здравствуйте, подскажите пожалуйста почему при наложении текстуры выдается...

Наложение текстуры
Добрый день! Пытаюсь наложить текстуру. Прочитать получается, а наложить не...

Автоматическое наложение текстуры
Я налаживаю текстуру вот так: AUX_RGBImageRec *texture1; texture1 =...

Наложение текстуры в OpenGl
У меня возникла проблема на 6 уроке народного учебника по OpenGl (английская ...

5
vxg
Модератор
3247 / 2048 / 322
Регистрация: 13.01.2012
Сообщений: 7,930
18.09.2017, 20:38 #2
Leviosa, а если вы их накладываете с рождения они накладываются?
0
Leviosa
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 29
18.09.2017, 20:49  [ТС] #3
vxg, Нет
0
vxg
Модератор
3247 / 2048 / 322
Регистрация: 13.01.2012
Сообщений: 7,930
18.09.2017, 20:54 #4
Leviosa, надо глянуть под отладчиком корректно ли загружается изображение - может картину просто не может найти. А вообще - уйти от AUX на что-то другое например как тут Библиотека графических примитивов. Отдаю всем хорошим людям - не жалко
0
Leviosa
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 29
18.09.2017, 21:00  [ТС] #5
Да, вы оказались правы: проблема была в файле с текстурой.
А чем плох glaux?
0
Antikl
с++
294 / 287 / 153
Регистрация: 15.07.2015
Сообщений: 1,539
Завершенные тесты: 6
18.09.2017, 23:23 #6
Цитата Сообщение от Leviosa Посмотреть сообщение
А чем плох glaux?
устарел, не безопасен
0
18.09.2017, 23:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2017, 23:23

Наложение текстуры на прямоугольник
Привет. Пытаюсь наложить текстуру на обычный прямоугольник. Что делаю не...

Наложение текстуры на сферу
Привет. Подскажите, как правильно наложить текстуру на сферу? Имею такой...

Наложение текстуры opengl
Программирую в Dev cpp. Никак не могу найти код наложения текстур, который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru