问题标签 [perspectivecamera]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2714 浏览

xna - 对使用 XNA 进行光线追踪的 World View Projection Matrix 问题感到困惑

因此,我决定重写一个用 C++ 编写的旧光线追踪器,并利用 XNA 框架在 C# 中完成。

我仍然有我的旧书并且可以按照笔记进行操作,但是我对一些想法感到困惑,我想知道是否有人可以很好地表达出来。

在上面的代码中,u' 和 v' 是为给定相机计算的标准正交基(我知道相同的名称会让人感到困惑)

如果我按照这本书的方式去做,它就会起作用。但是,我正在尝试利用 XNA 并且对如何执行相同的操作但使用矩阵感到困惑。

所以我尝试用 XNA 代码替换以下步骤

正是在这一点上,我对我应该应用的操作顺序感到困惑,以便获得任何像素 (x, y) 的方向向量?

在我的脑海中,我在想:(u,v)= ProjectionMatrix * ViewMatrix * ModelToWorld * Vertex(在模型空间中)

因此,这是有道理的

顶点(在世界空间中)= Inverse(ViewMatrix) * Inverse(ProjectionMatrix) * [u, v, 0]

我还记得一些关于视图矩阵如何被转置和倒置的事情,因为它是正交的。

0 投票
3 回答
3857 浏览

opengl - OpenGL - gluPerspective / glFrustum - zNear & zFar 问题

我正在写一个太空探索应用程序。我决定以光年为单位,并准确地模拟了恒星之间的距离。经过修补和大量艰苦的工作(主要是学习绳索),我已经让相机从穿越宇宙的星际飞船的角度正常工作。

最初我没有注意 gluPerspective () 的 zNear 参数,直到我研究行星物体。由于我的比例尺是光年单位,我很快意识到由于 zNear 为 1.0f,我将无法看到这样的物体。经过实验,我得出了这些数字:

这非常有效,因为我能够巡航我的太阳系(位置 0,0,0)并靠近行星,这些行星看起来光线充足且纹理贴图。然而,其他系统(不在位置 0,0,0)更难通过,因为物体以不寻常的方式远离相机。

然而,我注意到在宇宙中巡航时开始出现奇怪的视觉故障。我身后的物体会“环绕”并显示在前方,如果我在 Y 方向旋转 180 度,它们也会出现在原来的位置。因此,当在太空中翘曲时,大多数恒星都正确地视差,但有些则出现并朝相反的方向行进(至少可以说令人不安)。

通过将 zNear 更改为 0.1f 可以立即纠正所有这些故障(但也不会解决太阳系物体)。所以我被困住了。我也尝试过使用 glFrustum 并产生完全相同的结果。

我使用以下内容来查看世界:

根据需要使用相关的相机代码进行定位。即使禁用相机功能也不会改变任何东西。我什至尝试过 gluLookAt() 并再次产生相同的结果。

使用极端 zNear / zFar 值时 gluPerspective() 是否有限制?我试图缩小范围,但无济于事。我什至通过放大所有内容并使用更大的 zNear 值将我的世界单位从光年更改为公里 - 没有。帮助!

0 投票
1 回答
1702 浏览

c++ - gluLookAt() 使屏幕空白

我没有太多的OpenGL经验。我正在尝试画一个茶壶并在茶壶周围移动相机。为此,我使用了 gluLookAt 函数。问题是当我调用 gluLookAt 时屏幕是空白的,我看不到我的茶壶。

为什么 gluLookAt() 使屏幕空白,我该如何解决这个问题?当 camera() 未被调用时,代码按预期执行;展示了一个茶壶。

0 投票
2 回答
13410 浏览

opencv - 来自特征点的 OpenCV 外部相机

当我从每个相机的视图中获取对象的图片时,如何使用 OpenCV 检索每个相机的旋转矩阵、平移向量和一些缩放因子?对于每张图片,我都有几个特征点的图像坐标。并非所有特征点在所有图片中都可见。我想将对象特征点的计算 3D 坐标映射到稍微不同的对象,以将第二个对象的形状与第一个对象对齐。

我听说可以使用cv::calibrateCamera(...),但我无法完全通过它...

有人遇到过这种问题吗?

0 投票
2 回答
3867 浏览

java - 在 Android 上使用 libgdx 的立方体网格

我已经用 libgdx 做了一个网格,我正在尝试用一些颜色填充网格。

