Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос про opengl 3.3 матрицы, вопрос про opengl 3.3 матрицы 
:(
    Опции темы
alexsandrf1
  Дата 5.9.2013, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.9.2013

Репутация: нет
Всего: нет



всем доброго вечера! 
подскажите пожалуйста, я запутался! 
я недавно начал переход на 3.3 и вот вопрос?
как матрицу, котрую я достал из физ икса присенить к объекту в opengl??????     
в opengl 2.0 там мультматрикс и все, а вот в 3.3 а не знаю, как, бьюсь уже неделю!!!! помогите пожалуйста!!!! 

я использую для матриц glm библиотеку
Код

getColumnMajor(m,pT.p, glMat); // тут я достаю из physx матрицу объекта



 
Код

 //а тут мне надо к объекту ее применить, только вот не знаю как
//при такой реализации объект всегда вытягиватеся по y 
//объект вообще размером 1x2x1
  ///////////////////////////Rendering of cube
  mCurrent = translate(mModelView, vec3(glMat[12],glMat[13],glMat[14]));
  mCurrent = scale(mCurrent, vec3(1.0f, 2.0f, 1.0f));
  mCurrent = rotate(mCurrent, glMat[0]*60.0f, vec3(1.0f, 0.0f, 0.0f));
  mCurrent = rotate(mCurrent, glMat[1]*60.0f, vec3(0.0f, 1.0f, 0.0f));
  mCurrent = rotate(mCurrent, glMat[2]*60.0f, vec3(0.0f, 0.0f, 1.0f));
  glUniformMatrix4fv(iModelViewLoc, 1, GL_FALSE, value_ptr(mCurrent));

  glDrawArrays(GL_TRIANGLES, 0, 36);





приведу немного кода, как я объекты их физ икса достаю 
это в рендере 
Код

PxRigidActor* actor;
  PxU32 nShapes = boxes[0]->getNbShapes(); 
    PxShape** shapes=new PxShape*[nShapes];
  
  boxes[0]->getShapes(shapes, nShapes);      
  nShapes--;

  PxShape* shape;
  float glMat[16];
  PxGeometryType::Enum type = shapes[nShapes]->getGeometryType();

  PxTransform pT = PxShapeExt::getGlobalPose(*shapes[nShapes]);
  box_collider.pos= pT.p; 
  PxBoxGeometry bg;
  shapes[nShapes]->getBoxGeometry(bg);
  PxMat33 m = PxMat33(pT.q);
  getColumnMajor(m,pT.p, glMat);




и ф-ия 
Код

void getColumnMajor(PxMat33 m, PxVec3 t, float* mat) {
   mat[0] = m.column0[0];
   mat[1] = m.column0[1];
   mat[2] = m.column0[2];
   mat[3] = 0;

   mat[4] = m.column1[0];
   mat[5] = m.column1[1];
   mat[6] = m.column1[2];
   mat[7] = 0;

   mat[8] = m.column2[0];
   mat[9] = m.column2[1];
   mat[10] = m.column2[2];
   mat[11] = 0;

   mat[12] = t[0];
   mat[13] = t[1];
   mat[14] = t[2];
   mat[15] = 1;
}


Это сообщение отредактировал(а) alexsandrf1 - 5.9.2013, 13:54
PM MAIL   Вверх
Bitter
Дата 5.9.2013, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 1
Всего: 27



Цитата

при такой реализации объект всегда вытягиватеся по y 
mCurrent = scale(mCurrent, vec3(1.0f, 2.0f, 1.0f));


так вы ж сами написали вытягивание по y... scale(mCurrent, vec3(1.0f, 2.0f, 1.0f)); масштаб 2 по y
PM MAIL ICQ Skype   Вверх
alexsandrf1
Дата 5.9.2013, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.9.2013

Репутация: нет
Всего: нет



Цитата(Bitter @  5.9.2013,  14:09 Найти цитируемый пост)
так вы ж сами написали вытягивание по y... scale(mCurrent, vec3(1.0f, 2.0f, 1.0f)); масштаб 2 по y


спасибо за ответ, а как сделать чтобы как надо вытягивался и вращался???
PM MAIL   Вверх
Bitter
Дата 5.9.2013, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 1
Всего: 27



а почему нельзя просто использовать glMat? Зачем все эти телодвижения с mCurrent?
PM MAIL ICQ Skype   Вверх
alexsandrf1
Дата 5.9.2013, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.9.2013

Репутация: нет
Всего: нет



Цитата(Bitter @  5.9.2013,  14:59 Найти цитируемый пост)
а почему нельзя просто использовать glMat? Зачем все эти телодвижения с mCurrent?

если так
Код

glUniformMatrix4fv(iModelViewLoc, 1, GL_FALSE, glMat);

экран вообще пустой
PM MAIL   Вверх
Bitter
Дата 5.9.2013, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 1
Всего: 27



Когда вы используете mCurrent, вы пишете value_ptr(mCurrent), а когда glMat, то без value_ptr. Может в этом ошибка?

Ну ладно если это не поможет, то тогда вот что
для масштаба используйте glMat[0] - x   glMat[5] - y   glMat[10] - z
для поворота тут сложнее, матрица не хранит углы, она хранит синусы и косинусы углов. Так что попробуйте просто переписать в mCurrent значения из ячеек 0,1,2,4,5,6,8,9,10
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.