TerrainData.GetInterpolatedNormal
Declaration
public Vector3 GetInterpolatedNormal(float x, float y);Параметры
| Параметр | Описание |
|---|---|
| x | Нормализованная координата x местоположения в диапазоне [0, 1]. |
| y | Нормализованная координата y местоположения в диапазоне [0, 1]. |
Возвращаемое значение
Vector3 Нормированный нормальный вектор, представляющий ориентацию поверхности в данном месте.
Описание
Получить интерполированный нормальный вектор в заданном месте на карте высот.
Параметры x и y являются нормализованными координатами, которые определяют положение на карте высот.
Функция сначала вычисляет нормы поверхности в окружающих точках сетки с помощью фильтра Собеля, затем выполняет билинейную интерполяцию на этих нормах для вычисления окончательной нормы поверхности в заданном месте.
Эта функция не повторяет и не обворачивает карту высот. Координаты вне нормализованного диапазона [0, 1] экстраполируются на основе ближайших действительных точек, обеспечивая возвращение действительного вектора нормы.
Возвращаемая норма является единичным вектором.
using UnityEngine;
public class ExampleTerrainInterpolatedNormal : MonoBehaviour { void Start() { // Reference to the active terrain Terrain terrain = Terrain.activeTerrain; if (terrain == null) { Debug.LogError("No active terrain found."); return; }
// Get the TerrainData TerrainData terrainData = terrain.terrainData;
// Example world position Vector3 worldPosition = new Vector3(50f, 0f, 75f);
// Convert world position to normalized terrain coordinates Vector3 terrainPosition = worldPosition - terrain.transform.position; float normalizedX = Mathf.InverseLerp(0, terrainData.size.x, terrainPosition.x); float normalizedZ = Mathf.InverseLerp(0, terrainData.size.z, terrainPosition.z);
// Ensure coordinates are within the valid range of [0, 1] normalizedX = Mathf.Clamp01(normalizedX); normalizedZ = Mathf.Clamp01(normalizedZ);
// Get the interpolated normal Vector3 interpolatedNormal = terrainData.GetInterpolatedNormal(normalizedX, normalizedZ);
// Output the normal vector Debug.Log($"Interpolated Normal at ({worldPosition.x}, {worldPosition.z}): {interpolatedNormal}"); // Example output from a terrain with differing heights around the sampled position: // Interpolated Normal at (50, 75): (-0.57, 0.67, 0.47) } }