68 lines
2.3 KiB
C#
68 lines
2.3 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class reflection : MonoBehaviour
|
|
{
|
|
public Camera _mainCamera;
|
|
public Camera _reflectionCamera;
|
|
RenderTexture _reflectionRenderTexture;
|
|
public Transform _planner;
|
|
|
|
private Material _palnnerMaterial;
|
|
|
|
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
//拿到平面材质
|
|
_palnnerMaterial = _planner.GetComponent<MeshRenderer>().material;
|
|
//创建相机并指定相机渲染目标
|
|
_reflectionRenderTexture = new RenderTexture(Screen.width, Screen.height, 24);
|
|
_reflectionCamera.targetTexture = _reflectionRenderTexture;
|
|
_reflectionCamera.enabled = true;
|
|
//将相机渲染的目标赋给材质
|
|
_palnnerMaterial.SetTexture("_ReflectionTex",_reflectionRenderTexture);
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
CalcReflectionCameraProperties();
|
|
}
|
|
|
|
void CalcReflectionCameraProperties()
|
|
{
|
|
Vector3 cameraPosWorldSpace = _mainCamera.transform.position;
|
|
Vector3 cameraForwardWorldSpace = _mainCamera.transform.forward;
|
|
Vector3 cameraUpDirWorldSpace = _mainCamera.transform.up;
|
|
//转换世界坐标系的点到平面的局部坐标系下
|
|
|
|
cameraPosWorldSpace.y *= -1.0f;
|
|
cameraForwardWorldSpace.y *= -1.0f;
|
|
//Vector3 cameraPosPlanarSpace = cameraPosWorldSpace; //_planner.InverseTransformPoint(cameraPosWorldSpace);
|
|
//Vector3 cameraForwardPlannarSpace = _planner.InverseTransformPoint(cameraForwardWorldSpace);
|
|
Vector3 cameraUpPlannarSpace=_planner.InverseTransformPoint(cameraUpDirWorldSpace);
|
|
|
|
//cameraPosPlanarSpace.y *= -1.0f;
|
|
//cameraForwardPlannarSpace.y *= -1.0f;
|
|
cameraUpPlannarSpace.y *= -1.0f;
|
|
|
|
//cameraPosWorldSpace = _planner.TransformPoint(cameraPosPlanarSpace);
|
|
//cameraForwardWorldSpace = _planner.TransformPoint(cameraForwardPlannarSpace);
|
|
cameraUpDirWorldSpace = _planner.TransformPoint(cameraUpPlannarSpace);
|
|
|
|
_reflectionCamera.transform.position = cameraPosWorldSpace;
|
|
_reflectionCamera.transform.LookAt(cameraPosWorldSpace+cameraForwardWorldSpace*0.1f,cameraUpDirWorldSpace);
|
|
|
|
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
|
|
}
|
|
}
|