标签: projection-matrix

从2D坐标到圆柱坐标的图像转换

我想将Jpeg图像(其坐标(x,y))转换为圆柱坐标.

opencv中是否有可以直接执行此操作的功能?或者我可以用opencv中的哪些函数来创建自己的函数?

我在2d坐标,3d坐标和圆柱坐标之间感到困惑..有人可以简单地讨论这个吗?

有没有可用于将2d转换为3d的数学算法?2d到圆柱坐标?3d到圆柱坐标?

我阅读了关于这个主题的上一篇文章但是不理解它.

我没有参加图像处理课程,但我急于阅读书籍.我通过经验和学习其他程序员代码来学习..所以源代码将非常感激..

感谢大家,对不起我的小学发帖,

opencv image-processing projection-matrix

3
推荐指数
1
解决办法
7396
查看次数

为什么相机默认面向z轴的负端?

我正在从这个scratchpixel学习openGL ,这里是透视项目矩阵章节的引用:

摄像机沿世界坐标系负z轴指向,这样当一个点从世界空间转换到摄像机空间(然后从摄像机空间转换到屏幕空间)时,如果该点位于世界坐标系的左侧y轴,它也会映射到摄像机坐标系y轴的左侧.换句话说,当世界坐标系x轴也指向右边时,我们需要摄像机坐标系的x轴指向右边; 并且唯一可以获得该配置的方法是让相机向下看负z轴.

我认为这与镜像有关?但是这个解释让我很困惑...为什么默认情况下相机的坐标与世界坐标不一致(就像我们在openGL中创建的每个其他3D对象一样)?我的意思是,我们需要使用变换矩阵来转换相机坐标(无论我们想要什么,负z设置,我们都可以模拟它)...为什么要这么麻烦?

opengl 3d graphics geometry projection-matrix

3
推荐指数
2
解决办法
4340
查看次数

如何通过中心旋转立方体

我正在尝试使用键盘来旋转一个装满小立方体的"立方体",这种键盘可以工作但不是很好.

我正在努力将旋转点设置到大"立方体"/世界的中心.正如你在这个视频中看到的那样,大立方体的前(初始)面的中心是我现在旋转的枢轴点,当我稍微旋转世界时,这有点令人困惑.

为了更好地解释它,当我使用键来旋转立方体时,看起来我正在移动立方体的初始面.因此从这个角度来看枢轴点可能没问题,但我的代码有什么问题?我不明白为什么它正在前面移动,而不是整个立方体的中心?

在生成所有小立方体的情况下,我调用3 for for循环(x,y,z)中的函数,然后函数返回,cubeMat因此我可以在视频中看到所有生成的多维数据集.

