问题标签 [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.
camera - Three.js:使用后处理着色器 (EffectsComposer) 时,覆盖 CSS Renderer 不起作用
我有一个场景,其中 2 个渲染器的大小完全相同,并且彼此叠放,共享同一个透视相机,如下所示:
CSS 对象可以直接放置在 WebGL 场景中的对象之上,只需参考它们的位置并设置 CSS 对象的位置。
但是,当我添加此效果时:
并像这样调用作曲家来渲染composer.render();
我的 CSS 对象不再正确放置。
透视是关闭的,因为缩放会滑动 CSS 对象,而 WebGL 对象会保留它们的位置。
知道为什么额外的着色器通道可能会改变 WebGL 渲染中的透视图,导致 CSS 对象无法正确对齐并四处滑动吗?
java - 使用 Unproject 查找世界空间向量
我正在投影视图中试验 LibGDX 和 3D。现在我正在研究如何在 z=0.0 处确定我的视口在世界空间中的最外边界,以便绘制不大于必要的坐标网格。然而,我似乎已经超越了我的教育,因为我没有上过正式的线性代数课,而且对矩阵数学仍然有些模糊。
有没有办法确定我应该在哪里开始和停止画线,而无需使用拾取和绘制透明平面与之相交?
LibGDX 的 unproject 函数在 Vector3 中获取屏幕坐标,并在给定 z 的情况下返回世界空间中从近剪裁平面到远剪裁平面的 Vector3。但是,鉴于我有一个平移和旋转的相机(viewprojection 矩阵的封装和一系列便利方法),我突然想到我不能选择任意 z 放入窗口坐标向量并设置它取消投影后变为 0.0,因为该点可能不是视口中最远的可视点。那么我怎么知道在窗口坐标中使用什么 z 值,它会在 z=0.0 的世界空间中给出我需要的 x 和 y?
编辑(更新):显然,我正在查看的问题是平面相交,这需要光线追踪。所以现在我想我的问题是:每个渲染循环进行 4 次光线追踪(或者,我想每当相机移动时)是否值得能够动态绘制不大于视口的世界空间坐标网格的回报?如果没有,是否有更便宜的算法可以用来估计我应该在哪里开始和停止画线?
3d - PerspectiveCamera 无透视校正 3D
有没有像 PerspectiveCamera 这样没有透视校正的 3D 工作?
使用 ParallelCamera 不适用,因为它始终位于零位置并且 3D 的结果不直观。
Java 文档:
[...]此摄像头始终位于窗口的中心,并沿 Z 轴正方向观察。
使用该方法设置fieldOfView
为一个较小的值(即 0.1)PerspectiveCamera.setFieldOfView(double value)
,仍然会产生透视图。但我不需要透视校正。
我试图扩展PerspectiveCamera
,但这是不可能的,因为适当的字段声明为私有。
有什么想法或建议吗?
javascript - 在 Three.js 中设置 2D 视图
我是新手three.js
,正在尝试使用这些 3D 工具设置相当于 2D 可视化(用于各种分层精灵)的内容。我想要一些关于PerspectiveCamera()
论点和camera.position.set()
论点的指导。从这个答案到相关问题,我已经朝着正确的方向轻推,该问题说将z
坐标设置为等于0
in camera.position.set(x,y,z)
。
下面是我从stemkoski 的 three.js 示例之一修改的代码片段。目前让我感到困惑的部分是VIEW_ANGLE
,x
和y
. 假设我想在屏幕大小的平面上有一个平面相机视图,我应该如何分配这些变量?我已经尝试了一系列值,但很难从可视化中看出发生了什么。提前致谢!
更新 - 透视与正交相机:
谢谢@GuyGood,我意识到我需要对透视相机和正交相机做出设计选择。我现在看到PerspectiveCamera()
, 即使在这个 2D 上下文中,也允许像parallax之类的东西,而OrthographicCamera()
无论我的 2D 元素在什么层上,都允许字面渲染大小(不随距离减小)。我倾向于认为我仍然会使用PerspectiveCamera()
for 效果,例如精灵层之间的少量视差(所以我想我的项目不是纯粹的 2D !)。
看来主要的事情是使所有精灵层平行于观察平面,即camera.position.set()
与视野中心正交的观察线。这对于这里的许多人来说一定是基本的;这对我来说真是一个新世界!
我想我仍然很难理解VIEW_ANGLE
、x
和y
2D 可视化中相机与远近观察平面之间的距离。使用正交相机,这是非常无关紧要的——你只需要足够的深度来包含你想要的所有层和一个适合你的精灵比例的观察平面。然而,对于透视相机,景深和场的作用会影响视差的效果,但还有其他考虑因素吗?
更新 2 - 视角和其他变量:
在进行了更多工具以寻求如何考虑相机的视角(视野或 FOV)和相机位置的 x、y、z 参数之后,我看到了这个有用的角色视频摘要游戏设计中的视野(一个足够接近的模拟来回答我的 2D 可视化问题)。连同这个针对摄影师的视野教程我也觉得很有帮助(如果可能有点俗气;),这两个资源帮助我了解了如何为我的项目选择视野以及非常宽或窄的视野会发生什么(以360 度中的度数)。最好的结果是人的自然视野的混合,这取决于屏幕或投影与他们脸部的距离,并且还与前景中事物与背景中事物的相对比例密切相关可视化(更宽的视野使背景看起来更小,更窄的视野放大背景 - 类似于,但不像正交相机的效果那样明显)。我希望你觉得这和我一样有帮助!
更新 3 - 进一步阅读
对于任何想了解更多关于各种用途的相机规格的详细信息的人,您可能会发现计算机图形学原理与实践的第 13 章对解决上述问题等非常有用。
更新 4 - 正交相机中 z 维度的注意事项
当我继续我的项目时,我决定使用正交相机,这样我就可以增加精灵的 z 尺寸以避免z-fighting,但不会让它们看起来逐渐退到远处。相比之下,如果我想让它看起来好像一个精灵正在退到远处,我可以简单地调整它的大小。但是,今天我遇到了一个愚蠢的错误,我想指出以使其他人免于同样的麻烦。尽管正交相机没有描绘出物体距离较远时后退的大小,但请注意仍然有一个后截头体平面过去哪些对象将从视图中剔除。今天我不小心增加了我的几个对象的 z 值超过了那个平面,并且无法弄清楚为什么它们没有出现在屏幕上。在使用正交相机时,很容易忘记 z 坐标的这个因素。
java - 使用 libgdx,如何在不重置视图的情况下重置 PerspectiveCamera,以便正确旋转正确的轴?
我正在使用 libgdx。我正在学习基础知识,所以我只是使用以下 PerspectiveCameras 显示一个框来显示一组轴和一个框:
使用以下方法,我可以在不旋转轴的情况下旋转盒子:
这是在我的 RendererClass 中:
这是在我的 ScreenClass 中:
如您所见,它将旋转cam
PerspectiveCamera 而不是zerocam
PerspectiveCamera,因此框会旋转但轴保持固定。问题是,如果我垂直拖动,使盒子放在一边,向左/向右拖动仍然会像时钟一样旋转,而不是旋转木马。希望这是有道理的。
如何使用以下方法public class ScreenClass implements Screen, InputProcessor
正确旋转盒子。
基本上,当我向左或向右拖动时,无论凸轮实际发生什么,我都希望框向左/向右旋转。
我正朝着这个方向前进:调用from myrotateBox(int x, int y)
来计算要旋转多少。RenderClass
ScreenClass
这只是让我有所不同,cam
但zerocam
我觉得这是正确的方向。我想我只是以某种方式使用 x 和 y 值来计算旋转方向,然后以某种方式找出要应用于特定轴的浮点值。
谢谢
python - OpenCV:使用solvePnP确定单应性
在过去的几周里,我尝试学习纠正图像,在这里的人们的帮助下,我设法更好地理解了它。大约一周前,我设置了一个我想纠正的测试示例(从上方查看图像)。这很好用(原始:http ://sitedezign.net/original.jpg 和更正:http: //sitedezign.net/rectified.jpg)与函数 T = cv2.getPerspectiveTransform(UV_cp, XYZ_gcp) 其中 T 成为 Homography .
当我尝试对真实世界的照片执行此操作时,它失败了,因为真实世界的坐标并不完美地在一个平面上(而只是在空间中的 X、Y 和 Z 坐标中测量了大约 10 个控制点)。因此我决定使用solvePnP,并希望能够创建一个我可以使用的Homography。
我在测试示例上尝试了这个,但没有得到我预期的结果:图像没有校正,并且我使用 solvePnP 计算的 Homography 不等于使用 getPerspectiveTransform 计算的 Homography。
我的代码:
结果是一个扭曲的图像,它与上面显示的图像(校正后的图像)相差甚远。此外,应该正确的 Homography T(来自 getPerspectiveTransform)并不接近等于使用 solvePnP (H) 的结果计算的单应性。
有人知道出了什么问题吗?
PS:确定K矩阵和畸变系数的代码(数值取自我的相机Pentax K-5,焦距为33mm,根据Adobe Camera Raw):
c++ - cv::warpPerspective 只显示扭曲图像的一部分
我通过使用 getHomography 和 warpPerspective 将图像从正面透视图更改为出价眼睛视图。
它的工作原理是图像扭曲到所需的视角,但裁剪已关闭。它将扭曲的图像大部分移到图像框之外。我认为原因是因为操作导致负坐标。
我已经手动计算了用于计算平移矩阵的点,而不是使用任何 opencv:s 函数来计算,因为即棋盘函数未能检测到正确的点。
我想这可以通过对转换矩阵进行额外的更改来解决。但是这是怎么做到的呢?另外,有没有办法确保转换后的图像沿 x 轴居中,然后让 y 轴调整到所需位置?
现在完成这项工作的代码片段:
opencv - 在已知参考距离的图像上测量距离时的透视补偿
我正在尝试从单点透视、单相机设置计算沿视场绘制的任意线的真实世界距离。
我将有一个已知的平行运行距离。如何找到需要应用于测量线像素长度的补偿系数?
我是否必须考虑到消失点的距离,因为每像素的长度越接近消失点?我是否需要使用已知线的梯度来给我一个变化率?
c# - 相机问题
我想让屏幕跟随玩家,看到很多人使用 Matrix 让相机随心所欲地做,我有点卡住了。我有一个名为 Game1.cs 的主类,一个 Player 类是运动,大多数人在他们的相机功能中都有运动系统。我想要的只是相机跟随玩家,没有缩放或旋转(目前)。
我开始了 Camera 课程:
游戏1.cs:
我错过了什么?我该如何解决这个问题?
我应该/如何添加我的 Player.cs 类?
编辑:2014 年 3 月 17 日 10:36
我通过将 Matrix Transform 更改为方法并将 Transform() 添加到SpriteBatch.Begin()
. 我还添加了一个public Player thing(Player player)
以使位置等于玩家位置。但是播放器被卡在屏幕的左侧。
如何使播放器位于屏幕中央?
代码现在看起来像这样: