/*==============================================================================
Copyright (c) 2018 PTC Inc. All Rights Reserved.
Confidential and Proprietary - Protected under copyright and other laws.
Vuforia is a trademark of PTC Inc., registered in the United States and other
countries.
==============================================================================*/
using UnityEngine;
using Vuforia;
///
/// A component that renders a bounding box using lines.
///
public class BoundingBoxRenderer : MonoBehaviour
{
#region PRIVATE_MEMBERS
private Material mLineMaterial = null;
#endregion // PRIVATE_MEMBERS
private void OnRenderObject()
{
GL.PushMatrix();
GL.MultMatrix(transform.localToWorldMatrix);
if (mLineMaterial == null)
{
// We "borrow" the default material from a primitive.
// This ensures that, even on mobile platforms,
// we always get a valid material at runtime,
// as on mobile Unity can strip away unused shaders at build-time.
var tempObj = GameObject.CreatePrimitive(PrimitiveType.Cube);
var cubeRenderer = tempObj.GetComponent();
mLineMaterial = new Material(cubeRenderer.material);
mLineMaterial.color = Color.white;
Destroy(tempObj);
}
mLineMaterial.SetPass(0);
mLineMaterial.color = Color.white;
GL.Begin(GL.LINES);
// Bottom XZ quad
GL.Vertex3(-0.5f, -0.5f, -0.5f);
GL.Vertex3( 0.5f, -0.5f, -0.5f);
GL.Vertex3(0.5f, -0.5f, -0.5f);
GL.Vertex3(0.5f, -0.5f, 0.5f);
GL.Vertex3( 0.5f, -0.5f, 0.5f);
GL.Vertex3(-0.5f, -0.5f, 0.5f);
GL.Vertex3(-0.5f, -0.5f, 0.5f);
GL.Vertex3(-0.5f, -0.5f, -0.5f);
// Top XZ quad
GL.Vertex3(-0.5f, 0.5f, -0.5f);
GL.Vertex3(0.5f, 0.5f, -0.5f);
GL.Vertex3(0.5f, 0.5f, -0.5f);
GL.Vertex3(0.5f, 0.5f, 0.5f);
GL.Vertex3(0.5f, 0.5f, 0.5f);
GL.Vertex3(-0.5f, 0.5f, 0.5f);
GL.Vertex3(-0.5f, 0.5f, 0.5f);
GL.Vertex3(-0.5f, 0.5f, -0.5f);
// Side lines
GL.Vertex3(-0.5f, -0.5f, -0.5f);
GL.Vertex3(-0.5f, 0.5f, -0.5f);
GL.Vertex3(0.5f, -0.5f, -0.5f);
GL.Vertex3(0.5f, 0.5f, -0.5f);
GL.Vertex3(0.5f, -0.5f, 0.5f);
GL.Vertex3(0.5f, 0.5f, 0.5f);
GL.Vertex3(-0.5f, -0.5f, 0.5f);
GL.Vertex3(-0.5f, 0.5f, 0.5f);
GL.End();
GL.PopMatrix();
}
}