cubeMat = scale(cubeMat, {0.1f, 0.1f, 0.1f});
cubeMat = translate(cubeMat, {positioning...);
Run Code Online (Sandbox Code Playgroud)

对于旋转本身,向左旋转的简短示例如下所示:

mat4 total_rotation; //global variable - never resets
mat4 rotation;       //local variable

if(keysPressed[GLFW_KEY_LEFT]){
            timer -= delta;
            rotation = rotate(mat4{}, -delta, {0, 1, 0});
}
... //rest of key controls
total_rotation *= rotation;
Run Code Online (Sandbox Code Playgroud)

在这3个周期内也是这样的:

program.setUniform("ModelMatrix", total_rotation * cubeMat);
cube.render();
Run Code Online (Sandbox Code Playgroud)

我已经读过我应该使用transformation枢轴点设置到中间但是在这种情况下,我如何设置位于世界中心的小立方体内的枢轴点?那个立方体显然是x=2, y=2, z=2因为在循环中,我生成立方体从开始x=0.

opengl 3d rotation projection-matrix glm-math

3
推荐指数
1
解决办法
410
查看次数

从深度图像生成点云

我正在尝试将深度图像 (​​RGBD) 转换为 3d 点云。我目前使用的解决方案来自这篇文章,其中:

  • cx = 图像中心高度
  • cy = 图像中心宽度
  • fxfy= 250,通过迭代几个选项来选择

深度测量是从针孔相机拍摄的,点云从中心向外投射(下面的示例图像)。谁能帮助我理解为什么以及如何解决这个问题?

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

python image depth point-clouds projection-matrix

3
推荐指数
1
解决办法
1万
查看次数

OpenGL中的像素完美投影矩阵?

我正在使用OpenTK,我希望能够在Z是特定数字的情况下渲染多边形和纹理像素完美,投影中的任何其他位置都无关紧要(这适用于UI).有没有办法设置这样做的投影矩阵?

vb.net opengl projection-matrix

2
推荐指数
1
解决办法
1114
查看次数

如何从视图投影矩阵检索相机原点/位置?(OpenGL)

有没有办法从视图投影矩阵中检索相机原点/位置?(OpenGL)

我正在尝试绘制相机的截锥体,并且计算远平面平面的角没有问题。

但我不知道如何检索代表相机原点的点。

我期望通过乘以同质剪切空间坐标来检索它:

glm::vec4(0.f, 0.f, 0.f, 1.f)
Run Code Online (Sandbox Code Playgroud)

但我发现有点像~倒置的相机位置。(在屏幕截图中标记为X)包含以下所有源代码。

在此输入图像描述

    // Homogeneous points for source cube in clip-space.
    std::array<glm::vec4, 9> corners =
    {
        // Far plane
        glm::vec4(-1.f,-1.f, 1.f, 1.f), // bottom-left
        glm::vec4( 1.f,-1.f, 1.f, 1.f), // bottom-right
        glm::vec4( 1.f, 1.f, 1.f, 1.f), // top-right
        glm::vec4(-1.f, 1.f, 1.f, 1.f), // top-left

        // Near plane
        glm::vec4(-1.f,-1.f,-1.f, 1.f), // bottom-left
        glm::vec4( 1.f,-1.f,-1.f, 1.f), // bottom-right
        glm::vec4( 1.f, 1.f,-1.f, 1.f), // top-right
        glm::vec4(-1.f, 1.f,-1.f, 1.f), // top-left

        // Camera/screen center …
Run Code Online (Sandbox Code Playgroud)

c++ opengl frustum projection-matrix glm-math

2
推荐指数
1
解决办法
3210
查看次数

C++ OpenGL从2D切换到3D

我在C++ Visual Studio 2008 Forms应用程序中使用OpenGL,当bool设置为true/false时,我希望GLcontrol在3D和2D之间切换.

3D绘图工作正常,2D绘图工作正常,从一个切换到另一个时出现问题.因此,如果我在2D中启动应用程序绘图,它可以完美地运行并且与3D相同,但是如果我在运行时更改布尔值则不会绘制任何内容.

这是我从一个变为另一个的代码.

if(opciones->draw3D){
    GL::MatrixMode(MatrixMode::Modelview);
    GL::LoadIdentity();
    GL::Viewport(0, 0, w, h);
    Matrix4 lookat = Matrix4::LookAt(100, 100, 100, 0, 0, 0, 0, 0, 1);
    GL::LoadMatrix(lookat);
    GL::Scale(this->zoom, this->zoom, this->zoom);

    GL::Rotate(xrot, 1.0f, 0.0f, 0.0f);
    GL::Rotate(yrot, 0.0f, 1.0f, 0.0f);
    GL::Clear(ClearBufferMask::ColorBufferBit | ClearBufferMask::DepthBufferBit);
    GL::ClearColor(Color::LightGray);
// Draw3D
}
else {
    GL::MatrixMode(MatrixMode::Projection);
    GL::LoadIdentity();
    GL::Ortho(5, w-5, 5, h-5, -1, 1); 
    GL::Viewport(5, 5, w-5, h-5); 

    GL::Clear(ClearBufferMask::ColorBufferBit|ClearBufferMask::DepthBufferBit);
    GL::ClearColor(Color::LightGray);
    GL::MatrixMode(MatrixMode::Modelview);
    GL::LoadIdentity();

// Draw 2D
}
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么,但我想我不清楚某些矩阵或其他东西,因为正如我之前所说的那样,变量draw3D==true在开始时它完美地绘制,当变量draw3D==false在开始时它完全绘制在2D中,但运行时的更改使其无法正常工作.

c++ opengl orthographic perspective projection-matrix

1
推荐指数
1
解决办法
2121
查看次数

当前的OpenGL矩阵模式

是否可以确定OpenGL使用的当前矩阵模式?

例如,我目前有以下内容(由窗口调整大小触发):

glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-width, width, -height, height, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)

但是,最好返回先前使用的矩阵模式,而不是假设GL_MODElVIEW.是否有预先调用的函数来存储以前的状态?

opengl projection-matrix

1
推荐指数
1
解决办法
840
查看次数

了解 OpenGL 投影矩阵

我一直在编写一个程序来使用 OpenGL 显示 3D 模型,到目前为止我一直使用正交投影,但我想切换到透视投影,以便当相机朝向模型时,它看起来会变大。我知道我必须将三个矩阵(模型、视图和投影)相乘才能正确应用所有转换。正如您在下面的代码中看到的,我尝试这样做,并且能够正确创建模型和查看矩阵。我知道这些工作正常,因为当我将模型和视图投影相乘时,我可以旋转和平移对象,以及更改相机的位置和角度。我的问题是,当我将该乘积乘以投影矩阵时,我无法再在屏幕上看到该对象。

\n\n

这里相机结构的默认值是 {0,0,-.5},但我使用键盘操纵该值来移动相机。

\n\n

我正在使用 GLFW+glad,linmath.h用于矩阵数学。

\n\n
    //The model matrix controls where the object is positioned. The\n    //identity matrix means no transformations.\n    mat4x4_identity(m);\n    //Apply model transformations here.\n\n    //The view matrix controls camera position and angle.\n    vec3 eye={camera.x,camera.y,camera.z};\n    vec3 center={camera.x,camera.y,camera.z+1};\n    vec3 up={0,1,0};\n    mat4x4_look_at(v,eye,center,up);\n\n    //The projection matrix flattens the world to 2d to be rendered on a\n    //screen.\n    mat4x4_perspective(p, 1.57, width/(float)height, 1,10); //FOV of 90\xc2\xb0\n    //mat4x4_ortho(p, -ratio, ratio, -1.f, 1.f, 1.f, -1.f);\n\n    //Apply the transformations. …
Run Code Online (Sandbox Code Playgroud)

opengl glfw projection-matrix

1
推荐指数
1
解决办法
9279
查看次数

如何从投影矩阵中提取相机参数

我有一个具有一定投影矩阵的透视相机,我只想从中提取流、近平面和远平面。我知道 Three.js 中有一个函数:

.updateProjectionMatrix()
Run Code Online (Sandbox Code Playgroud)

它根据上面列出的参数创建一个投影矩阵,基本上我想要相反的过程。

javascript projection-matrix three.js

1
推荐指数
1
解决办法
3672
查看次数

均匀矩阵有八个独立的矩阵元素比率?

我正在读一些关于计算机视觉的论文.这看起来像一个简单的事实,但我无法理解.它是关于用于平面投影变换的同质[3×3]矩阵.据说它有八个独立的矩阵元素比例.我不知道比率是多少,八个独立比率是多少?请帮我解决这个问题.

谢谢.

computer-vision matrix-vision homogenous-transformation projection-matrix

0
推荐指数
1
解决办法
1478
查看次数

2D屏幕坐标到3D位置Directx 9/Box选择

我想在3d世界中实现盒子选择.基本上,单击,按住鼠标,然后取消鼠标,获取一个框,然后选择框.首先,我想弄清楚如何获得3d中点击的坐标.

我有raypicking,那是没有得到正确的坐标(得到起源和方向).无论屏幕的X/Y是什么(尽管方向不同),它都会保持返回相同的原点.

我也尝试过:

D3DXVECTOR3 ori = D3DXVECTOR3(sx, sy, 0.0f);
D3DXVECTOR3 out;
D3DXVec3Unproject(&out, &ori, &viewPort, &projectionMat, &viewMat, &worldMat);
Run Code Online (Sandbox Code Playgroud)

它得到了同样的东西,无论坐标是什么,坐标都非常接近(并且是错误的).这几乎就像是回归眼睛,而不是真实的世界坐标.

如何使用directx 9c将2D屏幕坐标转换为3d?

directx 3d graphics raytracing projection-matrix

0
推荐指数
1
解决办法
3845
查看次数