2012-05-25 2 views
2

Я пытаюсь сделать стену, создав 4 куба рядом друг с другом, проблема возникает при применении текстуры - JME3 делает рендеринг куба и применяет текстуру, но я вижу внутреннюю часть куб. Это какая-то форма «Вид», которую я могу изменить? Если да, то как?Кубический рендеринг: текстуры отображаются неправильно

Ниже приведен код и образ того, что я имею в виду enter image description here

Box ground = new Box(new Vector3f(1.0f, -1.0f, 1.0f), 5, 0,-5); 
    Geometry groundPlane = new Geometry("GroundPlane", ground); 
    Material groundMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); 
    groundMat.setColor("Color", ColorRGBA.Brown); 
    groundPlane.setMaterial(groundMat); 

    for(int i = 1; i < 5; i++) 
    { 
     Box wall = new Box(new Vector3f(0.0f, -1.0f, 0.0f), new Vector3f((float)i, 0.0f, -1.0f)); 
     Geometry wallFace = new Geometry("WallMesh", wall); 
     Material wallSkin = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); 
     Texture tex_ml = assetManager.loadTexture("Interface/Wall.png"); 
     wallSkin.setTexture("ColorMap", tex_ml); 
     wallFace.setMaterial(wallSkin); 
     rootNode.attachChild(wallFace);    
    } 

    rootNode.attachChild(groundPlane);  

Kind Regards

Эйден Strydom

ЗАВЕРШЕНА - ЗАВЕРШЕНИЕ КОД

Vector3f oldVec = Vector3f.ZERO; 
    Vector3f newVec = Vector3f.ZERO; 

    for(int i = 0; i < 5; i++) 
    { 
     newVec = new Vector3f((float)i, 0.0f, 0.0f); 
     Box wall = new Box(oldVec, newVec); 
     Geometry wallFace = new Geometry("WallMesh", wall); 
     Material wallSkin = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); 
     wallSkin.setTexture("ColorMap", tex_ml); 
     wallFace.setMaterial(wallSkin); 
     //wallSkin.getAdditionalRenderState().setWireframe(true); 
     oldVec = new Vector3f((float)i, -1.0f, -1.0f); 
     rootNode.attachChild(wallFace);    
    } 

    rootNode.attachChild(groundPlane); 

enter image description here

ответ

3

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

Или попробуйте этот метод

Box wall = new Box(new Vector3f(i, 0.0f, 0.0f), 1.0f, 1.0f, 1.0f); 
+0

Я принял ваш комментарий близко к сердцу, и все, что было, это я был перезапущен в позиции 'new Vector3f (0.0f, -1.0f, 0.0f) 'и создание поля размером' new Vector3f ((float) i, 0.0f, -1.0f), который создавал бы поле размером с предыдущим полем (рендеринг над предыдущим полем) плюс 1 единица больше ... Я должен был сохранить местоположение предыдущего вектора - Так спасибо! –

0

Является ли класс Box свой собственный или предоставленный jmonkey?

Если это ваш собственный, ваш порядок намотки треугольника окажется перевернутым.

+0

Melak47 - Нет, это что из ЮМЭ я до сих пор способ новичка право мой собственный (я думаю) –

+0

каковы аргументы для конструктора Box? Вы используете там -1.0, если это масштабирование, которое может привести к тому, что ваши лица будут переворачиваться – melak47

Смежные вопросы