我有一个我首先想要旋转的物体(关于它自己的中心)然后将它转换到某个点.我有一个glm :: quat保存旋转和一个glm :: vec3,它保存了需要转换的点.
glm::vec3 position;
glm::quat orientation;
glm::mat4 modelmatrix; <-- want to combine them both in here
modelmatrix = glm::translate(glm::toMat4(orientation),position);
Run Code Online (Sandbox Code Playgroud)
然后在我的渲染功能我做..
pvm = projectionMatrix*viewMatrix*modelmatrix;
glUniformMatrix4fv(pvmMatrixUniformLocation, 1, GL_FALSE, glm::value_ptr(pvm));
Run Code Online (Sandbox Code Playgroud)
..并渲染......
不幸的是,当我应用旋转时,物体围绕原点旋转(离原点越远,轨道越大).
当我只申请该职位时,它的翻译很好.当我仅应用旋转时,它停留在原点并围绕它的中心旋转(如预期的那样).那么为什么我同时应用它们会变得奇怪呢?我错过了什么基本的东西?
描述:- 我试图在不使用 C++ 中的 OpenCV 函数的情况下旋转图像。旋转中心不必是图像的中心。它可能是一个不同的点(从图像中心偏移)。到目前为止,我遵循了各种来源来进行图像插值,并且我知道有一个来源可以在 MATLAB 中完美地完成这项工作。我试图在没有 OpenCV 函数的 C++ 中模仿相同的内容。但我没有得到预期的旋转图像。相反,我的输出在屏幕上看起来像一条小的水平线。
void RotateNearestNeighbor(cv::Mat src, double angle) {
int oldHeight = src.rows;
int oldWidth = src.cols;
int newHeight = std::sqrt(2) * oldHeight;
int newWidth = std::sqrt(2) * oldWidth;
cv::Mat output = cv::Mat(newHeight, newWidth, src.type());
double ctheta = cos(angle);
double stheta = sin(angle);
for (size_t i = 0; i < newHeight; i++) {
for (size_t j = 0; j < newWidth; j++) {
int oldRow = static_cast<int> ((i - …Run Code Online (Sandbox Code Playgroud)