1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| #include<SDL.h>
#include<osg/ref_ptr>
#include<osg/CameraNode>
#include<osg/Group>
#include<osg/Node>
#include <osgUtil/SceneView>
#include<iostream>
#include<osg/ShapeDrawable>
#include<osg/Geode>
#pragma comment(lib,"SDL.lib")
using namespace std;
using namespace osg;
using namespace osgUtil;
int main(int argc,char **argv)
{
if(SDL_Init(SDL_INIT_VIDEO))
{
cout<<"err init video"<<endl;
exit(1);
}
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
if(!SDL_SetVideoMode(640, 480, 0, SDL_OPENGL))
{
cout<<"err set video"<<endl;
exit(1);
}
ref_ptr<SceneView> sceneView = new SceneView;
ref_ptr<CameraNode> globalCamera = new CameraNode;
sceneView->setDefaults();
sceneView->setComputeNearFarMode(
osgUtil::CullVisitor::DO_NOT_COMPUTE_NEAR_FAR);
globalCamera = sceneView->getCamera();
globalCamera->setViewport(0, 0, 640, 480);
globalCamera->setProjectionMatrixAsPerspective(
45.0,
globalCamera->getViewport()->aspectRatio(),
0.1,
1000.0
);
globalCamera->setViewMatrixAsLookAt(Vec3d(0,0,20),Vec3d(0,0,-20),Vec3d(0,1,0));
sceneView->init();
ref_ptr<Group> root = new Group;
ref_ptr<Box> lBox = new Box(Vec3(0,0,0),1,1,1);
ref_ptr<ShapeDrawable> lBoxDrawable = new ShapeDrawable(lBox.get());
ref_ptr<Geode>lGeode = new Geode();
lGeode->addDrawable(lBoxDrawable.get());
root->addChild(lGeode.get());
sceneView->setSceneData(root.get());
SDL_Event event;
while(true)
{
if (SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
return 0;
case SDL_KEYDOWN:
if(event.key.keysym.sym == SDLK_ESCAPE)
{
return 0;
}
}
}
sceneView->update();
sceneView->cull();
sceneView->draw();
SDL_GL_SwapBuffers();
}
SDL_Quit();
return 0;
} |
Partager