# Big question about Rotation, Translation and to position objects

This topic is 4441 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hi fellows. I have a problem. In my app I put 3 cubes one in front of another. The first cube is in the -6.5 position of the z-axis. The second cube is in the 0.0 position od the z-axis. And the first, is in the 6.5 position of the z-axis. Well, at this moment, all systems go. These 3 cubes have functions that rotates and translates them. I use the D3DXMatrixRotationYawPitchRoll to make the transformations. I inform the cubes the following: when the rotation or translations reaches 90.0 the cubes stop to rotate or translate. Now the problem: when the cubes reaches the 90.0 ONLY THE CUBE that is in the 0.0 position in the beginning REMAINS in the screen, but the other cubes NO. All of then suffers the transformations. If I rotate 90 they rotate and only in the middle remains. Since the cubes is in the 90 degree in the x-axis, I inform them to rotate to y-axis. Then the cubes returns to the screen in the exactly position that they was in the x-axis, and when the cubes reaches 90, again the middle cube remais in the screen. I think that my problem is in the function that I call to set the position(called SetPositions). Fellows, sorry for the long explanation but this problem drives me crazy. I put the code below. Thanks a lot for the support.
D3DXMATRIX Cube::RotateX()
{
D3DXMATRIX TempMatrix;
static float sfAngle = 0;
bLeftRight ? sfAngle+=0.05f : sfAngle-=0.05f;
sfXAngle = sfAngle;
return TempMatrix;
}

D3DXMATRIX Cube::RotateY()
{
D3DXMATRIX TempMatrix;
static float sfAngle = 0;
bUpDown ? sfAngle+=0.05f : sfAngle-=0.05f;
sfYAngle = sfAngle;
return TempMatrix;
}

D3DXMATRIX Cube::RotateZ()
{
D3DXMATRIX TempMatrix;
D3DXMatrixRotationZ(&TempMatrix, timeGetTime()/1000.0f);
return TempMatrix;
}

void Cube::ApplyRotation()
{
if(m_bSide)D3DXMatrixMultiply(&CubeMatrix, &(this->TranslateMatrix()), &(this->RotateX()));
else D3DXMatrixMultiply(&CubeMatrix, &(this->RotateX()), &CubeMatrix);
m_DirectDevice->SetTransform(D3DTS_WORLD, &CubeMatrix);
}

void Cube::ApplyTranslation()
{
if(m_bSide)D3DXMatrixMultiply(&CubeMatrix, &(this->TranslateMatrix()), &(this->RotateY()));
else D3DXMatrixMultiply(&CubeMatrix, &(this->RotateY()), &CubeMatrix);
m_DirectDevice->SetTransform(D3DTS_WORLD, &CubeMatrix);
}

D3DXMATRIX Cube::TranslateMatrix()
{
D3DXMATRIX TempMatrix;
D3DXMatrixTranslation(&TempMatrix, m_fXPos, m_fYPos, m_fZPos);
return TempMatrix;
}

void Cube::RenderCube()
{
m_DirectDevice->SetStreamSource(0, m_DirectVertex, sizeof(VertexNonFVF));
if(m_bFirst)this->SetPositions(m_fXPos, m_fYPos, m_fZPos);
if(this->m_DirectVertex != NULL) this->ApplyTexture();
if(this->m_bRotate && sfXAngle <= 90.0)this->ApplyRotation(); else {this->m_bRotate = false; m_bFirst = false;}
if(this->m_bTranslate && sfYAngle <= 90.0)this->ApplyTranslation(); else {this->m_bTranslate = false; m_bFirst = false;}
m_DirectDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
m_DirectDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 4, 14);
m_DirectDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 20, 2);
}

void Cube::SetPositions(float fX, float fY, float fZ)
{
D3DXMatrixIdentity(&CubeMatrix);
D3DXMatrixTranslation(&CubeMatrix, fX, fY, fZ);
m_DirectDevice->SetTransform(D3DTS_WORLD, &CubeMatrix);
}



##### Share on other sites
Are you possibly translating them all to the same spot making it look like one cube is left.

##### Share on other sites
TWild, I didn't understand very well. Can you explain better?
FYI, this code is for to a cube class and not for to treat all cubes. I think that you've understood is that this code gets the world matrix of the whole app and make the transformations.
Am I right?? If not, sorry for my mistake..

1. 1
2. 2
Rutin
25
3. 3
4. 4
JoeJ
18
5. 5

• 14
• 22
• 11
• 11
• 9
• ### Forum Statistics

• Total Topics
631764
• Total Posts
3002210
×