Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 7 of 7

Thread: Moving part of model on circle

  1. #1
    Junior Member Newbie
    Join Date
    Nov 2012
    Posts
    13

    Moving part of model on circle

    Hi guys.
    Need help with something.

    I have imported model and I need to rotate part of it.
    Here is what I mean.

    I have this in the beginning:


    And need to transform it to this (like when I press button I want this part of model to smoothly rotate until right angle):



    So this is the code I used
    Code :
    //somewhere in the beginning
    float angle = 0.0;
     
     
    case GLUT_KEY_RIGHT:                                                                                                                          //when this button is pressed
     
    int i, xo = 20;                                                                                                     // i is for loop and xo is x coordinate of the circle center 
     
     
    	for (i=0; i<=object.vertices_qty; i++)                                                                     //go through all the vertices
    	{
    		if(object.vertex[i].x > xo)                                                                         //if the x coordinate is bigger than xo - choose the part to rotate
    		{
     
    		     if(object.vertex[i].r == 0)                                                             //calculate the circle radius if it hasn't been already done
    		     object.vertex[i].r = object.vertex[i].x-xo;
     
    		angle += 0.001;                                                                                      //increment the angle
     
                           //now I want to calculate new vertex coordinates (after rotation)
     
                           object.vertex[i].y = object.vertex[i].w + object.vertex[i].r*cos(angle);             //object.vertex[i].w is original y coordinate (before rotation) which is also coordinate of the circle center
    		object.vertex[i].x = xo + object.vertex[i].r*sin(angle);
     
    		}
    	}		
     
    break;


    What is the problem here? The code is not working properly. The result is trash .

    Sry if there are some serious mistakes. I am just a beginner in OpenGL and geometry is not my big friend .

    Have a nice day
    Last edited by Hitokage; 11-08-2012 at 12:25 PM. Reason: fixed one mistake

  2. #2
    Junior Member Newbie
    Join Date
    Nov 2012
    Posts
    13

    Version 2

    After some edits I ended with this but it is not working either.

    Code :
    case GLUT_KEY_RIGHT:
    			int i, xo = 20, yo = 2;
     
    			angle += 0.1;
     
    			for (i=0; i<=object.vertices_qty; i++)
    			{
    				if(object.vertex[i].x >= xo)
    				{
     
    					if(object.vertex[i].r == 0.0) 
    					object.vertex[i].r = sqrt( (object.vertex[i].x-xo)*(object.vertex[i].x-xo) + (object.vertex[i].y-yo)*(object.vertex[i].y-yo)  );
     
     
     
    				object.vertex[i].y = yo + object.vertex[i].r*sin(angle);
    				object.vertex[i].x = xo + object.vertex[i].r*cos(angle);
     
    				}
    			}

    Result is this:

  3. #3
    Senior Member OpenGL Pro
    Join Date
    Jan 2012
    Location
    Australia
    Posts
    1,117
    You really need to look at matrices for these sorts of task. There is quite a lot of information on the web about this

  4. #4
    Junior Member Newbie
    Join Date
    Nov 2012
    Posts
    13
    Quote Originally Posted by tonyo_au View Post
    You really need to look at matrices for these sorts of task. There is quite a lot of information on the web about this
    Yea heard about them . Thanks for advice. I will look at that.

  5. #5
    Junior Member Newbie
    Join Date
    Nov 2012
    Posts
    13
    Hi it's me again.
    So I learned sth about matrices but still don't know how to use them for this. I think it is not possible to change matrices during the polygons drawing. So how can I use them? Somehow apply them to the every vertex before drawing? How?

  6. #6
    Senior Member OpenGL Pro
    Join Date
    Jan 2012
    Location
    Australia
    Posts
    1,117
    You don't do it during the draw. You modify your vertices then draw

  7. #7
    Junior Member Newbie
    Join Date
    Nov 2012
    Posts
    13

    thx

    Quote Originally Posted by tonyo_au View Post
    You don't do it during the draw. You modify your vertices then draw
    Ok so I use that loop and instead of that calculations use matrix multiplication to the vertex or vector.
    Have to check more about that.
    Thanks for help

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •