dovkruger

01-26-2004, 06:27 PM

I am having trouble displaying data, and must be misunderstanding something about transforms. I've had no problems setting up 3d views, but now that I'm trying to use glOrtho for a simple 2d projection I'm encountering surprising difficulty.

I want to graph values between xmin,xmax,ymin,ymax

If I use glOrtho(0,1,0,1)

and plot values within those ranges, it works.

If I want to translate to arbitrary scale, I try:

glTranslatef(-xMin,-yMin,-1);

glScaled(1/deltaX, 1/deltaY, 1);

and get nothing. Thinking I had slipped a gasket, I tried reversing the two even though I was pretty sure it was right, but that's wrong too. I also tried eliminating the translate and scale, and changing the observer to:

gluOrtho2D(xMin, xMax, yMin, yMax);

So first, any help on this specific problem would be greatly appreciated. Second, in order to debug problems in the future, I'd like a routine if anyone has it handy that takes a point x,y,z and performs the translation done by the current opengl transform. Is there any way to extract the current state of the matrix, multiply on my x,y,z value, so I can print the results?

thanks,

Dov

double xMin = -74;

double yMin = 38;

double xMax = -70;

double yMax = 42;

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0, 1, 0, 1);

//gluOrtho2D(xMin, xMax, yMin, yMax);

glMatrixMode(GL_MODELVIEW);

glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

glLoadIdentity();

glPushMatrix();

glTranslated(0.93,0.05,0);

glScaled(0.05, 0.9, 1);

scale->generateLegend(white, medFont, 19.0, 7, 24.0);

glPopMatrix();

#if 0

glColor3ubv(white);

glBegin(GL_QUADS);

glVertex2f(0, 0);

glVertex2f(1, 0);

glVertex2f(1, 1);

glVertex2f(0, 1);

glEnd();

#endif

cout << xMin << "," << yMin << "\t" <<

xMax << "," << yMax << "\n";

double deltaX = xMax - xMin;

double deltaY = yMax - yMin;

double centerX = (xMax + xMin)/2;

double centerY = (yMax + yMin)/2;

glTranslatef(-xMin,-yMin,-1);

//glTranslatef(-centerX,-centerY,-1);

glScaled(1/deltaX, 1/deltaY, 1);

glColor3ubv(green);

glBegin(GL_QUADS);

glVertex2f(xMin, yMin);

glVertex2f(xMax, yMin);

glVertex2f(xMax, yMax);

glVertex2f(xMin, yMax);

glEnd();

}

};

I want to graph values between xmin,xmax,ymin,ymax

If I use glOrtho(0,1,0,1)

and plot values within those ranges, it works.

If I want to translate to arbitrary scale, I try:

glTranslatef(-xMin,-yMin,-1);

glScaled(1/deltaX, 1/deltaY, 1);

and get nothing. Thinking I had slipped a gasket, I tried reversing the two even though I was pretty sure it was right, but that's wrong too. I also tried eliminating the translate and scale, and changing the observer to:

gluOrtho2D(xMin, xMax, yMin, yMax);

So first, any help on this specific problem would be greatly appreciated. Second, in order to debug problems in the future, I'd like a routine if anyone has it handy that takes a point x,y,z and performs the translation done by the current opengl transform. Is there any way to extract the current state of the matrix, multiply on my x,y,z value, so I can print the results?

thanks,

Dov

double xMin = -74;

double yMin = 38;

double xMax = -70;

double yMax = 42;

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0, 1, 0, 1);

//gluOrtho2D(xMin, xMax, yMin, yMax);

glMatrixMode(GL_MODELVIEW);

glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

glLoadIdentity();

glPushMatrix();

glTranslated(0.93,0.05,0);

glScaled(0.05, 0.9, 1);

scale->generateLegend(white, medFont, 19.0, 7, 24.0);

glPopMatrix();

#if 0

glColor3ubv(white);

glBegin(GL_QUADS);

glVertex2f(0, 0);

glVertex2f(1, 0);

glVertex2f(1, 1);

glVertex2f(0, 1);

glEnd();

#endif

cout << xMin << "," << yMin << "\t" <<

xMax << "," << yMax << "\n";

double deltaX = xMax - xMin;

double deltaY = yMax - yMin;

double centerX = (xMax + xMin)/2;

double centerY = (yMax + yMin)/2;

glTranslatef(-xMin,-yMin,-1);

//glTranslatef(-centerX,-centerY,-1);

glScaled(1/deltaX, 1/deltaY, 1);

glColor3ubv(green);

glBegin(GL_QUADS);

glVertex2f(xMin, yMin);

glVertex2f(xMax, yMin);

glVertex2f(xMax, yMax);

glVertex2f(xMin, yMax);

glEnd();

}

};