Thanks for reply, Jorge. I really appreciate your help!

I'll try today to load a simpler model. May i use ".osg" model or ".osgt"?
It's possible to try to load directly a ".dae" model?

Yesterday, i've downloaded "OpenSceneGraph-Data-3.0.0", unzipped and put in my 
HTC sdcard.

I tried all ".osg" and "osgt" examples; this is the result:

                                Model visible           Texture visible
avatar.osg              -->     No                      No      
axes.osgt                       -->     Yes                     No
bignathan.ogs           -->     No                      No
cessna.ogs                      -->     Yes                     No
cessna.ogst             -->     Yes                     No
cessnafire.ogs          -->     Yes                     No
cessnafire.ogst         -->     Yes                     No
clock.ogst                      -->     Yes                     No
cow.ogs                 -->     Yes                     No
cow.ogsy                        -->     Yes                     No
cube_mapped_torus       -->     Yes                     No
dumptruck.ogs           -->     Yes                     No
dumptruck.ogst          -->     Yes                     No
example.ogs             -->     No                      No
fountain.ogst           -->     Yes                     No
glider.ogs                      -->     Yes                     No
glider.ogst                     -->     Yes                     No
glsl_confetti.ogst      -->     No                      No
glsl_julia.ogst         -->     Yes                     No
glsl_mandelbrot.ogs     -->     Yes                     No
glsl_simple.ogs         -->     No                      No
Jansens.ogs             -->     No                      No
lz.ogs                  -->     Yes                     No
lz.ogst                 -->     Yes                     No
morphing.ogs            -->     No                      No
morphtarget_shape0      -->     Yes                     No
morphtarget_shape1      -->     Yes                     No
nathan.ogs                      -->     No                      No
osgcool.ogst            -->     Yes                     No
robot.ogs                       -->     No                      No
skydome.ogst            -->     Yes                     No
SmokeBox.ogs            -->     Yes                     No
spaceship.ogs           -->     Yes                     No

All model are too advanced for android frameword or i do something wrong?

Another try: I like to start from the beginning.
I've tried to convert BasicGeometry tutorial, for learn.
I took osgAndroidExampleGLES2 for project base. I modified OsgMainApp like this:


Code:
#include "OsgMainApp.hpp"
#include <osg/PositionAttitudeTransform>

OsgMainApp::OsgMainApp(){

    _lodScale = 1.0f;
    _prevFrame = 0;

    _initialized = false;
    _clean_scene = false;

}
OsgMainApp::~OsgMainApp(){

}

