Need a help with triangles positions

Started by
2 comments, last by jpetrie 17 years, 6 months ago
Hi for all I'm putting some triangles(9 triangles) in my program but the results I didn't understand. What I'm doing for each triangles is: - I make a call for glTranslateMatrix(); - I make a call for glRotateMatrix() in the z-axis; - Draw the triangle; - Add 45 in the iAngle variable; I'm doing this to position and rotate the triangles one after another in the x-axis. The first 3 triangles works fine but the 4 to the 8 down a little bit and in the 9th triangle returns to the normal. What this thing occurs? This is the img: Free Image Hosting at www.ImageShack.us And this is the code that I've made:

while(!bQuit)
   {
      if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
	  {
         if(msg.message == WM_QUIT)
		 {
			bQuit =!bQuit;
	        break;             
		 }
         else
		 {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
		 }
	  }
	  else
	  {
	     GetClientRect(hwnd, &tempRect);
             glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
             SetFieldOfView(tempRect.right,tempRect.bottom);
             glMatrixMode(GL_MODELVIEW);
		 glLoadIdentity();
		 for(int i = 0, x = 8, y = 0.1, iAngle = 0 ; i < 9 ; i++, x-=2)
		 {
	            glPushMatrix();
		    glTranslatef(x, y, -20);
		    glRotatef(iAngle, 0, 0, 1);
		    glColor3f(1,1,1);
		    glBegin(GL_TRIANGLES);
                       glVertex2f(0,0);
                       glVertex2f(1,0);
                       glVertex2f(1/2,1);
                    glEnd();
		    glPopMatrix();
		    iAngle+=45;
                 }
          SwapBuffers(hdc);
       }

Advertisement
The image looks correct for the code you posted at a quick glance. I don't understand; do you not want the triangle to rotate around one of its vertices and rotate around the center instead? If so you'll either need to define the triangle around its model-space origin or translate the triangle a little. Rotation is about the origin.
jpetrie, I want to rotate around the center but I don't want to do other translation. How can I do rotate around the center of each triangle?
The rotation matrices built by glRotate() are axis-angle rotations about the origin. This is a fact of life (and mathematics).

Consequently, your options are:
1) Redefine your triangle. Currently, your triangle is defined in model space such that one of its vertices is at the origin. Change the vertices so that the triangle is defined in model space such that its center is at the origin. This might look (approximately) like (0,1) (-1,-1) (1,-1) or something of that general nature.

2) Apply a translation to center the triangle at the origin. Apply the rotation. Apply the opposite translate to place the triangle back where you want it (if you actually want it back there; usually you do).

These are really the same thing, and there is really no other option.

This topic is closed to new replies.

Advertisement