66 lines
2.6 KiB
C#
66 lines
2.6 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
public class OvrAvatarProjectorRenderComponent : OvrAvatarRenderComponent {
|
|
|
|
Material material;
|
|
|
|
internal void InitializeProjectorRender(ovrAvatarRenderPart_ProjectorRender render, Shader shader, OvrAvatarRenderComponent target)
|
|
{
|
|
if (shader == null)
|
|
{
|
|
shader = Shader.Find("OvrAvatar/AvatarSurfaceShader");
|
|
}
|
|
|
|
material = CreateAvatarMaterial(gameObject.name + "_projector", shader);
|
|
material.EnableKeyword("PROJECTOR_ON");
|
|
|
|
Renderer renderer = target.GetComponent<Renderer>();
|
|
if (renderer != null)
|
|
{
|
|
List<Material> materials = new List<Material>(renderer.sharedMaterials);
|
|
materials.Add(material);
|
|
renderer.sharedMaterials = materials.ToArray();
|
|
}
|
|
}
|
|
|
|
internal void UpdateProjectorRender(OvrAvatarComponent component, ovrAvatarRenderPart_ProjectorRender render)
|
|
{
|
|
OvrAvatar.ConvertTransform(render.localTransform, this.transform);
|
|
material.SetMatrix("_ProjectorWorldToLocal", this.transform.worldToLocalMatrix);
|
|
component.UpdateAvatarMaterial(material, render.materialState);
|
|
|
|
}
|
|
|
|
void OnDrawGizmos()
|
|
{
|
|
Vector3 v000 = transform.localToWorldMatrix.MultiplyPoint(new Vector3(-1.0f, -1.0f, -1.0f));
|
|
Vector3 v100 = transform.localToWorldMatrix.MultiplyPoint(new Vector3(+1.0f, -1.0f, -1.0f));
|
|
Vector3 v010 = transform.localToWorldMatrix.MultiplyPoint(new Vector3(-1.0f, +1.0f, -1.0f));
|
|
Vector3 v110 = transform.localToWorldMatrix.MultiplyPoint(new Vector3(+1.0f, +1.0f, -1.0f));
|
|
Vector3 v001 = transform.localToWorldMatrix.MultiplyPoint(new Vector3(-1.0f, -1.0f, +1.0f));
|
|
Vector3 v101 = transform.localToWorldMatrix.MultiplyPoint(new Vector3(+1.0f, -1.0f, +1.0f));
|
|
Vector3 v011 = transform.localToWorldMatrix.MultiplyPoint(new Vector3(-1.0f, +1.0f, +1.0f));
|
|
Vector3 v111 = transform.localToWorldMatrix.MultiplyPoint(new Vector3(+1.0f, +1.0f, +1.0f));
|
|
|
|
Gizmos.color = Color.gray;
|
|
|
|
Gizmos.DrawLine(v000, v100);
|
|
Gizmos.DrawLine(v000, v010);
|
|
Gizmos.DrawLine(v010, v110);
|
|
Gizmos.DrawLine(v100, v110);
|
|
|
|
Gizmos.DrawLine(v000, v001);
|
|
Gizmos.DrawLine(v100, v101);
|
|
Gizmos.DrawLine(v010, v011);
|
|
Gizmos.DrawLine(v110, v111);
|
|
|
|
Gizmos.DrawLine(v001, v101);
|
|
Gizmos.DrawLine(v001, v011);
|
|
Gizmos.DrawLine(v011, v111);
|
|
Gizmos.DrawLine(v101, v111);
|
|
}
|
|
}
|