Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Feragon · May 30, 2013 at 06:55 PM · graphicsmatrixglprimitives

How can I transform a primitive using only GL and matrix multiplication (no GameObject)?

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.

Comment
Add comment · Show 4
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image jerichaosymphony · May 30, 2013 at 10:44 PM 0
Share

why do you use GL in unity? I thought you are talking about some kind of opencompute shader mesh creation, I thought that everything translation etc in unity used the unity commands

avatar image robertbu · May 30, 2013 at 10:48 PM 0
Share

@jerichaosymphony - GL is a Unity class implementing a low level graphics library.

http://docs.unity3d.com/Documentation/ScriptReference/GL.html

avatar image Feragon · May 30, 2013 at 10:51 PM 0
Share

I was wondering, maybe the problem is line 23, the GL.Begin(GL_LINES)? Is it possible that that resets the modelview matrix regardless of the fact that I pushed the matrix first?

avatar image mrzapp · May 02, 2014 at 01:48 AM 0
Share

I have the same problem, did this ever get solved?

1 Reply

· Add your reply
  • Sort: 
avatar image
1

Answer by evajolli · Dec 23, 2014 at 07:13 AM

 var matrix = Matrix4x4.TRS(...);
 
 GL.PushMatrix();
 GL.MultMatrix(matrix);
 
 //Draw
 
 GL.PopMatrix();

This worked for me.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

16 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Graphics library 1 Answer

gl class iOS 1 Answer

Using GL to display HUD on screen 0 Answers

GL and Graphics library free in Unity 4.0 0 Answers

How to replicate renderer.worldToLocalMatrix 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges