BUzer
ОпенГЛ принимает матрицы со смещением в 3-7-11, ДХ - в 12-13-14. У ОпенГЛ - коломн-мажор, у ДХ - ров-мажор.
Как же они одинаковые?
-Eugene-
http://www.opengl.org/archives/resources/faq/technical/transformations.htm
For programming purposes, OpenGL matrices are 16-value arrays with base vectors laid out contiguously in memory. The translation components occupy the 13th, 14th, and 15th elements of the 16-element matrix
BUzer
http://www.opengl.org/sdk/docs/man/xhtml/glTranslate.xml
Там явно column-major
-Eugene-
Кончай тормозить. В картинке матрицы по твоей ссылке нигде не указано, какой её элемент в каком месте лежит в памяти.
Открой, к примеру, http://www.opengl.org/sdk/docs/man/xhtml/glMultMatrix.xml - там видно, что этот последний столбик и есть элементы по индексам 12, 13, и 14.
BUzer
Какое то извращение - нумеровать стобиками. Я всегда думал, что в ГЛ и в ДХ разные матрицы. Видимо, из-за этого:
Sadly, the use of column-major format in the spec and blue book has resulted in endless confusion in the OpenGL programming community. Column-major notation suggests that matrices are not laid out in memory as a programmer would expect.
-Eugene-
> Я всегда думал, что в ГЛ и в ДХ разные матрицы.
Не ты один. Миф про транспонирование настолько популярен, что даже авторы библиотек, типа assimp, пишут про свои матрицы нечто подобное:
…the matrices are stored row by row in memory, which is similar to the OpenGL matrix layout. If you want to use these matrices in DirectX functions, you have to transpose them.
BUzer
> the matrices are stored row by row in memory, which is similar to the OpenGL
> matrix layout
может они их грузили glLoadTransposeMatrix ?
innuendo
Да не, в своих сэмплах они делают как-то так:
struct aiMatrix4x4 m = nd->mTransformation; // update transform aiTransposeMatrix4(&m); glPushMatrix( ); glMultMatrixf( ( float*)&m);
AngelOfDeath
Неуспел отписаться в предидущей твоей теме, для чтения записи в файл лучше использовать виндовые Read WriteFile , имхо проще и надежнее, а все эти ваши иостримы так или иначе обёртки над вин апи.
Они кошернее, там используются исключения, а не возвращаемые коды, семантика их мне тоже больше нравится, и они переносимы. Мне этого хватает.
>The translation components occupy the 13th, 14th, and 15th elements of the 16-element matrix
Кстати, это какая матрица? Column-major или row-major? А то я путаюсь в названиях.
gammaker
row
AngelOfDeath
> Они кошернее
А они могут так?
pVB->Lock(0, sizeVB, &pData, 0); ReadFile( hFile, pData, sizeVB, &nBytes, 0); pVB->Unlock( );
Как говорится, хозяин-барин :)
AngelOfDeath
> только вот для преобразования всегда нужен 3ds Max, а это хреново...
Из макса в колладу, из коллады в свой бинарник сборщиком ресурсов. Изменения формата не заставляют открывать макс - надо просто прогнать сборщик ресурсов. Плюс валидация ресурсов сборщиком сразу.
TheGrayWolf
> pVB->Lock(0, sizeVB, &pData, 0);
ID3D11Buffer так не может, так что отпадает...
GLoom
Понял, попробую. А почему коллада, а не, допустим, fbx?
Тема в архиве.