Skip to content

Instantly share code, notes, and snippets.

View j-gn's full-sized avatar

Johannes j-gn

View GitHub Profile
@j-gn
j-gn / gist:b0aba17fb3e67e8f6d7cbc01920cad7b
Last active February 22, 2019 05:10
Automatic co-routines and blocks and synchronization help
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System;
public class FlowRoutine
{
static CoroutineHost host;
Bounds GetBoundsInSpace (IList<CameraFocusPoint> points, Matrix4x4 m)
{
Bounds b = new Bounds();
Vector3 min = Vector3.one * float.MaxValue;
Vector3 max = Vector3.one * float.MinValue;
for (int i = 0; i < points.Count; i++)
{
var p = m.MultiplyPoint(points [i].position);
min = Vector3.Min (min, p);
max = Vector3.Max (max, p);
void DrawBounds(Matrix4x4 m, Bounds b)
{
Vector3 va = m.MultiplyPoint(new Vector3(b.min.x,b.min.y,b.min.z));
Vector3 vb = m.MultiplyPoint(new Vector3(b.min.x,b.max.y,b.min.z));
Vector3 vc = m.MultiplyPoint(new Vector3(b.max.x,b.max.y,b.min.z));
Vector3 vd = m.MultiplyPoint(new Vector3(b.max.x,b.min.y,b.min.z));
Vector3 ve = m.MultiplyPoint(new Vector3(b.min.x,b.min.y,b.max.z));
Vector3 vf = m.MultiplyPoint(new Vector3(b.min.x,b.max.y,b.max.z));
Vector3 vg = m.MultiplyPoint(new Vector3(b.max.x,b.max.y,b.max.z));
@j-gn
j-gn / gist:781cc1652149e9cc9d99e4e2814c323d
Created April 27, 2016 15:17
Transformation matrix in and out of clip space / projection space of camera
public static Matrix4x4 WorldSpaceToClipSpace(Camera c){
return (
Matrix4x4.Perspective (c.fov, c.aspect, c.nearClipPlane, c.farClipPlane)
* Matrix4x4.TRS (Vector3.zero, Quaternion.identity, new Vector3 (-1, -1, -1))
* c.transform.worldToLocalMatrix
);
}
public static Matrix4x4 ClipSpaceToWorldSpace(Camera c){
return WorldSpaceToClipSpace(c).inverse;
}
@j-gn
j-gn / gist:3b640fadb39c54d8900d
Last active August 29, 2015 14:04
Newtons Method, Approximate function root
using System;
public class NewtonsMethod
{
public const float APPROXIMATE_ZERO = 0.000001f;
/// <summary>
/// f(x)
/// </summary>
public Func<float, float> fx;
@j-gn
j-gn / gist:6402c2d2f52bf7ba5a7e
Last active August 29, 2015 14:03
Distance to the shell of a sphere from a point pPoint in the direction pDirection
using UnityEngine;
public class Sphere : MonoBehaviour
{
public Color color = Color.red;
public float radius;
public bool Contains(Vector3 pPoint)
{
if (Vector3.SqrMagnitude(pPoint - transform.position) > radius * radius)
return false;
void AddTorqueAt(Vector3 torque, Vector3 pPosition)
{
Vector3 torqueAxis = torque.normalized;
Vector3 ortho = transform.forward;
if ((torqueAxis - ortho).sqrMagnitude < Vector3.kEpsilon)
{
ortho = transform.right;
}
@j-gn
j-gn / gist:6854762
Created October 6, 2013 14:30
ManagedPool, inpsired by d3js selection
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class ManagedPool<Q, T>
{
List<T> _pooledItems = new List<T>();
List<T> _activeItems = new List<T>();
public Func<T> allocateItem = null;
@j-gn
j-gn / Container.cs
Created April 6, 2013 20:07
A simple unity gui base container
using UnityEngine;
using System.Collections.Generic;
using System;
/// <summary>
/// A simple gui container class
/// tries to autoload a texture if a string is passed into the constructor
/// if no texture, container has no width or height
/// position, scale and rotation are implicit local transforms
/// </summary>
public class Container : IList<Container>