Здравствуйте!
Вот столкнулся с проблемой и хочу понять в чем ее суть.
Рисую квад в 2Д пространстве дисплея после чего хочется изменять его положение и размер без изменения вершинного буфера.
Делаю это с помошью функций glTranslatef glScalef, но при изменение маштаба смещяется и позиция по соответствуюшей оси.
Вот пример кода при котором я говорю что положение квада должно быть по x=10 и маштаб по x=0.5 в итоге маштаб 0.5, а
положение меньше 10 по иксу получается
если же убрать glScalef то все работает правильно.
//Переход в режим 2Д glMatrixMode(GL_PROJECTION); glPushMatrix( ); glLoadIdentity( ); glOrtho( 0, 800, 0, 600,0,1); glMatrixMode( GL_MODELVIEW); glPushMatrix( ); glLoadIdentity( ); glPushMatrix( ); glTranslatef( 10,0,0); glScalef( 0.5f,0.0f,0.0f) DrawQuad( ); glPopMatrix( ); //возврашение в 3Д glPopMatrix( ); glMatrixMode( GL_PROJECTION); glPopMatrix( ); glMatrixMode( GL_MODELVIEW);
glScalef(0.5f,1.0f,1.0f)
glTranslatef(10,0,0);
?
Пробовал так не помогает почему то.. хотя в DX9 именно так работает отлично.
Именно так? Тогда попробуй z брать не 1.0f, а -1.0f.
Хм.. впринцыпе нашел в чем проблема.
интересно почему в DX нужно сначала scale потом Translate, а в OpenGL наоборот, и самое главное как сделать чтобы везде было одинаково
В принципе, в серьёзных проектах как правило используются glLoadMatrix и иногда glMultMatrix, а матрицы составляются вручную. Так что это возможно и может быть решением проблемы. :)
Да, но если я хочу сделать 2 рендера но при этом чтобы был один класс камеры например и в нем создавалась матрица вида (LookAt) одна на 2 рендера.. скажу ис практики у меня не получилось использовать look at матрицу которая отлично работает с OGL в DX9 пришлось использовать D3DXMatrixLookAtRH в итоге вид разный в обоих рендерах. Может кто нибудь знает как решить эту проблему?
lebron
> Хм.. впринцыпе нашел в чем проблема.
И в чём была проблема?
> Может кто нибудь знает как решить эту проблему?
Используй свой матричный функционал...
Executor
Проблема была в том что используя одну и туже матрицу я получал непонятное раположение камеры в d3d9
Может я как то не так загружал в d3d9 матрицу.. какой аналог glLoadMatrix в d3d9
IDirect3DDevice9::SetTransform. Ну там как получается... Это аналог двух функций
OpenGL
glMatrixMode(GL_MODELVIEW);
glLoadMatrix(&matrix);
Direct3D
pD3DDevice->SetTransform(D3DTS_WORLD, &matrix);
Получается два в одном, задаётся и тип матрицы, и сама матрица. Ну понятно, что pD3DDevice типа IDirect3DDevice9* или LPDIRECT3DDEVICE9. :)
K.V.
Спасибо попробую.
Тема в архиве.