- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前有一个由两个区域组成的屏幕:
(值只是这个特定示例的假定值,当然可能因屏幕而异)。
屏幕总尺寸为 1080x1432 像素(宽 x 高),由两个区域组成,每个区域都使用 glViewPort
进行裁剪。这是因为我希望区域 (1) 在缩放时不要填满屏幕。
两者都有自己的相机。
区域(1)宽15f,高15f以上(15f以上无所谓)
我希望区域 (2) 的宽度为 7f,高度为 1f(为方便起见)。因此我想相应地设置相机。我试图通过计算 FOV 来做到这一点:
float size = 1f;
float halfHeight = size * 0.5f;
halfHeight *= (float) 154 / (float) 1080;
float fullHeight = 2 * halfHeight;
float halfFovRadians = MathUtils.degreesToRadians * camera.fieldOfView * 0.5f;
float distance = halfHeight / (float) Math.tan(halfFovRadians);
camera.viewportWidth = 1080;
camera.viewportHeight = 154;
camera.position.set(0f, 0, distance);
camera.lookAt(0, 0, 0);
camera.update();
然后我创建了一个对象:
ModelBuilder builder = new ModelBuilder();
builder.begin();
builder.node();
MeshPartBuilder meshBuilder = builder.part("lattice", GL20.GL_TRIANGLES,
VertexAttributes.Usage.Position,
new Material(ColorAttribute.createDiffuse(Color.GRAY)));
BoxShapeBuilder.build(meshBuilder, 0f, 0f, 0f, 7f, 1f, 0f);
Model model = builder.end();
mHudModel = new ModelInstance(model);
如果我手动尝试将距离设置为 1f,我仍然可以查看框,但如果低于 1.0f,框将不会显示。计算的距离约为 0.76f。
我正在尝试使用与 https://xoppa.github.io/blog/a-simple-card-game/ 相同的概念计算 FOV。它适用于区域 (1)。
我不能这样使用相机吗?我是否错误地计算了 FOV?为什么我的物体在距离低于 1f 时会消失?
谢谢。
最佳答案
投影矩阵描述了从场景的 3D 点到视口(viewport)的 2D 点的映射。它从眼睛空间转换到剪辑空间,剪辑空间中的坐标通过除以w
转换为归一化设备坐标(NDC)。剪辑坐标的组成部分。 NDC 的范围为 (-1,-1,-1) 到 (1,1,1)。
超出 NDC 的每个几何体都将被剪裁。
相机平截头体的近平面和远平面之间的物体被映射到NDC的范围(-1, 1)。
(进一步参见 How to render depth linearly in modern OpenGL with gl_FragCoord.z
in fragment shader?)
这意味着如果您想看到比1.0更近的物体,那么您必须将到近平面的距离设置为小于1.0.
请注意,近平面和远平面应尽可能靠近场景,以提高计算精度并避免 z-fighting,但它们必须包括您希望从场景中看到的所有内容 。
关于android - 计算 PerspectiveCamera 的视锥体 FOV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46164180/
我正在制作这个程序,您可以在其中单击一个对象,对其进行缩放,然后通过按住鼠标右键并拖动从各个 Angular 查看它。我需要相机围绕物体移动,而不是在相机看着它的情况下旋转物体。老实说,我只是不知道如
我正在尝试或多或少地重新创建 Johnny Lee's Wii head tracking app ,但使用增强现实工具包进行跟踪,使用 WPF 进行图形处理。为此,我需要使用顶部、底部、右侧和左侧参
我已经用相机设置了一个场景 cam = new PerspectiveCamera(80, w, h); cam.position.set(0, 0, -1); cam.loo
有谁知道 PrespectiveCamera 的任何好的教程,这些教程没有被弃用。任何与 3d 图形相关的东西实际上都很棒.. 最佳答案 看看Modern 3D Graphics Programmin
我目前有一个由两个区域组成的屏幕: (值只是这个特定示例的假定值,当然可能因屏幕而异)。 屏幕总尺寸为 1080x1432 像素(宽 x 高),由两个区域组成,每个区域都使用 glViewPort 进
我正在构建一个在 THREE.js 上运行的网站来生成 3D 世界。根据视频游戏的经验,我知道他们通常使用大约 90 度的摄像机视野角。然而,当我将 THREE.js 中的 PerspectiveCa
我有一个加载一个 .obj 文件的场景。 使用PerspectiveCamera我不想在对象在相机中完全可见的情况下开始场景。 FOV 固定为 60 对象具有可变大小 TrackballControl
虽然我确实具备 OpenGL 的基本知识,但我只是从 libgdx 开始。 我的问题是:为什么使用完全相同的代码但只是从 OrthographicCamera 切换到 PerspectiveCamer
我想模拟盒子和矩形的透视变形。我的目标是扭曲盒子和图像,就好像相机正在倾斜和移动一样。但我并没有真正了解如何使用 PerspectiveCamera。 当我将 fixedEyeAtCameraZero
我需要计算二维相机 View 边界,x y 宽度和高度 在这个屏幕截图中,网格是每个1个单位,我需要计算3D View 的边界框,在上面的示例图像中,结果应该是: float x = -3; floa
我在空间某处的 THREE.js 中有 PerspectiveCamera 作为网格的子项。相机仍应注视网格(局部坐标 [0, 0, 0])。我想在不改变观察方向的情况下改变相机与网格的距离。有什么简
我有一个 THREE.PerspectiveCamera,我向其添加了一个 THREE.CameraHelper。 cameraLocal = new THREE.PerspectiveCamera(
对于一个项目,我使用 PerspectiveCamera,它使用 r69 中的 vrcontrols 进行旋转。在某一时刻,我需要当前的视角度数(相机所看方向的水平和垂直度数)。我将如何获得这些? 最
我在网上找了很多,但是没找到。我基本上是在寻找在按下按钮时呈现图像的相机功能。 请注意,我有 2 个 THREE.PerspectiveCamera(主要和第二个)。主摄像头是我用于 OrbitCon
我尝试检测 Three.js 场景中的当前缩放级别(或类似级别)。 我的意思是通过鼠标滚轮操作应用的“缩放”(小推车)例如:简单场景包含:perspectiveCamera + orbitContro
我可以使用透视相机来渲染我的 Sprite 批处理吗? 我所有的 sprite(那些加载了相同纹理的)看起来大小相同,但我希望将相机放置在屏幕底部的某个高度,这样那些靠近屏幕顶部的 sprite 看起
在 THREE.js 中,我们使用以下函数构造一个摄像头 const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 100
我是一名优秀的程序员,十分优秀!