我应该使用哪个渲染参数?我正在使用透视相机。

0 投票
1 回答
2998 浏览

java - libgdx:SpriteBatch 未使用 PerspectiveCamera 显示

虽然我确实具备 OpenGL 的基本知识,但我只是从 libgdx 开始。

我的问题是:为什么,具有完全相同的代码但仅从 OrthographicCamera 切换到 PerspectiveCamera 的效果不再显示我的任何 SpriteBatches ?

这是我使用的代码:

创建()方法:

和 render() 方法:

现在,如果在我的 resize(int width, int height) 方法中,我像这样设置相机:

我明白了:

在此处输入图像描述

但是,如果我更改相机类型:

我明白了:

在此处输入图像描述

我问的原因是因为我真的很喜欢 libgdx 内置的在 OpenGL 中绘制文本(字体)的能力。但是在他们的示例中,他们使用了 SpriteBatch,他们将其路径到 Font 实例,并且他们也总是使用 Ortho Camera。我想知道 SpriteBatch 和字体绘图功能是否适用于 PerspectiveCamera。

0 投票
2 回答
6130 浏览

java - 如何在 jogl 中使用 gluPerspective()?

我有一个init()方法,我正在尝试创建一个Perspective渲染。下面是我到目前为止的代码,但我传递给的数字gluPerspective(fovy, aspect, zNear, zFar)是错误的。我认为fovy是视野(60度),并且是纵横比(宽度/高度) ,aspect但我不知道是什么。zNearzFar

0 投票
1 回答
980 浏览

c# - 寻找示例代码 Silverlight 3d c#

我想创建一个地震的可视化,如下图所示,我可以在其中移动相机并显示 100 或 1000 个小圆形物体。 这就是我想要创建的 . 我可以在网上找到的所有演示都显示了一个旋转的物体——我想在一个已知的世界上旋转相机。

我的世界就像上图中的地图矩形,我的数据(圆圈)显示在上面/下面。

所以我的世界应该说如果使用 Lat/Lng 之类的

172、-40 到 179、-45 并具有 Z(深度),或者它可以很容易地 23000、14000 到 29000、19000

我的图像将显示在 Z 为 0 的坐标上

谁能给我看一个演示或示例代码来做到这一点?

干杯

克里斯

0 投票
2 回答
1660 浏览

matlab - 来自相同投影矩阵的不同基本矩阵

我使用两个投影矩阵 P1 和 P2(例如我使用恐龙数据集),我需要计算基本矩阵 F。所以我使用两个 Matlab 函数:

  • Peter Kovesi 的函数:www.csse.uwa.edu.au/~pk/Research/MatlabFns/Projective/fundfromcameras.m
  • 齐瑟曼:www.robots.ox.ac.uk/~vgg/hzbook/code/vgg_multiview/vgg_F_from_P.m

这些函数应该做同样的事情,但我有不同的 F 值!怎么可能?哪个是正确的功能?

如果两个点 X1 和 X2 在两个不同的图像中“相同”,则 X2^T*F*X1 = 0 ... 所以我通过使用 SURF 从两个旋转图像(5 度)中找到了两个对应点,但是 X2^T *F*X1 在这两个函数中永远不会等于零。有任何想法吗?

相反,如果我使用这个从匹配点计算 F 的函数:

我有那个 X2^T*F*X1 = 0 .... 显然 F 与其他两个函数的两个 FI 不同...

0 投票
1 回答
518 浏览

matlab - 极线几何中的预期点不正确

我有 2 台摄像机(摄像机 2 正在平移摄像机 1)及其投影矩阵P1P2。他们拍摄了一张图像,I1(相机 1)和I2(相机 2)512x512。

我计算基本矩阵 F:

然后我使用 RANSAC、 point1point2找到了两个带有 SURF 的图像之间的匹配点。

我试图计算极线并通过point2

所以point2应该与 I2 中的预期点epoint非常相似,使用极线几何计算(因为 SURF 使用了很多近似值)。

正如您在 8.2 页上看到的那样。223 在Hartley & Zisserman 的书上,

其中 x' 是epoint,而 x 是point1

我的是:

所以epoint是:

我记得,图像大小是 512x512,所以epoint.x在图像之外......正如你所看到的,epoint 与 point2 不同(很多不同)

我的问题是,为什么?我在哪里犯了一些错误?

谢谢