OSG 法線貼圖

osgFX::BumpMapping 這個類,原本我想應該是高低貼圖或凹凸貼圖。 但作出來卻只是法線貼圖。node

用起來感受不方便, 但總比沒有好數組

關鍵代碼:app

    // 凹凸貼圖特效:
    osgFX::BumpMapping *bump1 = new osgFX::BumpMapping;
    bump1->setOverrideDiffuseTexture(texture_Diffuse);    // 設置漫反射貼圖,這要求網格物體有第二個貼圖座標
    bump1->setOverrideNormalMapTexture(texture_NormalMap);// 法線 用的是網格物體的第一個貼圖座標
    
    //bump1->prepareGeometry( gPlane1 );
    //bump1->prepareNode(node);    
    bump1->addChild(gInteractiveScene);
    bump1->prepareChildren();    // prepare 語句只需一句, 多句也不出錯, 但必須有一句
    
    viewer1->setSceneData(bump1);

2019-03-26 補充一下, 若是網格物體有設置法線, 那麼這個法線數組的大小不能是1 下面這段引發崩潰. 源碼會執行到 TangentSpaceGenerator::compute 這裏, 不知是做什麼處理, 多是BUG,這裏讀取三個法線向量出來ide

// 3.法線:
	osg::Vec3Array *arrNormal = new osg::Vec3Array;
	arrNormal->push_back(osg::Vec3(0, 1, 1));// 法線數組只有一個組元的狀況是會引起崩潰的
	gPlane1->setNormalArray(arrNormal, osg::Array::BIND_OVERALL);// BIND_PER_VERTEX的模式就能夠,法線的組元與頂點一一對應就行
	// 法線貼圖會與頂點法線進行運算.
	// 沒有給出法線數據的狀況下, 不會有問題

以前用的法線貼圖: 法線貼圖code

相關文章
相關標籤/搜索