Unity 6.3
0 онлайн 83 гостей 3 в системе
Вход

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) } }