Developing Games on Intel Graphics
If you are gaming on graphics integrated in your Intel Processor, this is the place for you! Find answers to your questions or post your issues with PC games
489 Discussions

Realsense 2.0 D415 - Depth to Terrain

atiwa11
Beginner
510 Views

I am trying to generate a runtime terrain from the depth values of the realsense camera D415.
I just got the camera to try and do something for the summer. never used more than webcams in unity before so im very lost even after going through all the sample scenes.

my terrain is 500 x 500 x 40
using realsense sdk 2.0

Here is the code below(attached to the Terrain Game Object in the scene. IF i run this unity goes full silent treatment on my incompetence im very sure im doing something gravely wrong. any help is greatly appreciated.

 

using UnityEngine;
using Intel.RealSense;

/// <summary>
/// this script is made to test the new terrain in unity with intel realsense depth
/// </summary>
public class TerrainGenerator : MonoBehaviour {

    public int depth = 40;
    public int width = 500;
    public int height = 500;

    public float scale = 20f;

    public float xOffset = 10;
    public float yOffset = 10;
    private DepthFrame depthFrame;
    public bool scroll;
    public float scrollSpeed;

    private Pipeline pipe;
    private void Start()
    {
        ///
        pipe = new Pipeline();
        pipe.Start();


        ///


        xOffset = Random.Range(0f, 9999f);
        yOffset = Random.Range(0f, 9999f);

        scroll = false;
        scrollSpeed = 0;
    }
    void Update()
    {
        Terrain terrain = GetComponent<Terrain>();
        terrain.terrainData = GenerateTerrain(terrain.terrainData);

        if(scroll)
            xOffset += Time.deltaTime * scrollSpeed;
        
    }
    TerrainData GenerateTerrain(TerrainData tData)
    {
        tData.heightmapResolution = width + 1;
        tData.size = new Vector3(width, depth, height);
        tData.SetHeights(0, 0, GenerateHeights());
        return tData;
    }
    float[,] GenerateHeights()
    {
        float[,] heights = new float[width, height];
        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < height; y++)
            {

                //heights[x, y] = CalculateHeight(x, y);
                var frames = pipe.WaitForFrames();
                var depth = frames.DepthFrame;
                heights[x, y] = depth.GetDistance(x, y);
                
            }
        }
        return heights;
    }

    float CalculateHeight(int x, int y)
    {
        //float xCoord = (float)x / width * scale + xOffset;
        //float yCoord = (float)y / height * scale + yOffset;
        //return depthFrame.GetDistance(x,y);
        //return Mathf.PerlinNoise(xCoord, yCoord);

        using (var frames = pipe.WaitForFrames())
        using (var depth = frames.DepthFrame)
            return depth.GetDistance(x, y);
    }

}

 

0 Kudos
0 Replies
Reply