//Initialization function
void OsgMainApp::initOsgWindow(int x,int y,int width,int height){

    __android_log_write(ANDROID_LOG_ERROR, "OSGANDROID", "Initializing 
geometry");

    osg::notify(osg::ALWAYS)<<"Testing"<<std::endl;

    _viewer = new osgViewer::Viewer();
    _viewer->setUpViewerAsEmbeddedInWindow(x, y, width, height);
    _viewer->setThreadingModel(osgViewer::ViewerBase::SingleThreaded);

    _root = new osg::Group();
    _pyramidGeode = new osg::Geode();
    _pyramidGeometry = new osg::Geometry();

    //OsgMainApp::loadObjects();

    // switch off lighting as we haven't assigned any normals.
    _root->getOrCreateStateSet()->setMode(GL_LIGHTING, 
osg::StateAttribute::OFF);


    _viewer->realize();

    _viewer->addEventHandler(new osgViewer::StatsHandler);
    _viewer->addEventHandler(new 
osgGA::StateSetManipulator(_viewer->getCamera()->getOrCreateStateSet()));
    _viewer->addEventHandler(new osgViewer::ThreadingHandler);
    _viewer->addEventHandler(new osgViewer::LODScaleHandler);

    _manipulator = new osgGA::KeySwitchMatrixManipulator;

    _manipulator->addMatrixManipulator( '1', "Trackball", new 
osgGA::TrackballManipulator() );
    _manipulator->addMatrixManipulator( '2', "Flight", new 
osgGA::FlightManipulator() );
    _manipulator->addMatrixManipulator( '3', "Drive", new 
osgGA::DriveManipulator() );
    _manipulator->addMatrixManipulator( '4', "Terrain", new 
osgGA::TerrainManipulator() );
    _manipulator->addMatrixManipulator( '5', "Orbit", new 
osgGA::OrbitManipulator() );
    _manipulator->addMatrixManipulator( '6', "FirstPerson", new 
osgGA::FirstPersonManipulator() );
    _manipulator->addMatrixManipulator( '7', "Spherical", new 
osgGA::SphericalManipulator() );

    _viewer->setCameraManipulator( _manipulator.get() );

    //_viewer->getViewerStats()->collectStats("scene", true);

    _initialized = true;

    __android_log_write(ANDROID_LOG_ERROR, "OSGANDROID", "END INIT");
}
//Draw
void OsgMainApp::draw(){
    //Associate the pyramid geometry with the pyramid geode
    //   Add the pyramid geode to the root node of the scene graph.

    _pyramidGeode->addDrawable(_pyramidGeometry);
    _root->addChild(_pyramidGeode);

    OsgMainApp::loadObjects();

    //The final step is to set up and enter a simulation loop.
    _viewer->setSceneData( _root );

    _viewer->frame();
}
void OsgMainApp::loadObjects(){

    //Declare an array of vertices. Each vertex will be represented by
    //a triple -- an instances of the vec3 class. An instance of
    //osg::Vec3Array can be used to store these triples. Since
    //osg::Vec3Array is derived from the STL vector class, we can use the
    //push_back method to add array elements. Push back adds elements to
    //the end of the vector, thus the index of first element entered is
    //zero, the second entries index is 1, etc.
    //Using a right-handed coordinate system with 'z' up, array
    //elements zero..four below represent the 5 points required to create
    //a simple pyramid.

    __android_log_write(ANDROID_LOG_ERROR, "OSGANDROID", "Loading objects");

    osg::Vec3Array* pyramidVertices = new osg::Vec3Array;
    pyramidVertices->push_back( osg::Vec3( 0, 0, 0) ); // front left
    pyramidVertices->push_back( osg::Vec3(10, 0, 0) ); // front right
    pyramidVertices->push_back( osg::Vec3(10,10, 0) ); // back right
    pyramidVertices->push_back( osg::Vec3( 0,10, 0) ); // back left
    pyramidVertices->push_back( osg::Vec3( 5, 5,10) ); // peak

    //Associate this set of vertices with the geometry associated with the
    //geode we added to the scene.

    _pyramidGeometry->setVertexArray( pyramidVertices );

    //Next, create a primitive set and add it to the pyramid geometry.
    //Use the first four points of the pyramid to define the base using an
    //instance of the DrawElementsUint class. Again this class is derived
    //from the STL vector, so the push_back method will add elements in
    //sequential order. To ensure proper backface cullling, vertices
    //should be specified in counterclockwise order. The arguments for the
    //constructor are the enumerated type for the primitive
    //(same as the OpenGL primitive enumerated types), and the index in
    //the vertex array to start from.

    osg::DrawElementsUInt* pyramidBase =
        new osg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 0);
    pyramidBase->push_back(3);
    pyramidBase->push_back(2);
    pyramidBase->push_back(1);
    pyramidBase->push_back(0);
    _pyramidGeometry->addPrimitiveSet(pyramidBase);

    //Repeat the same for each of the four sides. Again, vertices are
    //specified in counter-clockwise order.

    osg::DrawElementsUInt* pyramidFaceOne =
        new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
    pyramidFaceOne->push_back(0);
    pyramidFaceOne->push_back(1);
    pyramidFaceOne->push_back(4);
    _pyramidGeometry->addPrimitiveSet(pyramidFaceOne);

    osg::DrawElementsUInt* pyramidFaceTwo =
        new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
    pyramidFaceTwo->push_back(1);
    pyramidFaceTwo->push_back(2);
    pyramidFaceTwo->push_back(4);
    _pyramidGeometry->addPrimitiveSet(pyramidFaceTwo);

    osg::DrawElementsUInt* pyramidFaceThree =
        new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
    pyramidFaceThree->push_back(2);
    pyramidFaceThree->push_back(3);
    pyramidFaceThree->push_back(4);
    _pyramidGeometry->addPrimitiveSet(pyramidFaceThree);

    osg::DrawElementsUInt* pyramidFaceFour =
        new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
    pyramidFaceFour->push_back(3);
    pyramidFaceFour->push_back(0);
    pyramidFaceFour->push_back(4);
    _pyramidGeometry->addPrimitiveSet(pyramidFaceFour);

    //Declare and load an array of Vec4 elements to store colors.

    osg::Vec4Array* colors = new osg::Vec4Array;
    colors->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f) ); //index 0 red
    colors->push_back(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f) ); //index 1 green
    colors->push_back(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f) ); //index 2 blue
    colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f) ); //index 3 white
    colors->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f) ); //index 4 red

    //The next step is to associate the array of colors with the geometry,
    //assign the color indices created above to the geometry and set the
    //binding mode to _PER_VERTEX.

    _pyramidGeometry->setColorArray(colors);
    _pyramidGeometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);

    //Now that we have created a geometry node and added it to the scene
    //we can reuse this geometry. For example, if we wanted to put a
    //second pyramid 15 units to the right of the first one, we could add
    //this geode as the child of a transform node in our scene graph.

    // Declare and initialize a transform node.
    osg::PositionAttitudeTransform* pyramidTwoXForm =
        new osg::PositionAttitudeTransform();

    // Use the 'addChild' method of the osg::Group class to
    // add the transform as a child of the root node and the
    // pyramid node as a child of the transform.

    _root->addChild(pyramidTwoXForm);
    pyramidTwoXForm->addChild(_pyramidGeode);

    // Declare and initialize a Vec3 instance to change the
    // position of the model in the scene

    osg::Vec3 pyramidTwoPosition(15,0,0);
    pyramidTwoXForm->setPosition( pyramidTwoPosition );

}
//Events
void OsgMainApp::keyboardDown(int key){
    _viewer->getEventQueue()->keyPress(key);
}
void OsgMainApp::keyboardUp(int key){
    _viewer->getEventQueue()->keyRelease(key);
}




Result: Nothing happend! The activity start, "init" goes, "draw" goes, but my 
device screen remains blue. Nothing has drawn.

I'm wrong here too?

Sorry, but i'm too noob :) 
Thanks in advance for the help!



Jorge Izquierdo Ciges wrote:
> Giulio, there has been some changes in the handling of textures/projective 
> textures. Cow it's usually a model that gave me errors because of that. Just 
> try simple models withouth textures first and learn step by step.
> 
> 
[/code]

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=45631#45631





_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to