Followers 0

Problems with storing fractions in variables

3 posts in this topic

Hello!

I'm using OpenGL to render things in my game, but I'm haveing some problems. OpenGL uses decimals/fractions between 0 and 1 to locate pixels in a given texture. (for example, if I want to locate the 8th pixel on the x-axis in an image that's 32 pixels wide, I would type 'x=8/32' instead of 'x=8')

The problem is that I can't put fractions into float variables, (which would be convenient in my code) I can only use decimals. I can't write 'float x = 8/32' because the result of 8/32 isn't 0.25, but when I write 'float x = 0.25' it works perfectly.

This is a snippet that demonstrates how I render:

glTexCoord2f( 0.f, 0.f );    glVertex2f(    0.f,   0.f );
glTexCoord2f( 8/32, 0.f );    glVertex2f( 8.f,   0.f );
glTexCoord2f( 8/32, 8/32 ); glVertex2f( 8.f, 8.f );
glTexCoord2f( 0.f, 8/32 ); glVertex2f( 0.f, 8.f );
glEnd();

I just wanted to ask this question before I start a suboptimal solution. Am I missing something or do I have to work around it? Am I using the wrong type of variables to store fractions? Is it the 'glTexCoord2f' function that's the problem?

Thanks.

Edited by The Magical Pot
0

Share on other sites

The reason it appears to not work is that "8/32" is integer division because both operands are integers, and the result of integer division is an integer. You need to ensure that at least one operand of the division has a floating point type to get a floating point division. For example: 8.0/32, 8/32.0, 8.0/32.0, static_cast<float>(8)/32, or whatever method you want, as long as at least one operand is not an integer.

But you can also use the texture matrix.

glMatrixMode(GL_TEXTURE);
glScale(1.0/32, 1.0/32, 1);

Edited by Brother Bob
0

Share on other sites

Ok, that worked. Thank you!

0

Create an account

Register a new account