Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
0 / 0 / 1
Регистрация: 08.10.2012
Сообщений: 40

Ошибка при загрузке текстуры

08.10.2012, 22:01. Показов 7539. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Хотел запустить свою первую текстуру в проекте C++ используя библиотеку OpenGL, при компиляции программы ошибок не выдает,но после компиляции,при появлении окна выдает Unknown DIB file format. Программа не работает.Загрузка текстур находиться на 37 строчке.
Рыскал в интернете,на английском форуме что-то писали про какой-то глюк с указанием директории проекта кажется, а на другом что-то писали про глубину цвета картинки.
Пожалусто помогите разобратся.
Код программы:
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#include <stdio.h>
#include <stdlib.h>
#include <gl\glut.h>
#include <glaux.h>
#include <math.h>
 
#define PI 3.14159265
 
//глобальные переменные
int Winwidth=1000;
int Winheight=1000;
int rotate_x,rotate_y;
char char_buf[20];
int mx,my,dmx,dmy;
 
float coord_x=0;
float coord_y;
float coord_z=0;
 
float detect_x=0;
float detect_y=0;
float detect_z=0;
 
float delta_x=0.0;
float delta_z=0.0;
 
float res_x;
float res_z;
float rad=0.0;
 
int angle;
 
unsigned int textures[1];
//специально выделил жирным
void LoadTextures()
{
    AUX_RGBImageRec *texture_1=auxDIBImageLoadA("example.bmp");//представление текстуры как набор цветов
    glGenTextures(1,&textures[0]);//сколько текстур будет генерироваться и где храняться
    glBindTexture(GL_TEXTURE_2D,textures[0]);//для того,чтобы указать с какой текстурой мы будем работать
    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,texture_1->sizeX,texture_1->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,texture_1->data);
}
void Draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();\
        glLoadIdentity();
        gluLookAt(coord_x,coord_y,coord_z,detect_x,0,detect_z,0,1,0);
        glRotatef(rotate_x,0,1,0);
        glBegin(GL_QUADS);
            glTexCoord2f(0,0);glVertex3f(0,100,0);
            glTexCoord2f(0,1);glVertex3f(0,200,0);
            glTexCoord2f(1,1);glVertex3f(100,200,0);
            glTexCoord2f(1,0);glVertex3f(100,100,0);
        glEnd();
        glBegin(GL_LINES);
            glColor3f(1,0,0);// RED - axis X
            glVertex3f(0,0,0);
            glVertex3f(100,0,0);
            glColor3f(0,1,0);// GREEN - axis y
            glVertex3f(0,0,0);
            glVertex3f(0,100,0);
            glColor3f(0,0,1);// BLUE - axis z
            glVertex3f(0,0,0);
            glVertex3f(0,0,100);
        glEnd();
        glColor3f(1,0,0);
        glutWireSphere(20,20,20);
        glTranslatef(0,110,0);
        glColor3f(0,1,1);
        glutWireCube(20);
        glRotatef(angle,0,1,0);
        glTranslatef(30,0,0);
        glColor3f(1,0,0);
        glutWireCube(5);
        glTranslatef(0,0,-100);
        glColor3f(1,0,0);
        glutWireCube(5);
    glPopMatrix();
    glPushMatrix();
        glLoadIdentity();
        gluLookAt(coord_x,coord_y,coord_z,detect_x,0,detect_z,0,1,0);
        glTranslatef(0,0,300);
        glColor3f(1,0,0);
        glutWireCube(20);
        glTranslatef(0,0,600);
        glColor3f(1,1,0);
        glutWireCube(20);
        glutSwapBuffers();
    glPopMatrix();
}
void Initialize()
{
    LoadTextures();
    glEnable(GL_TEXTURE_2D);
    glClearColor(0,0,0,1);
    glMatrixMode(GL_PROJECTION);
    //glLoadIdentity();
    //glOrtho(-Winwidth/2,Winwidth/2,-Winheight/2,Winheight/2,-200,200);
    gluPerspective(70,1,1,1000);
    //gluLookAt(0,0,500,0,0,0,0,1,0);// функция отображения в заданном ракурсе
    glMatrixMode(GL_MODELVIEW);
}
void Keyboard(unsigned char key,int x,int y)
{
    switch(key){
case 'a':
    coord_x-=1;//шаг камеры
    detect_x=coord_x;
    printf("camera=(%f;%f;%f);look=(%f;%f;%f)\n",coord_x,coord_y,coord_x,detect_x,detect_y,detect_z);
    break;
case 'd':
    coord_x+=1;
    detect_x=coord_x;
 
    delta_x=sin(rad*PI/180.0);
    delta_z=cos(rad*PI/180.0);
 
    printf("camera=(%f;%f;%f);look=(%f;%f;%f)\nrad=%f;\ndelta=(%f;%f)",coord_x,coord_y,coord_z,detect_x,detect_y,detect_z,rad,delta_x,delta_z);
    break;
case 'w':
    delta_x=sin(rad*PI/180.0);
    delta_z=cos(rad*PI/180.0);
 
    coord_z+=delta_z;
    coord_x+=delta_x;
    detect_z=coord_z+delta_z;
    detect_x=coord_x+delta_x;
 
    printf("camera=(%f;%f;%f);look=(%f;%f;%f)\nrad=%f;\ndelta=(%f;%f)\n",coord_x,coord_y,coord_z,detect_x,detect_y,detect_z,rad,delta_x,delta_z);
    break;
case 's':
    delta_x=sin(rad*PI/180.0);
    delta_z=cos(rad*PI/180.0);
 
    coord_z-=delta_z;
    coord_x-=delta_x;
    detect_z=coord_z+delta_z;
    detect_x=coord_x+delta_x;
 
    printf("camera=(%f;%f;%f);look=(%f;%f;%f)\nrad=%f;\ndelta=(%f;%f)\n",coord_x,coord_y,coord_z,detect_x,detect_y,detect_z,rad,delta_x,delta_z);
    break;
case 'q':rad+=1;
    delta_x=sin(rad*PI/180.0);
    delta_z=cos(rad*PI/180.0);
 
    detect_x=coord_x+delta_x;
    detect_z=coord_z+delta_z;
    printf("camera=(%f;%f;%f);look=(%f;%f;%f)\nrad=%f;\delta=(%f;%f)",coord_x,coord_y,coord_z,detect_x,detect_y,detect_z,rad,delta_x,delta_z);
    break;
case 'e':rad-=1;
    delta_x=sin(rad*PI/180.0);
    delta_z=cos(rad*PI/180.0);
    detect_x=coord_x+delta_x;
    detect_z=coord_z+delta_z;
    printf("camera=(%f;%f;%f);look=(%f;%f;%f)\nrad=%f;\n",coord_x,coord_y,coord_z,detect_x,detect_y,detect_z,rad);
    break;
    }
}
void Timer1(int value)
{
angle++;
glutPostRedisplay();
glutTimerFunc(50,Timer1,0);
}
void Timer2(int)
{
glutTimerFunc(50,Timer2,0);
}
void Mouse(int x,int y)
{
    
    x=x-Winwidth/2;
    y=y-Winheight/2;
    
    mx=x;
    my=y;
    printf("m=(%f;%f);dm=(%f;%f)\nrad=%f;\n",x,y,dmx,dmy,rad);
}
void main(int argv,char**argc)
{
//Инициализация окна
glutInit(&argv,argc);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_MULTISAMPLE|GLUT_STENCIL);
glutInitWindowSize(Winwidth,Winheight);
glutInitWindowPosition(200,200);
glutCreateWindow("Lesson one!");
//Отрисовка примитивов
glutDisplayFunc(Draw);
glutKeyboardFunc(Keyboard);
glutPassiveMotionFunc(Mouse);
glutTimerFunc(50,Timer1,0);
//glutTimerFunc(50,Timer2,0);
Initialize();
glutMainLoop();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.10.2012, 22:01
Ответы с готовыми решениями:

