2014-11-14 3 views
1

У меня есть еще один вопрос. Вот мой код:OpenSceneGraph - Текстура на каждой грани модели

#include <iostream> 
#include <osg/Light> 
#include <osg/LightSource> 
#include <osg/PositionAttitudeTransform> 
#include <osgDB/ReadFile> 
#include <osgViewer/Viewer> 

int main(int argc, char** argv) 
{ 
    osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile("cube.3ds"); //importing object 
    osg::ref_ptr<osg::StateSet> ss = loadedModel->getOrCreateStateSet(); 
    osg::ref_ptr<osg::Image> image = osgDB::readImageFile("box_1.png"); //loading texture from file 
    osg::ref_ptr<osg::Texture2D> tex(new osg::Texture2D()); /creating texture for model from image 
    tex->setImage(image); 
    ss->setTextureAttributeAndModes(0, tex); 
    osg::ref_ptr<osg::TexGen> texGen(new osg::TexGen()); 
    texGen->setPlane(osg::TexGen::S, osg::Plane(0.075, 0.0, 0.0, 0.5)); 
    texGen->setPlane(osg::TexGen::T, osg::Plane(0.0, 0.035, 0.0, 0.3)); 
    ss->setTextureAttributeAndModes(0, texGen); 
    osgViewer::Viewer viewer; //Creating viewer 
    viewer.setSceneData(loadedModel); 
    viewer.setUpViewOnSingleScreen(0); 
    return viewer.run(); 
    } 

Так что делает этот код:. Он принимает модель из файла (т.е. «cube.3s») и добавление текстуры (изображение из файла «box_1.png» к нему Вы можете изменение текстуры на объекте путем переключения одного изображения на другое, но вот вопрос: он растягивает изображение на всей модели. Как это можно сделать, просто поместив все изображение на каждую грань модели (они являются платоническим сплошным (например, пирамида, куб и и т. д.).

ответ

2

Все это сводится к координатам текстуры, которые были назначены вершинам модели, когда они были построены. Если вы конвертируете cube.3ds в формат .OSG или .OSGT, вы можете увидеть UV-координаты, которые используется для определения re в карте текстур, чтобы искать каждый угол каждого лица. Вот как текстуры «приколоты» к лицам.

Просто загрузите и отредактируйте этот куб или пирамиду в 3D-инструменте моделирования и исправьте координаты UV в соответствии с тем, что вы хотите.

В качестве альтернативы вы можете отредактировать файл .osgt, чтобы изменить UV-координаты, назначенные каждой вершине.