2014-02-06 43 views
0

我已經創建了一種在單擊並拖動鼠標時在屏幕上繪製選擇框的方法。就像大多數戰略遊戲一樣。當按下鼠標時,我會調用我的繪圖方法,它會創建一個四邊形網格並將其添加到guiNode中。 (平面屏幕)。JMonkey選擇方形複雜度

當鼠標不放,再下面的更新方法被稱爲:

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類出現問題。 BUT我不知道。我怎麼能解決這個問題?旋轉四邊形?任何替代品?

非常感謝你

回答

0

你的問題是BackFace剔除。 當Quad的寬度(或高度)爲負數時,您將看到Tyhe對象的背面,這是默認PER-TRIANGLE選中的。 geom.setCullHint是用於frustrum剔除(當相機沒有看着你時繪製),這是gui節點不會擔心的。

要麼強制正方形的大小爲: 適當地設置每一幀的位置和大小。

或使用mat1.getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off)來告訴材料繪製背面。儘管如此,它將一直在繪製雙方,這將加劇每幀使用新幾何的垃圾收集。