Я ответил на мой вопрос ниже. Благодаря gavinb за его помощь.Преобразование Uint8 в значения без знака RGB
Вопрос: Я пытаюсь воспроизвести текстуру только для обучения. Я использую 24-битное изображение TGA, и я загружаю его с помощью SDL. Я создал свою собственную структуру
struct Colour24
{
unsigned char r;
unsigned char g;
unsigned char b;
}
unsigned char* texture = new unsigned char[width * height * 3];
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int index = (y * width) + x;
Colour24 colour = getColourAt(x, y);
newTexture[index] = colour.r;
newTexture[index + 1] = colour.g;
newTexture[index + 2] = colour.b;
}
}
Colour24 getColour(int x, int y)
{
Uint32 pixel;
Uint8 red, green, blue;
Colour24 rgb;
pixel = getPixel(m_surface, x, y); // using the SDL get pixel function
SDL_GetRGB(pixel, m_surface->format, &red, &green, &blue);
rgb.r = red;
rgb.b = blue;
rgb.g = green;
return rgb;
}
OLD: Я планирую на отправку этого в OpenGL текстуры и он работает, когда я непосредственно отправить поверхностно> пикселей. Но я хотел бы создать массив данных самостоятельно. Помощь очень ценится!
EDIT: Извините, я не очень хорошо себя объяснил. Я пытаюсь вручную воссоздать текстуру с SDL_Surface, который содержит 24-битное изображение TGA, и я дам ему opengl для создания текстуры. Я тестировал код opengl с поверхностными пикселями, и он отлично работает. Я просто пытаюсь решить, где я ошибся, загрузив его.
Что проблема именно?Ошибка компилятора? Не делает то, что вы ожидаете? По крайней мере, ваш код является неполным, так как он содержит код на одном уровне определения функции. – bjhend
Я могу загрузить эту текстуру в opengl, но это неверно. Я получаю много красных, зеленых и синих перекрестных штрихов. – rocklobster