Hi,
yeah. I found my geometry center as ( 0.04,0.075,0.0). So first I do the
rotation of 90 degree about z-axis and then translating my geometry to 0 by
subtracting the aboive center values.
Again I m getting my geometry is translated and half of the geometry is off
the view. Have a look at my code, I dont understand where I am making mistake.
void applyTexture(osg::Drawable* drawable, std::string imgName)
{
static std::string filePath = getenv("OSGHOME");
osg::ref_ptr<osg::Image> image = osgDB::readImageFile(filePath + imgName);
osg::ref_ptr<osg::Texture2D> tex2D = new osg::Texture2D;
tex2D->setImage(image.get());
tex2D->setResizeNonPowerOfTwoHint(false);
drawable->getOrCreateStateSet()->setTextureAttributeAndModes
(0, tex2D.get());
drawable->getOrCreateStateSet()->setMode(GL_LIGHTING,
osg::StateAttribute::OVERRIDE |
osg::StateAttribute::OFF);
osg::ref_ptr<osg::TexEnv> texEnv = new osg::TexEnv;
texEnv->setMode(osg::TexEnv::REPLACE);
drawable->getOrCreateStateSet()->setTextureAttributeAndModes
(0, texEnv.get());
}
osg::Geode* createGeometry()
{
float x = 0.0, y = 0.0;
float width=0.08 , height=0.15 ;
std::string imgName="\\images\\ring_active.png";
osg::Geometry* boxGeom = new osg::Geometry;
boxGeom->setName("myGeometry");
osg::Vec3Array* vertices = new osg::Vec3Array;
int _z=0.0;
vertices->push_back(osg::Vec3(x, y, _z));
vertices->push_back(osg::Vec3(x + width, y, _z));
vertices->push_back(osg::Vec3(x + width, y + height, _z));
vertices->push_back(osg::Vec3(x, y + height , _z));
boxGeom->setVertexArray(vertices);
osg::Vec3Array* normals = new osg::Vec3Array;
normals->push_back(osg::Vec3(0.0f,50.0f,1.0f));
boxGeom->setNormalArray(normals);
boxGeom->setNormalBinding(osg::Geometry::BIND_OVERALL);
osg::Vec4Array* colors = new osg::Vec4Array;
colors->push_back(osg::Vec4(0., 0., 0., 0.9));
boxGeom->setColorArray(colors);
boxGeom->setColorBinding(osg::Geometry::BIND_OVERALL);
//applying texture
osg::ref_ptr<osg::Vec2Array> texCoordArray = new osg::Vec2Array;
texCoordArray->push_back(osg::Vec2(0.f, 0.f));
texCoordArray->push_back(osg::Vec2(1.0, 0.f));
texCoordArray->push_back(osg::Vec2(1.0, 1.0));
texCoordArray->push_back(osg::Vec2(0.0, 1.0));
boxGeom->setTexCoordArray(0, texCoordArray.get());
applyTexture(boxGeom, imgName);
boxGeom->addPrimitiveSet(new osg::DrawArrays(GL_QUADS,0,4));
osg::StateSet* stateset = boxGeom->getOrCreateStateSet();
stateset->setMode(GL_BLEND,osg::StateAttribute::ON);
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
osg::Geode* _geode=new osg::Geode;
_geode->addDrawable(boxGeom);
_geode->setName("myGeode");
geometry_center=boxGeom->getBound().center();
return _geode;
}
int main( int argc, char **argv )
{
osg::Camera* g_camera=new osg::Camera;
g_camera->setProjectionMatrixAsOrtho2D(0,1,0,1.25);
g_camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
g_camera->setClearMask(GL_DEPTH_BUFFER_BIT);
g_camera->setRenderOrder(osg::Camera::POST_RENDER);
//rotate
osg::ref_ptr<osg::MatrixTransform> rotMT=new
osg::MatrixTransform; osg::Matrix rmatrix;
rmatrix.makeRotate(osg::DegreesToRadians(45.),osg::Vec3f(0.0,0.0,1.0));
rotMT->setMatrix(rmatrix);
//translate
osg::ref_ptr<osg::MatrixTransform> transMT=new
osg::MatrixTransform; osg::Matrix tmatrix;
tmatrix.makeTranslate(osg::Vec3f(-0.04,-0.075,0.0));
transMT->setMatrix(tmatrix);
rotMT->addChild(transMT.get());
transMT->addChild(createGeometry());
g_camera->addChild(rotMT.get());
osgViewer::Viewer viewer;
viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded);
viewer.setCameraManipulator( new osgGA::TrackballManipulator() );
viewer.addEventHandler(new Rot);
viewer.setSceneData(g_camera);
osg::Vec3d eye(osg::Vec3f(0.0,0.0,0.0));
osg::Vec3d center(osg::Vec3f(0.0,0.0,0.0));
osg::Vec3d up(osg::Vec3f(0.0,0.0,0.0));
viewer.getCameraManipulator()->setHomePosition(eye,center,up);
viewer.home();
viewer.realize();
while(!viewer.done())
viewer.frame();
return 0;
}
Cheers,
Akilan
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=17210#17210
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org