2013-02-18 4 views
0

createTexturedQuadGeometry에 의해 생성 된 쿼드 기하학 객체에 이미지에서로드하는 텍스처를 사용하여 텍스처 맵을 만들려고합니다. 그런 다음이 드로어 블을 노드에 추가하고 해당 노드를 루트에 추가하고 계층 구조를 렌더링합니다.OpenScenegraph : 텍스처 매핑 쿼드

아래 코드는 내가하는 방법입니다. 코드가 컴파일되고 실행되지만 지정된 이미지 대신 빈 검은 색 화면 만 표시됩니다. 누군가 잘못 지적 할 수 있습니까?

int main(int argc, char** argv) 
{ 
    osg::ref_ptr<osg::Group> root = new osg::Group; 

    osg::ref_ptr<osg::Texture2D> testTexture = new osg::Texture2D; 
    osg::ref_ptr<osg::Image> testImage = osgDB::readImageFile("testImage.png"); 
    assert(testImage.valid()); 
    int viewWidth = testImage->s(); 
    int viewHeight = testImage->t(); 
    testTexture->setImage(testImage); 

    osg::ref_ptr<osg::Geometry> pictureQuad = osg::createTexturedQuadGeometry(osg::Vec3(0.0f,0.0f,0.0f), 
                       osg::Vec3(viewWidth,0.0f,0.0f), 
                       osg::Vec3(0.0f,0.0f,viewHeight), 
                       0.0f, 
                       viewWidth, 
                       viewHeight, 
                       1.0f); 

    pictureQuad->getOrCreateStateSet()->setTextureAttributeAndModes(0, testTexture.get()); 
    pictureQuad->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON); 
    osg::ref_ptr<osg::Geode> textureHolder = new osg::Geode(); 
    textureHolder->addDrawable(pictureQuad); 
    root->addChild(textureHolder); 

    osgViewer::Viewer viewer; 
    viewer.setSceneData(root.get()); 
    viewer.run(); 
} 

답변

4

그래서 오류가 발생했습니다.

createTexturedQuadGeometry는 정규화 된 텍스처 좌표를 예상합니다.

그래서,

osg::ref_ptr<osg::Geometry> pictureQuad = osg::createTexturedQuadGeometry(osg::Vec3(0.0f,0.0f,0.0f), 
                       osg::Vec3(viewWidth,0.0f,0.0f), 
                       osg::Vec3(0.0f,0.0f,viewHeight), 
                       0.0f, 
                       0.0f, 
                       1.0f, 
                       1.0f); 

문제를 해결합니다.