问题标签 [3dcamera]
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.
opengl - 给定一些点的 3d 相机位置
嘿嘿,
我目前正在做一个项目,我需要放置相机,以便在不移动相机的情况下可以看到角色的完整动作。我有角色开始的位置,以及角色在所有三个方向(X、Y 和 Z)上移动的最大距离。我也有视野(90度)。
是否有一个方程式可以确定我需要将相机放置在哪里,这样它就不必移动就能看到完整的动作?
注意:这是使用 OpenGL。
澄清:摄像机应该在动作中的角色“前面”,而不是在上面。
它也将沿着地平面移动。
project - Glut glLoadMatrixf 相机等效
在我的过剩应用程序中,我正在用相机模拟飞机。当飞机速度较低时,我打算让机头在相机下降时开始指向地面。我的第一个直觉是改变音高,直到它向下指向 -90 度。但是我不能只改变俯仰角,因为如果飞机侧面倾斜或倒置,那么它会注意到改变朝向地面的方向。
现在我试图通过向下移动'lookAt.y'来粗略模拟这个。为此,我试图获取用于设置相机的所有当前相机坐标(eye.x、eye.y、eye.z、look.x、look.y、look.z、up.x、up .y,向上.z)。然后用新的修改值调用集合。
我一直在使用 Camera.cpp 和 Camera.h 来控制我的相机功能。他们可以在这里找到
在添加了获取所有值的方法之后,当进行各种相机运动时,实际上只更新了眼睛的值。我想我的问题是如何检索这些值。
glLoadMaxtrix 调用在这个函数中
有没有办法从这里的矩阵中获取 'eye'、'lookAt' 和 'up' 值?还是我应该做其他事情来获得这些值?
-在此先感谢您的帮助
opengl - 这会导致云台锁定吗?
我制作了一个非常简单的 3d 场景,在世界坐标中有 5 个点。我想在场景中导航,所以我定义了一个带有 UP 和 OUT 矢量的相机。有了这些信息,我在每一帧中生成一个旋转矩阵,我将把它应用到向量上以获得相机坐标。
问题是:我已经阅读了关于使用这种方法的万向节锁定问题,但在这种情况下会发生吗?
请注意,我在每一帧中生成旋转矩阵,并且我没有累积旋转。那么在这种情况下会发生锁吗?如果是这种情况,您会建议如何安全地应用旋转(从 UP 和 OUT 向量)?
谢谢
3d - 从 3 个已知点确定相机位置
我是新来的——所以如果我失礼了,请多多包涵!
我的问题是,是否有一种好的算法可以根据从该相机查看的图像上的 3 个(或更多)已知 3d 点最终在哪里确定相机的 3d 位置和方向?
问题来了,在我的计算中,有 6 个方程,有 6 个未知数,虽然我正在寻找一个一般的解决方案,而且这些方程是复杂的和三角函数的。
任何想法都感激不尽!
干杯,
麦克风
java - OpenGL:创建我自己的相机
我正在尝试创建一个在 3d 空间中移动的相机,但在设置它时遇到了一些问题。我这样做是Java,显然同时使用gluPerspective 和gluLookAt 会产生冲突(屏幕开始疯狂闪烁)。
gluPerspective 设置如下:
然后我创建一个相机矩阵,利用眼睛坐标、前向和向上向量(http://people.freedesktop.org/~idr/glu3/form_4.png)(假设相机的代码是正确的。
最后,在我画出任何我拥有的东西之前:
然后我调用我的绘图例程(通过调用 glRotatef 和 glTranslatef 自行进行一些平移/旋转)。
如果不调用 glMultMatrixf,相机会在屏幕中央显示我需要看到的项目。然而,使用 glMulMatrixf,我得到的只是黑屏。我尝试使用 glLoadMatrixf ,但它也不起作用。难道我做错了什么?我是不是把东西放错了地方?如果没有,这就是应该如何完成的让我知道,我将发布一些可能会造成冲突的相机代码。
编辑:这是相机矩阵创建代码:
我跳错在这段代码的某个地方,如果不是,我会看看我的数学函数,看看发生了什么..
EDIT2:虽然我应该提到至少初始向量(眼睛,中心,向上)是正确的,并且确实将相机放在它应该放在的位置(使用 gluLookAt 但有闪烁问题)。
c# - XNA 中的 FPS 风格相机目标计算
我需要的是根据相机位置、Y 旋转和 Z 旋转来计算我的lookat 3d 矢量在哪里,我会假设任何大于 0 的数字都足以让相机的距离可以看到。
这是我用来控制相机并计算视图和投影矩阵等的静态类。
涉及职位和轮换的班级成员:
我的相机的更新功能:
UpdateMatrices() 处理所有其他事情并按应有的方式工作,但在这里它只是以防万一您想看到它:
有人愿意分享这个秘密吗?
graphics - 如何使用单个四元数表示来控制 3D 相机的方向?
我正在为我的游戏引擎创建一个 3D 相机,我想用一个四元数来表示相机的方向。通过将此四元数转换为旋转矩阵来生成局部上、前和侧摄像机轴。该矩阵的第一行给出了相机的 X 轴(侧向量),第二行给出了 UP 向量,第三行给出了 FRONT 向量。为了移动相机,我的函数需要移动方向,更新数量和位置,并更新视图矩阵()。要旋转相机,我的函数获取要旋转的轴和角度。从这个轴和角度创建一个临时四元数,并应用于我相机的当前方向。我围绕世界 Y 轴旋转以进行偏航,并围绕相机的侧向量进行俯仰。这个投球没有 当我的相机轴未与世界轴对齐时,无法正常工作。如果我改为围绕全局 X 轴进行推销,那么它可以正常工作,但我知道这不是我想要的。此外,当我的相机轴与世界轴不对齐时,运动也会出错。我正在使用基本的“wasd”运动。我的运动和俯仰函数使用局部轴,因此我有一种预感,我从四元数中提取局部轴的方式不正确,但我无法弄清楚出了什么问题。
相机类:
移动和旋转相机的功能:
这是我关于堆栈溢出的第一篇文章,所以如果需要更多信息,请告诉我。如果您在我的代码和方法中发现任何错误,请提供帮助。谢谢!
3d - 准确地将玩家的相对位置传递给 AGAL
我正在尝试开发一个片段着色器,它淡入0,其中面部法线垂直于玩家“相机”的方向。(这是针对球形行星大气;我希望它们在外部范围内消失)。
我设置了游戏,以便玩家始终处于“宇宙位置”0、0、0 处,并且所有对象在玩家移动时都会在玩家周围平移其 transform.matrix3D。
我应该指出,我有多个着色器工作正常,其中一些包括混合纹理、在 2 个模型之间插值和镜面着色;但是,这个问题让我打败了。
我一直认为片段着色器需要知道玩家的方向(以便它可以在当前面法线和玩家方向之间进行点积)。但是,它还需要将模型的“当前”顶点位置(即着色器当前正在绘制的顶点输出位置)添加到反向玩家相机方向上;这样,从该模型表面位置到相机的方向将是正确的。
好吧,显然不是。(我可以解释我一直在做什么,但我可以感觉到人们已经忽略了这个问题......)。鉴于我还需要包括(我认为)模型的顶点位置与模型的中心位置“偏移”的事实,谁能告诉我如何正确计算玩家的方向?这一直让我头疼!
谢谢。
编辑
这是相关的 AS3 代码,后面是 AGAL:
在顶点着色器中:
然后,在片段着色器中:
但这一切都导致了一些奇怪的渲染行为,其中一半的大气似乎被绘制,这取决于你相对于地球的位置。莫名其妙。任何帮助都非常感谢。
algorithm - Structure from Motion,给定 2D 图像点对应关系重建 3D 点云
用例
- 一个物体以不同的速度围绕它的中心旋转
- 一个固定的摄像头正在观察物体
- 给定 2D 图像点对应关系重建 3D 点云
- 当物体旋转时,相机会看到它的不同部分,因此检测到不同的点和对应关系。
场景
一种。N 图像
b. N-1 图像对
c. N-1 2D Point 对应关系(两个 2D Points 数组)
执行
对于 (N-1) 个 2D 点对应关系中的每一个
- 计算相机相对姿势
- 三角测量以产生 3D 点
- 对于每个 2 个 3D 点数组,使用 [c] 中给出的 2D 对应关系推导对应关系
- 使用派生的 3D Correspondence @ [3] 派生每个对象 3D 点的轨迹,从而为每个对象点/顶点生成单个轨迹
结果:
A (N–2) 个 3D 点数组、对应关系、相机位姿和轨迹(每个对象点一个轨迹)
考虑解决问题的方法:
鉴于三角测量结果精确到一定比例,请计算点云。
A. 每个三角测量结果和相机相对平移都
用非齐次坐标表示(每个结果都有不同的比例)。
B. 假设对象结构是实心的,因此不会改变,
每个 3D 点到其中心的距离对于所有相机姿势应该是相同的。
C. 考虑到 [B],[A] 处的所有三角 3D 点和相机平移
都可以转换为齐次坐标系。
D. 选择一个相机位姿并变换每个轨迹中的第一个点(定义@[4])
到那个Camera Pose(通过累积的Camera Pose的倒数变换
),结果,预期的点可以。
以上是从二维点对应生成点云的正确方法吗?
opengl - OpenGL 3D 转换:z 纵横比
我在 OpenGL (webgl) 中做 3D 透视投影,自己用统一矩阵做。一切正常,但我的纵横比为 3:2(600 像素 x 400 像素),这会扭曲所有渲染的几何图形。
在 2D 中,我曾经通过将 x 和 y 分别除以 1 / width 和 1 / height 来修复模型矩阵中的这个问题。
现在我也有 z 担心,我很不知道如何/在哪里转换 z 以不扭曲我的 3:2 纵横比。
模型矩阵似乎没有提供任何机会来做到这一点,我不知道在投影矩阵中在哪里/做什么。
编辑:投影矩阵:
列主要顺序
编辑 2:n < 1 上的奇怪扭曲