using System;
using System.Collections;
using System.Collections.Generic;
using Unigine;
[Component(PropertyGuid = "d1f2881b069d9ebee03db70515fa3ca0f9ebc77f")]
public class RednderHandsToImage : Component
{
private Mirror mirror;
[ShowInEditor] private PlayerDummy handViewCamera;
[ShowInEditor] private Node parentViewMesh;
[ShowInEditor] int width, height;
private void Init()
{
mirror.m_type = "mid";
mirror.position = new dvec3(0,0, -0.86514f);
Mesh mesh = new Mesh();
mesh.AddPlaneSurface("viewOnHand", 1.85995f, 1, 1);
mirror.mesh = new ObjectMeshStatic(mesh);
mirror.mesh.Transform = new mat4(MathLib.Translate(new vec3(mirror.position)) * MathLib.RotateX(90.0f));
parentViewMesh.AddChild(mirror.mesh);
Material mesh_base = Materials.FindManualMaterial("mesh_base");
mirror.mesh.SetMaterial(mesh_base, 0);
mirror.camera = handViewCamera;
mirror.texture = new Texture();
mirror.texture.Create2D(width, height, Texture.FORMAT_RGBA8, Texture.USAGE_RENDER);
mirror.viewport = new Viewport();
}
private void Update()
{
Render();
}
private void Render()
{
Viewport viewport;
viewport = mirror.viewport;
RenderState.SaveState();
RenderState.ClearStates();
RenderState.PolygonFront = 1;
viewport.RenderTexture2D(mirror.camera.Camera, mirror.texture);
RenderState.PolygonFront = 0;
RenderState.RestoreState();
Material material = mirror.mesh.GetMaterialInherit(0);
material.SetTexture(material.FindTexture("albedo"), mirror.texture);
}
}
struct Mirror
{
public String m_type;
public ObjectMeshStatic mesh; // mirror mesh
public Texture texture; // mirror texture
public PlayerDummy camera; // mirror camera
public Viewport viewport; // mirror viewport
public dvec3 position; // mirror position
};