В C ++, OpenGL, Glut, как связать image.c с текстурой, где image.c происходит из исходного кода Gimp & Export & gt; C

Так что я провел последние два дня, просматривая различные виды «решений» моего вопроса через Google, их не так много, и те, которые я нашел, похоже, не работают.

Я экспортирую небольшое тестовое изображение в виде файла ресурсов .c из Gimp, его размер составляет 64×64, и у него есть альфа-канал.
В основном выглядит так:

    static const struct {
unsigned int     width;
unsigned int     height;
unsigned int     bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */
char            *comment;
unsigned char    pixel_data[64 * 64 * 4 + 1];
} ship = {
64, 64, 4,
(char*) 0,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""\0\0\0\0\0\0\0\0\237\237\237\377\237\237\237\377\237\237\237\377\237\237""\237\377\237\237\237\377\237\237\237\377\237\237\237\377vZI\0vZI\0vZI\0\0""\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

и так продолжается довольно долго, как и следовало ожидать, пока, наконец, не закончится

    "\237\237\377\237\237\237\377\237\237\237\377",
};

Так как же я могу использовать этот файл ресурсов? Если бы кто-нибудь мог привести пример, необходимый минимум для создания квадрата с нанесенной на него текстурой, я был бы очень признателен.

0

Решение

Глядя на справочная страница для glTexImage2D, это сделано как (из Вот):

GLuint texName1 = 0;

glGenTextures(1, &texName1);
glBindTexture(GL_TEXTURE_2D, texName1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
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_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D(GL_TEXTURE_2D, 0, ship.bytes_per_pixel, ship.width, ship.height, 0, GetDataFormat(), GetDataType(), ship.pixel_data);

glColor3f(1, 1, 0);
glBindTexture(GL_TEXTURE_2D, texName1);
glBegin(GL_QUADS);
glTexCoord2f (0.0, 0.0);
glVertex3f (0.0, 0.0, -5.0f);
glTexCoord2f (1.0, 0.0);
glVertex3f (.5, 0.0, -5.0f);
glTexCoord2f (1.0, 1.0);
glVertex3f (.5, .5, -5.0f);
glTexCoord2f (0.0, 1.0);
glVertex3f (0.0, .5, -5.0f);
glEnd();

Ключевая строка такова:

glTexImage2D(GL_TEXTURE_2D, 0, ship.bytes_per_pixel, ship.width, ship.height, 0, GetDataFormat(), GetDataType(), ship.pixel_data);

Вам необходимо реализовать GetDataFormat() а также GetDataType() самостоятельно, и он возвращает формат данных и тип.

Одна возможная реализация:

GLenum GetDataFormat(){
return  GL_BGRA;
}
GLenum GetDataType(){
return  GL_UNSIGNED_BYTE;
}
0

Другие решения

добавьте файл в ваш исходный код.
Создается объект структуры корабля со всей необходимой информацией.

0

По вопросам рекламы [email protected]