Skip to content

Instantly share code, notes, and snippets.

@OlegJakushkin
Created March 15, 2016 19:44
Show Gist options
  • Save OlegJakushkin/71f13bdf6cc80d474d14 to your computer and use it in GitHub Desktop.
Save OlegJakushkin/71f13bdf6cc80d474d14 to your computer and use it in GitHub Desktop.
// Simple shaderless Unity 5 Wireframe Renderer (can be used on top of materials)
// OJ2016
using System.Collections.Generic;
using UnityEngine;
// ReSharper disable once UnusedMember.Global
[RequireComponent( typeof( MeshFilter ) )]
public class WireframeRenderer: MonoBehaviour {
private List<Vector3> RenderingQueue;
private void InitializeOnDemand() {
if ( RenderingQueue == null ) {
var meshFilter = gameObject.GetComponent<MeshFilter>();
if ( meshFilter == null ) {
Debug.LogError( "No mesh detected at" + gameObject.name, gameObject );
return;
}
var mesh = meshFilter.mesh;
RenderingQueue = new List<Vector3>();
foreach (var point in mesh.triangles) {
RenderingQueue.Add( mesh.vertices[point] );
}
}
}
// ReSharper disable once UnusedMember.Global
public void OnPreRender() {
GL.wireframe = true;
}
// ReSharper disable once UnusedMember.Global
public void OnRenderObject() {
InitializeOnDemand();
var color = Color.black;
GL.MultMatrix( transform.localToWorldMatrix );
GL.Begin( GL.LINES );
GL.Color( color );
for ( var i = 0; i < RenderingQueue.Count; i+=3 ) {
var vertex1 = RenderingQueue[i];
var vertex2 = RenderingQueue[i+1];
var vertex3 = RenderingQueue[i+2];
GL.Vertex3( vertex1.x, vertex1.y, vertex1.z );
GL.Vertex3( vertex2.x, vertex2.y, vertex2.z );
GL.Vertex3( vertex2.x, vertex2.y, vertex2.z );
GL.Vertex3( vertex3.x, vertex3.y, vertex3.z );
GL.Vertex3( vertex3.x, vertex3.y, vertex3.z );
GL.Vertex3( vertex1.x, vertex1.y, vertex1.z );
}
GL.End();
}
// ReSharper disable once UnusedMember.Global
public void OnPostRender() {
GL.wireframe = false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment