如何使相机跟随地形's在此示例中的高度:http://threejs.org/examples/#webgl_t
how to make a camera follows the terrain's height in this sample: http://threejs.org/examples/#webgl_terrain_dynamic
我想知道如何在这三个js示例中制作相机:http://threejs.org/examples/#webgl_terrain_dynamic
遵循地形的高度。因此,当地形移动时,相机会根据地形的山丘(高度)上下移动。
换句话说,知道地形的高度是由高度图构建的,我怎么能得到地形的高度?
我已经尝试使用Raycaster如下:
var raycaster = new THREE.Raycaster( camera.position, new THREE.Vector3(0, -1, 0) );
var intersects = raycaster.intersectObject( terrain, false );
var intersect_point = intersetcs[0].point;
但无论相机位于何处,intersect_point
的y值始终等于0。实际上,本例中的地形高度是由高度图创建的。因此,作为平面的地形的几何图形不会被高度贴图更改,而是保持平坦,因此是光线投射器的结果。
你能帮我找到一种方法来获得给定位置的地形高度吗。
非常感谢你的帮助。
在示例中,计算相机相对于"heightmap"纹理的位置,并读取高度信息(您可能需要查看heightmap正在使用的着色器来确定如何"读取",因为我不记得它的详细信息)。
以下是我要使用的一般解决方案。
步骤1:复制地形着色器(添加颜色的着色器,而不是创建物理地形的着色器)并对其进行修改,以便不输出地形颜色,而是根据与摄影机的距离输出颜色(想想MeshDepthMaterial或MeshDistanceMaterial)。您必须执行一些浮动<->彩色包装,以确保您可以读出完整的浮动。我们将其称为"距离着色器",因为它的目标是渲染事物离相机的距离。
第二步:添加一个看起来笔直向下的相机(相对于地形),你需要保持这个相机的位置与你的实际相机同步。这在渲染循环期间应该很容易做到(只需复制位置向量)。相机的视野可能非常小(比如1度)。我们称之为"高度相机",因为它的目标是确定高度。
步骤3:在渲染循环中。首先使用"距离着色器"answers"高度摄影机"将地形渲染为纹理目标(可以很小,可能只有1像素乘1像素)。
步骤4:读取步骤3中纹理目标的颜色信息,通过反转颜色填充将其从RGBA转换回float。现在你有了身高。
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- ExtJS——在展开/折叠时调整面板高度
- 分析高度属性时出现意外值{{specs.height}}.index.html
- Meteor如何接收HTTP请求
- 单击页面上的链接后高度发生变化
- 不加载宽度和高度的角度pintura
- 在我的情况下,如何进行http请求
- 查找元素高度,包括边距
- 如何自动调整标签的高度以适应内容
- Javascript高度问题
- //而不是在src=“”上使用http://"属性
- 使用JavaScript根据窗口/视口的高度动态调整图像大小
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- 我无法使用angularJs($http)访问服务器
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 如何将PHP get查询转换为Meteor's HTTP.get()
- 角度异步http自动完成
- 如果宽度是百分比,如何设置以px为单位的图像高度
- 如何使相机跟随地形's在此示例中的高度:http://threejs.org/examples/#webgl_t
- 如何检查屏幕高度以进一步$http请求