OpenGL을 사용하여 일부 빠른 행렬 계산을 수행하는 응용 프로그램에 기존 코드가 있습니다. 이것은 boost :: qvm으로 바꿀 수있는 것처럼 보이지만 사용법의 예는 부족합니다. 기본 코드는 다음과 같습니다 사람이 부스트 :: QVM와이를 구현하는 방법에 대해 공유 할 수있는 빠른 아이디어가 있다면 QVM을 향상시키는 OpenGL 행렬 연산
#include <boost/qvm/mat.hpp>
#include <boost/qvm/mat_operations.hpp>
void foo()
{
auto heading = 90.0;
auto speed = 10.0;
auto xComponent = 0.0f;
auto yComponent = 0.0f;
glPushMatrix();
{
glLoadIdentity();
glRotatef(static_cast<GLfloat>(heading), 0, 1, 0);
glTranslatef(0, static_cast<GLfloat>(-speed), 0);
float modelviewMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, modelviewMatrix);
xComponent = modelviewMatrix[2*4 + 0];
yComponent = modelviewMatrix[0];
}
glPopMatrix();
}
그래서 궁금 해서요?
그래서 boost :: qvm 버전은 매우 유사해야하지만 OpenGL과 API가 상당히 다르기 때문에 회전 및 변환을 수행하는 방법을 잘 모르겠습니다.
void foo()
{
auto heading = 90.0;
auto speed = 10.0;
auto xComponent = 0.0f;
auto yComponent = 0.0f;
boost::qvm::mat<double, 4, 4> matrix;
boost::qvm::set_identity(matrix);
// rotate?
// translate?
// get components?
}
최종 코드 : 코드는이 질문 후이처럼 보이는 결국
:
#include <boost/qvm/mat.hpp>
#include <boost/qvm/vec.hpp>
#include <boost/qvm/mat_operations.hpp>
#include <boost/qvm/map_vec_mat.hpp>
// ...
boost::qvm::mat<double, 4, 4> matrix;
boost::qvm::set_identity(matrix);
boost::qvm::mat<double, 4, 4> rotation = boost::qvm::roty_mat<4>(deg2rad(heading));
boost::qvm::vec<double, 3> v{{0.0, -speed, 0.0}};
boost::qvm::mat<double, 4, 4> translation = boost::qvm::translation_mat(v);
boost :: qvm이 필수입니까? [glm 라이브러리] (http://glm.g-truc.net/0.9.8/index.html)를 고려 했습니까? – Borgleader
Boost는 다른 외부 종속성을 추가 할 필요가 없도록하는 유일한 요구 사항입니다. 나는 glm을 인식하지 못했지만 header 만있는 것으로 보이기 때문에 가능성이있을 수 있습니다. 나는 qvm 솔루션이 여기에 합당한지를보고 싶습니다. – DiB