Усложнение JMonkey Selection Square

Я создал способ рисовать поле выбора на экране, когда вы щелкаете и перетаскиваете мышь. Как и в большинстве стратегических игр. Когда мышь нажата, я вызываю свой метод рисования, который создает четырехъядерную сетку и добавляет ее в guiNode. (Плоский на экране).

Пока мышь нажата, вызывается следующий метод обновления:

    Main.gui.getChild("Selection Box").removeFromParent();
    xMouseCur = inputManager.getCursorPosition().x;
    yMouseCur = inputManager.getCursorPosition().y;

    if (xMouseCur < xMouse) {
    }

    quad = new Quad(xMouseCur - xMouse, yMouseCur - yMouse, false);

    geom = new Geometry("Selection Box", quad);
    geom.setLocalTranslation(new Vector3f(xMouse, yMouse, 0));
    geom.setMaterial(mat1);
    geom.setCullHint(CullHint.Never);
    Main.gui.attachChild(geom);

Метод создает новый Quad на основе местоположения первого щелчка мыши и текущего местоположения мыши. Теперь проблема в том, что когда я пытаюсь щелкнуть и перетащить влево, квадрат не отображается. Однако, когда я перетаскиваю вправо, это происходит.

Я предполагаю, что когда он находится слева, параметр ширины при создании нового Quad является отрицательным числом, и это вызывает проблемы для класса Quad. Но я не уверен. Как я могу это исправить? Повернуть квадроцикл? Любые альтернативы?

Большое спасибо


person Community    schedule 06.02.2014    source источник


Ответы (1)


Ваша проблема — BackFace Culling. когда ширина (или высота) квадроцикла отрицательна, вы увидите обратную сторону объекта, который по умолчанию отбраковывается PER-TRIANGLE. geom.setCullHint предназначен для отбраковки усеченного конуса (рисовать, когда камера не смотрит на вас), о чем узел графического интерфейса не будет беспокоиться.

Либо заставьте четырехугольник иметь положительный размер: установите положение и размер соответствующим образом для каждого кадра.

Или используйте mat1.getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off), чтобы указать материалу рисовать обратную сторону. Однако он будет постоянно отрисовывать обе стороны, что усугубит сборку мусора при использовании новой геометрии в каждом кадре.

person Canis Artorus    schedule 07.03.2014