Hello, I’ve been creating simple primitives in Unity using GL (without Gizmos since it needs to be more versatile). The initial drawing of the classes I have implemented (like “line” and “circle”) are drawing fine. Here’s an example:
class LineAnnotation : Annotation
{
Vector3[] vertices { get; set; }
Color LineColor = new Color(0,0,0,1);
public LineAnnotation(Vector3 start, Vector3 end)
{
vertices = new Vector3[2] {
start,
end
};
if(material == null) {
CreateMaterial();
}
}
public override void Draw()
{
GL.PushMatrix();
if (material != null) {
material.SetPass(0);
}
GL.Begin(GL.LINES);
GL.Color(new Color(0,0,0));
GL.Vertex(vertices[0]);
GL.Vertex(vertices[1]);
GL.End();
GL.PopMatrix();
}
}
However, I also have “Transform” classes which need to translate, rotate, or scale a given primitive. The problem is that the transforms are not happening. The primitives get drawn in their initial positions, even when they’re inside of a Transform object that is storing the vector translation. See my code below:
This is the draw method for my translation class, and below that is the one for scaling:
public override void Draw() // The translation one.
{
GL.PushMatrix(); // Save Matrix
GL.modelview.SetTRS(Translation,Quaternion.identity, Vector3.one); // Change Translation, but leave the other parts of the matrix alone.
DrawChildren(); // Draws the primitives it was passed
GL.PopMatrix(); // Restore Matrix
}
public override void Draw() //This is the scaling one.
{
GL.PushMatrix(); // Save Matrix
GL.modelview.SetTRS(Vector3.zero,Quaternion.identity, new Vector3(Scale, Scale, Scale)); // Change Scale part of modelview, but leave the other parts of the matrix alone.
DrawChildren(); // Draws the primitives it was passed
GL.PopMatrix(); // Restore Matrix
}
Does anyone have any ideas about why this is happening? I feel like there’s a pretty easy fix to it that I’m missing, but it can’t be that hard to transform the modelview matrix so that I can transform whatever child primitive is being drawn, and then pop back out so I can get on with drawing other primitives. Any thoughts or advice is welcome.