Матрицы вращения Java и OBB

1

Привет, я пытаюсь построить OBB в моей 3D-игре java, используя lwjgl. В настоящее время я просто пытаюсь повернуть OBB вокруг с помощью matrix4f и проверить его, отринув точки. Поэтому, когда я его визуализую, с его xyx = 0,0,0 и его углом на оси x = 1, он будет вращаться отлично. Но когда я перемещаю ось y вверх, скажем, y = 5, вращение больше не будет перемещаться по центру.

Я попытался исправить это с помощью перевода, но он не работает. Im также интересуется, есть ли способ получить доступ к push/pop и повернуть методы, чтобы получить эти переменные для моих очков, потому что opengl rotate делает это отлично.

Это мой класс OBB:

public OBB (float x, float y, float z, float angleX, float angleY, float angleZ, float sizeX, float sizeY, float sizeZ) {this.x = x; this.y = у; this.z = г;

    this.angleX=angleX;
    this.angleY=angleY;
    this.angleZ=angleZ;

    this.sizeX=sizeX;
    this.sizeY=sizeY;
    this.sizeZ=sizeZ;

    posUBR = new Vector3f(x-sizeX,y+sizeY,z+sizeZ);//UpperBackRight
    posUBL = new Vector3f(x-sizeX,y+sizeY,z-sizeZ);//UpperBackLeft
    posUFL = new Vector3f(x+sizeX,y+sizeY,z-sizeZ);//UpperForLeft
    posUFR = new Vector3f(x+sizeX,y+sizeY,z+sizeZ);//UpperForRight

    posLBR = new Vector3f(x-sizeX,y-sizeY,z+sizeZ);//LowerBackRight
    posLBL = new Vector3f(x-sizeX,y-sizeY,z-sizeZ);//LowerBackLeft
    posLFL = new Vector3f(x+sizeX,y-sizeY,z-sizeZ);//LowerForLeft
    posLFR = new Vector3f(x+sizeX,y-sizeY,z+sizeZ);//LowerForRight

    posUBR=rotMat(posUBR);
    posUBL=rotMat(posUBL);
    posUFL=rotMat(posUFL);
    posUFR=rotMat(posUFR);

    posLBR=rotMat(posLBR);
    posLBL=rotMat(posLBL);
    posLFL=rotMat(posLFL);
    posLFR=rotMat(posLFR);

}

Это мой метод вращения:

public Vector3f rotMatrix (точка Vector3f) {Matrix4f rotationMatrix = new Matrix4f();

       rotationMatrix.m00 = point.x;
       rotationMatrix.m10 = point.y;
       rotationMatrix.m20 = point.z;       

       rotationMatrix.translate(new Vector3f(-x,-y,-z));

       rotationMatrix.rotate(angleX,new Vector3f(1,0,0));
       rotationMatrix.rotate(angleY,new Vector3f(0,1,0));
       rotationMatrix.rotate(angleZ,new Vector3f(0,0,1));

       rotationMatrix.translate(new Vector3f(x,y,-z));


       return new Vector3f(rotationMatrix.m00, rotationMatrix.m10, rotationMatrix.m20);
}

public void rotate(){
    posUBR=rotMatrix(posUBR);
    posUBL=rotMatrix(posUBL);
    posUFL=rotMatrix(posUFL);
    posUFR=rotMatrix(posUFR);

    posLBR=rotMatrix(posLBR);
    posLBL=rotMatrix(posLBL);
    posLFL=rotMatrix(posLFL);
    posLFR=rotMatrix(posLFR);
}

Моя функция рендеринга немного длиннее, но она в основном отображает куб.

  • 0
    Извините, я чувствую себя настолько глупо сейчас, все, что мне нужно было сделать, это запустить это в моей функции поворота: public void setToOrigin () {posUBR = new Vector3f (0-sizeX, 0 + sizeY, 0 + sizeZ); posUBL = новый Vector3f (0-sizeX, 0 + sizeY, 0-sizeZ); posUFL = новый Vector3f (0 + sizeX, 0 + sizeY, 0-sizeZ); posUFR = новый Vector3f (0 + sizeX, 0 + sizeY, 0 + sizeZ); posLBR = новый Vector3f (0-размерX, 0-размерY, 0 + размерZ); posLBL = новый Vector3f (0-размерX, 0-размерY, 0-размерZ); posLFL = новый Vector3f (0 + sizeX, 0-sizeY, 0-sizeZ); posLFR = новый Vector3f (0 + sizeX, 0-sizeY, 0 + sizeZ); }
Теги:
opengl
matrix
3d
rotation

1 ответ

0

Извините, все, что мне нужно было сделать, это установить функцию origin:

public void setToOrigin(){
    posUBR = new Vector3f(0-sizeX,0+sizeY,0+sizeZ);
    posUBL = new Vector3f(0-sizeX,0+sizeY,0-sizeZ);
    posUFL = new Vector3f(0+sizeX,0+sizeY,0-sizeZ);
    posUFR = new Vector3f(0+sizeX,0+sizeY,0+sizeZ);

    posLBR = new Vector3f(0-sizeX,0-sizeY,0+sizeZ);
    posLBL = new Vector3f(0-sizeX,0-sizeY,0-sizeZ);
    posLFL = new Vector3f(0+sizeX,0-sizeY,0-sizeZ);
    posLFR = new Vector3f(0+sizeX,0-sizeY,0+sizeZ);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню