I have series of circles , based on points primitive.
Two set , one “stationary” and one rotated.
The first circle is centered on NDC coordinates 1,0 with diameter of 1.
Each subsequent circle is half size of previous - half coordinates and half diameter.
The objective is to rotate ALL of these AROUND z axis
Here is the code
glRotatef(-90, 0.f, 0.f, 1.f); // rotate to -img around z axis
glTranslatef(-1.0, 0.0, 0.0); //test shift
for (scale = 0; scale != MAX_SCALE; scale++) {
{ // single scale
OpenGL_Draw_10_Circles(1, // point size
3, // selection highlight
0, // apply to circle
0, // future option
1, // stadard red
0, // green,
0 //float blue )
);
glFlush();
}
// next scale
glScalef(.5, .5, .5);
// move center
glTranslatef(1,0,0);
}
The problem is
The rendered (whatever you want to call it ) "rotation point’ is LAST circuit center, not x-0 , y =0, z = 1 point as coded.
Any suggestion WHERE is the error ?
Just FYI.
Here is a latest, working , modification to the code.
After corrective translation , It builds three test sets …, one on x axis and two 90 degrees rotated around test point 0,0.
It definitely rotates around center of last primitive (circle)
Sure like to know why,
There is small math work to add to make it more universal.
NOT an OpenGL problem. MY problem.
for (int rotation = 0; rotation != 270; rotation += 90) {
glRotatef(rotation, 0.f, 0.f, 1.0); // rotate to img
glPushMatrix();
glLoadIdentity();
OpenGL_NDC_coordinates(1);
glFlush();
glPopMatrix();
for (scale = 0; scale != MAX_SCALE; scale++) {
{ // single scale
//printf("\n scale %i ", scale);
OpenGL_Draw_10_Circles(1, // point size
3, // selection highlight
0, // apply to circle
0, // future option
1, // stadard red
0, // green,
0 //float blue )
);
glFlush();
}
//printf("\n next scale "); // next scale
glScalef(.5, .5, 0);
//printf("\n next translate"); // next scale
// translate
glTranslatef(1, 0, 0);
// next scale
}
// reset scale
glScalef(16, 16, 16); // restore scale
glPushMatrix();
glLoadIdentity();
OpenGL_NDC_coordinates(1);
glFlush();
glPopMatrix();
// correct wrong rotataion point - works only with MAX_STATE == 4
float test_offset = (float) 1/ (float) pow (2.0, MAX_SCALE);
if( rotation == 0 )
{
glTranslatef(test_offset, -1, 0); // mpves to x axis TOK
}
else
{
glTranslatef(1 + test_offset, 0, 0); // mpves to x axis TOK
}
}