Конференция "Игры" » Перевод текстуры "формата OpenGL" в матрицу и обратно.
 
  • AlexanderMS © (30.11.07 18:24) [0]
    Возникла необходимость представить одномерный массив байт текстуры (текстура размера 64x64) в виде матрицы 64x64 и затем (после некоторых действий) - в исходном виде.

    В одномерном массиве (размером 64*64*4) хранится последовательность вида: B, G, R, A, B, G, R, A, ... (т.е. синий, зелёный, красный, альфа каналы цвета в виде байта). То есть текстура "готова к использованию" в функциях OpenGL (или как правильно сказать? "Формата OpenGL"?).
    Элементы матрицы (64x64) должны представлять собой структуру, содержащую поля четырёх составляющих цвета (BGRA).

    Как это сделать наиболее оптимально?
    Я знаю, как вообще сделать (присваивание 64*64*4 раза в цикле), но, думаю, возможны какие-нибудь фокусы с памятью, чтобы всё работало быстрее:

     for Y := 0 to 63 do
       for X := 0 to 63 do
         begin
    // тут не знаю: правильно или нет: не тестировал, но что-то в этом роде.
           K := Y * 64 * 4 + X * 4;
           Matrix[X, Y].B := TileTexture[K];
           Matrix[X, Y].G := TileTexture[K + 1];
           Matrix[X, Y].R := TileTexture[K + 2];
           Matrix[X, Y].A := TileTexture[K + 3]
         end;



    Подскажите, пожалуйста, наиболее эффективный вариант решения этой задачи.
  • XProger © (30.11.07 20:28) [1]
    Move(TileTexture[0], Matrix[0, 0], 64 * 64 * 4);
    при условии, что Matrix - статический массив
  • AlexanderMS © (01.12.07 11:15) [2]

    > XProger ©   (30.11.07 20:28) [1]

    Большое спасибо! Просто супер решение!
  • MBo © (01.12.07 12:41) [3]
    Если в данном случае нужно только представление одномерного массива в виде двумерного. а не его копия, то достаточно приводить тип

    PMatrix(@TileTexture)
 
Конференция "Игры" » Перевод текстуры "формата OpenGL" в матрицу и обратно.
Есть новые Нет новых   [134431   +10][b:0][p:0.001]