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