Ошибка "Ссылка на неразрешенный внешний символ" при загрузке текстуры в Opengl c++
Сколько не мучился не понимаю как решить проблему с этой ошибкой. Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ...

Не освобождается память при загрузке текстуры (C#)
после загрузки текстуры почему-то не освобождается память. // с отображением текстуры вроде все нормально для взаимодействия OpenGl...

Ошибка при загрузке текстур
Компилятор ругается при подключении AUX_RGBImageRec *image1 = auxDIBImageLoad(&quot;image1.bmp&quot;); Подчеркивает &quot;image1.bmp&quot;. ...

7
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,377
Записей в блоге: 6
08.10.2012, 22:47
Судя по
Цитата Сообщение от Vintorez_92 Посмотреть сообщение
Unknown DIB file format
похоже проблема именно в
Цитата Сообщение от Vintorez_92 Посмотреть сообщение
что-то писали про глубину цвета картинки.
Можно попробовать открыть Paint'ом например и пересохранить как 24бит.
А лучше через дебаггер пошагово поковыряться в auxDIBImageLoadA
0
0 / 0 / 1
Регистрация: 08.10.2012
Сообщений: 40
08.10.2012, 22:58  [ТС]
Странно,но в свойствах картинки формат bmp выдает формат 64x64 и глубину 24 бита,и всё равно ошибка остается прежней. А как можно разобрать функцию через дебаггер?
0
angstrom
09.10.2012, 00:30
Цитата Сообщение от Vintorez_92 Посмотреть сообщение
Странно... глубину 24 бита...
Это смотря чем смотреть, не все редакторы/просмотрщики показывает верно. Попробуй пересохрани под другим именем и с глубиной 24 бита. Увидишь размер изменится или нет.
0 / 0 / 1
Регистрация: 08.10.2012
Сообщений: 40
09.10.2012, 00:50  [ТС]
Разобрался,причиной ошибки оказалась глубина цвета - 24бита. В паинте уменьшил до 16 бит и вроде бы все запускается как надо.Но почему-то в созданной мной 3Д перспективной проекции текстура не отображается(вместо неё обычный квадрат без текстуры).Помогите пожалусто,в чем может быть ошибка?Отображать объект с нужной текстурой необходимо в 3Д.
0
angstrom
09.10.2012, 00:57
Я с функцией AUX_RGBImageRec не работаю (не нравится), поэтому по ней точно сказать не могу.
C++
1
glTexImage2D(GL_TEXTURE_2D,0,3,texture_1->sizeX,texture_1->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,texture_1->data);
проверьте, имеются ли данные в texture_1->data. Ну и размер загруженной текстуры texture_1->sizeX, texture_1->sizeY
0 / 0 / 1
Регистрация: 08.10.2012
Сообщений: 40
09.10.2012, 01:43  [ТС]
пришел к выводу,что glDisable(GL_TEXTURE_2D); отменяет текстуры в программе,поэтому и не выводилось,но при отмене этой функции у меня программа показывает черный экран,и никаких примитивов не видно,хотя должны быть. Программа не работает с текстурами,только что ей мешает...
0
angstrom
09.10.2012, 01:46
Давай оригинальную, картинку буду проверять. Только мне нужно время так как придётся конвертировать на Дельфи и избавляться от ненавистного GLUT-а.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2012, 01:46
Помогаю со студенческими работами здесь

Ошибка при загрузке моделей из Milkshape 3D
Здравствуйте. Пытаюсь загрузить модель ms3d по этому уроку http://pmg.org.ru/nehe/nehe31.htm . Выдается исключение (read access violation...

Как побитово скопировать с текстуры на текстуры разных форматов, не прибегая к обращениям в CPU?
Если ли способ в opengl скопировать бит в бит текстуры любого формата в uint8 одноканальный, но с расширенной шириной? Да кстати нужно...

Ошибка создания текстуры с glaux
возникла проблема с созданием текстуры. Ввожу: AUX_RGBImageRec *texture1; texture1 = auxDIBImageLoadA(&quot;fun.bmp&quot;); мне...

Поворот Текстуры (не вращая полигон текстуры)
Возник такой вопрос? Как повернуть текстуру на какой то определенный градус не вращая при этом полигон на который мы ее накладываем!...

Devil загрузка текстуры ошибка сегментирования
Сабж #include &lt;iostream&gt; #include &lt;IL/il.h&gt; #include &lt;IL/ilu.h&gt; #include &lt;GL/glut.h&gt; #include &lt;GL/freeglut.h&gt; using...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru