Advertisement Jump to content
Sign in to follow this  
4four4

OpenGL help in Scaling in OpenGl

This topic is 1724 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

hi 

 

how r u guys

 

I am beginner in   opengl

 

I am solving assignment that is saying to use 2  function to draw house....

and put this house in  another function 

 

and then  call this function 3 times to draw house  as original , draw another house  reduced down to ¾  of the original  and finally draw third house 

scaled up to 5/4 of the original one

 

 

I have solved the first part and finish draw the original ,stop in the part of scaling reduced by ¾ !!!and scale up 5/4 

I  know that I have to use scale but How I can make it 3 over 4  the size of the original  and  scale up 5/4  ,how I choose the suitable values for x and y!!!

 

Can you help me because I am stuck in this point!!!I had reading book and search the Internet from  yesterday!!

 

Note that the house is of 2 D not 3D

Share this post


Link to post
Share on other sites
Advertisement

If the model is already scaled to 3/4 of the original then multiply it by 4/3 to go back to the original size and then by 5/4. If you want to do it in one step just chain the multiplications, 4/3*5/4 = 5/3.

 

Anyway, it's a good practice to always undo your transformations after drawing something (if there are no childs to be affected too), so the 4/3 scale should be there even if you don't plan to draw another house.

 

EDIT: 3/4 is the same as 0.75, so for the glScalef call should be glScalef(0.75,0.75,1).

Edited by DiegoSLTS

Share this post


Link to post
Share on other sites

If the model is already scaled to 3/4 of the original then multiply it by 4/3 to go back to the original size and then by 5/4. If you want to do it in one step just chain the multiplications, 4/3*5/4 = 5/3.

 

Anyway, it's a good practice to always undo your transformations after drawing something (if there are no childs to be affected too), so the 4/3 scale should be there even if you don't plan to draw another house.

 

EDIT: 3/4 is the same as 0.75, so for the glScalef call should be glScalef(0.75,0.75,1).

 

 

the original is of specific size and I want to  reduce it by 3/4 

 

also I want also the original to scale by 5/4 to make it bigger 

 

 

I think the glScale is the suitable one to use

 

,so to reduce the original  based on your answer  I do like this

glScale(.75,.75,1)

 

and to make big house I do like this

glScale(1.25,1.25,1)

 

 

Is that right?

 

 

Thank you for your replay 

Share this post


Link to post
Share on other sites

If you need to scale at 5/4 of the original size, you first need to undo the previous transformation of 3/4.

 

If you do only those calls and draw the house after each, you'll get a house 3/4 of the original size and then a house 5/4 of the small size. You want to scale back to the original size with a 4/3 (1.333..) scaling factor before the 1.25 one. If you already managed to undo all the transformations before each drawing of the house ignore the 4/3 scaling.

Share this post


Link to post
Share on other sites

If you need to scale at 5/4 of the original size, you first need to undo the previous transformation of 3/4.

 

If you do only those calls and draw the house after each, you'll get a house 3/4 of the original size and then a house 5/4 of the small size. You want to scale back to the original size with a 4/3 (1.333..) scaling factor before the 1.25 one. If you already managed to undo all the transformations before each drawing of the house ignore the 4/3 scaling.

Thank you for your interaction 

 

i want to draw house which is smaller than the original by 3/4:

I had used glscale(.75,.75,1) ,,,,1 because I use 2D

 

and I want to draw another house which is bigger than the original by 5/4

I had used glscale(1.25,1.25,1) ,,,,1 because I use 2D

 

Is this right??

Share this post


Link to post
Share on other sites

I wonder why in the days where OpenGL 4.3 is out and 4.4 available at least as specification, still stuff of OpenGL 2.1 is allowed to be used in an assignment. But nevertheless ...

 


i want to draw house which is smaller than the original by 3/4:
I had used glscale(.75,.75,1) ,,,,1 because I use 2D
 
and I want to draw another house which is bigger than the original by 5/4
I had used glscale(1.25,1.25,1) ,,,,1 because I use 2D
 
Is this right??
In principle, yes. But you need to restrict their effect onto the respective model (or else consider an undo as suggested by DiegoSLTS above). Read about glPushMatrix and glPopMatrix to learn how to separate model transforms for different models. Notice however that the view transform is (usually) the same for all models, so that the correct moment of working with glPushMatrix and glPopMatrix is behind composing the view transform.

 

Another aspect is the order of glScale and any other transform you apply to the same house model. For example, the current house should be translated also just to not overlap with one of the other house drawings. If you choose the wrong order, then the scaling will not appear as you want.

Share this post


Link to post
Share on other sites

If you need to scale at 5/4 of the original size, you first need to undo the previous transformation of 3/4.

 

If you do only those calls and draw the house after each, you'll get a house 3/4 of the original size and then a house 5/4 of the small size. You want to scale back to the original size with a 4/3 (1.333..) scaling factor before the 1.25 one. If you already managed to undo all the transformations before each drawing of the house ignore the 4/3 scaling.

 

 no need to undo any  previous transformation coz I used popMatrix() and pushMartix() ,they will do the work!

Share this post


Link to post
Share on other sites

I wonder why in the days where OpenGL 4.3 is out and 4.4 available at least as specification, still stuff of OpenGL 2.1 is allowed to be used in an assignment. But nevertheless ...

 

 

 


i want to draw house which is smaller than the original by 3/4:
I had used glscale(.75,.75,1) ,,,,1 because I use 2D
 
and I want to draw another house which is bigger than the original by 5/4
I had used glscale(1.25,1.25,1) ,,,,1 because I use 2D
 
Is this right??
In principle, yes. But you need to restrict their effect onto the respective model (or else consider an undo as suggested by DiegoSLTS above). Read about glPushMatrix and glPopMatrix to learn how to separate model transforms for different models. Notice however that the view transform is (usually) the same for all models, so that the correct moment of working with glPushMatrix and glPopMatrix is behind composing the view transform.

 

Another aspect is the order of glScale and any other transform you apply to the same house model. For example, the current house should be translated also just to not overlap with one of the other house drawings. If you choose the wrong order, then the scaling will not appear as you want.

 

 

 

 

ya ,i use glPushMatrix and glPopMatrix 

 

about the second point i draw the small house at the right of the original and the big to the left of  it .

 

But I am asking about scaling ,if it is right?,,,

 

i want to understand another point ,when I say 3/4 of the original ,that mean the x will be 3/4 of the original and also the y will be 3/4 of the original !

 

Share this post


Link to post
Share on other sites


But I am asking about scaling ,if it is right?,,,

As already said: "in principal, yes". And since you actually use push/pop matrix, its really okay.

 


i want to understand another point ,when I say 3/4 of the original ,that mean the x will be 3/4 of the original and also the y will be 3/4 of the original !

That isn't a question. Do you want a confirmation of what "scale by 3/4" means exactly?

 

Applying the routine glScale( 0.75, 0.75, 1 ) generates a matrix that scales the model in each axis separately, so that the lengths in direction of the principal x and y axes will be reduced to 3/4, and along the z direction nothing is changed. Because of the separation, the area covered by the 2D model will be 9/16-th and hence less than 3/4, of course. It isn't clear whether length or area scaling by 3/4 is meant when reading the OP.

Share this post


Link to post
Share on other sites

 


But I am asking about scaling ,if it is right?,,,

As already said: "in principal, yes". And since you actually use push/pop matrix, its really okay.

 

 

 


i want to understand another point ,when I say 3/4 of the original ,that mean the x will be 3/4 of the original and also the y will be 3/4 of the original !

That isn't a question. Do you want a confirmation of what "scale by 3/4" means exactly?

 

Applying the routine glScale( 0.75, 0.75, 1 ) generates a matrix that scales the model in each axis separately, so that the lengths in direction of the principal x and y axes will be reduced to 3/4, and along the z direction nothing is changed. Because of the separation, the area covered by the 2D model will be 9/16-th and hence less than 3/4, of course. It isn't clear whether length or area scaling by 3/4 is meant when reading the OP.

 

aha !

 

maybe I didn't know how to formulate the question !but that what I meant exactly!

he area covered by the 2D model will be 9/16-th 

9 come form the scaling in x-axes and y-axes and also the y!that what I want  to understand

 

thanks a lot

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!