Results 1 to 5 of 5

Thread: Rotation Problem with Rubik´s Cube

  1. #1
    Junior Member Newbie
    Join Date
    May 2009
    Posts
    3

    Rotation Problem with Rubik´s Cube

    Hi all!

    I have a problem with the rotations of my Rubik´s Cube and I hope someone can help me. The problem is that I dont´t know how I can save the positions of the different cubes or do the transformations in the correct order.

    First I made one cube with quads. In my draw()-method i made the following transformations.

    (it´s just a part of the code, each cube has the same code)

    void RubiksCube::draw(void)
    {
    glPushMatrix();
    glRotatef(rotX_2, 1.0f, 0.0f, 0.0f);
    glTranslatef(2.0f, 2.0f, -2.0f);
    glRotatef(rotY_2, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    ...
    }

    void RubiksCube::move3rdRow(void)
    {
    rotY_2 += 90.0f;
    }

    If I wanna rotate the slices of my cube, the wrong cubes are rotating. But how can I solve this problem, that the correct cubes are rotating. I thougt it would be something with the GL_MODELVIEW or something. I don´t have any clue, sitting on this problem since one week.

    Here is a screenshot of the cube.The cubes which i marked with a black line are rotating when i want to rotate e.g the 3rd row.



    greetz
    faMouZ*

  2. #2
    Member Contributor
    Join Date
    Mar 2008
    Location
    Singapore
    Posts
    67

    Re: Rotation Problem with Rubik´s Cube

    Hi famouz,

    I can't see the screenshot you posted. Could you repost it?

    Also your problem should be easily fixable with glPush...() and glPop..()

    But to be sure, I need a larger code snippet.

  3. #3
    Member Contributor
    Join Date
    Mar 2008
    Location
    Singapore
    Posts
    67

    Re: Rotation Problem with Rubik´s Cube

    oh wait, I can see the screenshot now. Somehow it didn't load up the first time.

    So if the cubes marked with the black line are rotating instead of the 3rd row, would I be correct to state that these 3 cubes were originally part of the 3rd row, or something along that line?

    My guess is, to fix your issue, you need to reference the cubes by their new positions instead of their original starting points.

    But then again, I need a bigger code chunk to fully understand the problem.

  4. #4
    Junior Member Newbie
    Join Date
    May 2009
    Posts
    3

    Re: Rotation Problem with Rubik´s Cube

    Now, here is the full code of my Cube.But I forget the rotation on the z-Axis -.- Hopefully it´s not so hard to implement this.

    void RubiksCube::drawCube(void)
    {
    glColor3f(0.0f,0.0f,0.0f);
    glLineWidth(4.0f);
    glutWireCube(2);

    glBegin(GL_QUADS); // begin drawing a cube

    // Front Face
    glColor3f(0.0f,0.0f,1.0f);
    glNormal3f( 0.0f, 0.0f, 1.0f); // front face points out of the screen on z.
    glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Left
    glVertex3f( 1.0f, -1.0f, 1.0f); // Bottom Right
    glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right
    glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left

    // Back Face
    glColor3f(1.0f,0.0f,0.0f);
    glNormal3f( 0.0f, 0.0f,-1.0f); // back face points into the screen on z.
    glVertex3f(-1.0f, -1.0f, -1.0f); // Bottom Right
    glVertex3f(-1.0f, 1.0f, -1.0f); // Top Right
    glVertex3f( 1.0f, 1.0f, -1.0f); // Top Left
    glVertex3f( 1.0f, -1.0f, -1.0f); // Bottom Left

    // Top Face
    glColor3f(0.0f,1.0f,0.0f);
    glNormal3f( 0.0f, 1.0f, 0.0f); // top face points up on y.
    glVertex3f(-1.0f, 1.0f, -1.0f); // Top Left
    glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left
    glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right
    glVertex3f( 1.0f, 1.0f, -1.0f); // Top Right

    // Bottom Face
    glColor3f(1.0f,0.5f,0.0f);
    glNormal3f( 0.0f, -1.0f, 0.0f); // bottom face points down on y.
    glVertex3f(-1.0f, -1.0f, -1.0f); // Top Right
    glVertex3f( 1.0f, -1.0f, -1.0f); // Top Left
    glVertex3f( 1.0f, -1.0f, 1.0f); // Bottom Left
    glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Right

    // Right face
    glColor3f(1.0f,1.0f,-1.0f);
    glNormal3f( 1.0f, 0.0f, 0.0f); // right face points right on x.
    glVertex3f( 1.0f, -1.0f, -1.0f); // Bottom Right
    glVertex3f( 1.0f, 1.0f, -1.0f); // Top Right
    glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left
    glVertex3f( 1.0f, -1.0f, 1.0f); // Bottom Left

    // Left Face
    glColor3f(1.0f,1.0f,1.0f);
    glNormal3f(-1.0f, 0.0f, 0.0f); // left face points left on x.
    glVertex3f(-1.0f, -1.0f, -1.0f); // Bottom Left
    glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Right
    glVertex3f(-1.0f, 1.0f, 1.0f); // Top Right
    glVertex3f(-1.0f, 1.0f, -1.0f); // Top Left

    glEnd();

    }


    // Konstruktor
    RubiksCube::RubiksCube(void)
    {
    rotX = 0.0f;
    rotY = 0.0f;
    rotZ = 0.0f;
    }


    void RubiksCube::move1stRow(void)
    {
    rotY_0 += 90.0f;
    }

    void RubiksCube::move1stRowBack(void)
    {
    rotY_0 += -90.0f;
    }

    void RubiksCube::move2ndRow(void)
    {
    rotY_1 += 90.0f;
    }

    void RubiksCube::move2ndRowBack(void)
    {
    rotY_1 += -90.0f;
    }

    void RubiksCube::move3rdRow(void)
    {
    rotY_2 += 90.0f;
    }

    void RubiksCube::move3rdRowBack(void)
    {
    rotY_2 += -90.0f;
    }

    void RubiksCube::move1stColumn(void)
    {
    rotX_0 += 90.0f;
    }

    void RubiksCube::move1stColumnBack(void)
    {
    rotX_0 += -90.0f;
    }

    void RubiksCube::move2ndColumn(void)
    {
    rotX_1 += 90.0f;
    }

    void RubiksCube::move2ndColumnBack(void)
    {
    rotX_1 += -90.0f;
    }

    void RubiksCube::move3rdColumn(void)
    {
    rotX_2 += 90.0f;
    }

    void RubiksCube::move3rdColumnBack(void)
    {
    rotX_2 += -90.0f;
    }

    void RubiksCube::moveZAxis1stRow(void)
    {
    rotZ_0 += 90.0f;
    }

    void RubiksCube::moveZAxis2ndRow(void)
    {
    rotZ_1 += 90.0f;
    }

    void RubiksCube::moveZAxis3rdRow(void)
    {
    rotZ_2 += 90.0f;
    }

    void RubiksCube::moveZAxis1stRowBack(void)
    {
    rotZ_0 += -90.0f;
    }

    void RubiksCube::moveZAxis2ndRowBack(void)
    {
    rotZ_1 += -90.0f;
    }

    void RubiksCube::moveZAxis3rdRowBack(void)
    {
    rotZ_2 += -90.0f;
    }



    // Ausgabe des Würfels
    void RubiksCube::draw(void)
    {

    // WÜRFEL OBERE EBENE
    //Würfel hinten rechts
    glPushMatrix();
    glRotatef(rotX_2, 1.0f, 0.0f, 0.0f);
    glTranslatef(2.0f, 2.0f, -2.0f);
    glRotatef(rotY_2, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel Mitte
    glPushMatrix();
    glRotatef(rotX_1, 1.0f, 0.0f, 0.0f);
    glTranslatef(0.0f, 2.0f, -2.0f);
    glRotatef(rotY_2, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel hinten links
    glPushMatrix();
    glRotatef(rotX_0, 1.0f, 0.0f, 0.0f);
    glTranslatef(-2.0f, 2.0f, -2.0f);
    glRotatef(rotY_2, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel rechts vorne
    glPushMatrix();
    glRotatef(rotX_2, 1.0f, 0.0f, 0.0f);
    glTranslatef(2.0f, 2.0f, 2.0f);
    glRotatef(rotY_2, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel Mitte
    glPushMatrix();
    glRotatef(rotX_1, 1.0f, 0.0f, 0.0f);
    glTranslatef(0.0f, 2.0f, 2.0f);
    glRotatef(rotY_2, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel vorne links
    glPushMatrix();
    glRotatef(rotX_0, 1.0f, 0.0f, 0.0f);
    glTranslatef(-2.0f, 2.0f, 2.0f);
    glRotatef(rotY_2, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel links neben Zentrum
    glPushMatrix();
    glRotatef(rotX_0, 1.0f, 0.0f, 0.0f);
    glTranslatef(-2.0f, 2.0f, 0.0f);
    glRotatef(rotY_2, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    // Würfel rechts neben Zentrum
    glPushMatrix();
    glRotatef(rotX_2, 1.0f, 0.0f, 0.0f);
    glTranslatef(2.0f, 2.0f, 0.0f);
    glRotatef(rotY_2, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    // Würfel Mitte
    glPushMatrix();
    glRotatef(rotX_1, 1.0f, 0.0f, 0.0f);
    glTranslatef(0.0f, 2.0f, 0.0f);
    glRotatef(rotY_2, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();

    // WÜRFEL UNTERE EBENE
    //Würfel hinten rechts
    glPushMatrix();
    glRotatef(rotX_2, 1.0f, 0.0f, 0.0f);
    glTranslatef(2.0f, -2.0f, -2.0f);
    glRotatef(rotY_0, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel Mitte
    glPushMatrix();
    glRotatef(rotX_1, 1.0f, 0.0f, 0.0f);
    glTranslatef(0.0f, -2.0f, -2.0f);
    glRotatef(rotY_0, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel hinten links
    glPushMatrix();
    glRotatef(rotX_0, 1.0f, 0.0f, 0.0f);
    glTranslatef(-2.0f, -2.0f, -2.0f);
    glRotatef(rotY_0, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel rechts vorne
    glPushMatrix();
    glRotatef(rotX_2, 1.0f, 0.0f, 0.0f);
    glTranslatef(2.0f, -2.0f, 2.0f);
    glRotatef(rotY_0, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel Mitte
    glPushMatrix();
    glRotatef(rotX_1, 1.0f, 0.0f, 0.0f);
    glTranslatef(0.0f, -2.0f, 2.0f);
    glRotatef(rotY_0, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel vorne links
    glPushMatrix();
    glRotatef(rotX_0, 1.0f, 0.0f, 0.0f);
    glTranslatef(-2.0f, -2.0f, 2.0f);
    glRotatef(rotY_0, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel links neben Zentrum
    glPushMatrix();
    glRotatef(rotX_0, 1.0f, 0.0f, 0.0f);
    glTranslatef(-2.0f, -2.0f, 0.0f);
    glRotatef(rotY_0, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    // Würfel rechts neben Zentrum
    glPushMatrix();
    glRotatef(rotX_2, 1.0f, 0.0f, 0.0f);
    glTranslatef(2.0f, -2.0f, 0.0f);
    glRotatef(rotY_0, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    // Würfel Mitte
    glPushMatrix();
    glRotatef(rotX_1, 1.0f, 0.0f, 0.0f);
    glTranslatef(0.0f, -2.0f, 0.0f);
    glRotatef(rotY_0, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();

    // WÜRFEL MITTLERE EBENE
    //Würfel rechts hinten
    glPushMatrix();
    glRotatef(rotX_2, 1.0f, 0.0f, 0.0f);
    glTranslatef(2.0f, 0.0f, -2.0f);
    glRotatef(rotY_1, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel Mitte
    glPushMatrix();
    glRotatef(rotX_1, 1.0f, 0.0f, 0.0f);
    glTranslatef(0.0f, 0.0f, -2.0f);
    glRotatef(rotY_1, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel hinten links
    glPushMatrix();
    glRotatef(rotX_0, 1.0f, 0.0f, 0.0f);
    glTranslatef(-2.0f, 0.0f, -2.0f);
    glRotatef(rotY_1, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel rechts vorne
    glPushMatrix();
    glRotatef(rotX_2, 1.0f, 0.0f, 0.0f);
    glTranslatef(2.0f, 0.0f, 2.0f);
    glRotatef(rotY_1, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel Mitte
    glPushMatrix();
    glRotatef(rotX_1, 1.0f, 0.0f, 0.0f);
    glTranslatef(0.0f, 0.0f, 2.0f);
    glRotatef(rotY_1, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel vorne links
    glPushMatrix();
    glRotatef(rotX_0, 1.0f, 0.0f, 0.0f);
    glTranslatef(-2.0f, 0.0f, 2.0f);
    glRotatef(rotY_1, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    //Würfel links neben Zentrum
    glPushMatrix();
    glRotatef(rotX_0, 1.0f, 0.0f, 0.0f);
    glTranslatef(-2.0f, 0.0f, 0.0f);
    glRotatef(rotY_1, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    // Würfel rechts neben Zentrum
    glPushMatrix();
    glRotatef(rotX_2, 1.0f, 0.0f, 0.0f);
    glTranslatef(2.0f, 0.0f, 0.0f);
    glRotatef(rotY_1, 0.0f, 1.0f, 0.0f);
    drawCube();
    glPopMatrix();
    // Würfel im Zentrum
    glPushMatrix();
    glRotatef(rotX_1, 1.0f, 0.0f, 0.0f);
    glRotatef(rotY_1, 0.0f, 1.0f, 0.0f);
    drawCubeCenter();
    glPopMatrix();

    }

    void RubiksCube::drawCubeCenter(void)
    {
    glutSolidCube(2);
    }

  5. #5
    Junior Member Newbie
    Join Date
    May 2009
    Posts
    3

    Re: Rotation Problem with Rubik´s Cube

    It´s very strange that I can rotate a slice on the x-axis and then on the y-axis without problems.But if I want to rotate any other slice or rotate first the slices on the y-axis and then on the x-axis, the wrong cubes are rotating. PLEASE HELP ME!!!

Similar Threads

  1. Help for Rubik's Cube Rotation of each slice...
    By sabith in forum OpenGL: Basic Coding
    Replies: 3
    Last Post: 05-19-2011, 11:29 AM
  2. Rotating a slice of a Rubik cube
    By custard in forum OpenGL: Basic Coding
    Replies: 4
    Last Post: 05-06-2011, 10:59 AM
  3. creating random rotations for a rubik's cube
    By AstroJazz in forum OpenGL: General
    Replies: 1
    Last Post: 04-10-2003, 12:16 PM
  4. scrambling a rubik's cube using srand() C++ and opengl
    By AstroJazz in forum OpenGL: Basic Coding
    Replies: 1
    Last Post: 04-09-2003, 05:30 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Proudly hosted by Digital Ocean