#include <Inventor/Qt/SoQt.h>// たくさんインクルードする
#include <Inventor/Qt/SoQtRenderArea.h>
#include <Inventor/manips/SoTrackballManip.h>
#include <Inventor/nodes/SoCylinder.h>
#include <Inventor/nodes/SoDirectionalLight.h>
#include <Inventor/nodes/SoMaterial.h>
#include <Inventor/nodes/SoPerspectiveCamera.h>
#include <Inventor/nodes/SoSeparator.h>


int main(int argc, char** argv)
{
  // InventorとQtの初期化
  QWidget * window = SoQt::init(argv[0]);
  if (!window)
    return(0);

  // シーンのルート作成
  SoSeparator *root = new SoSeparator;
  root->ref();

  // カメラ（視点）を作成してルートに追加
  SoPerspectiveCamera *camera = new SoPerspectiveCamera;
  root->addChild(camera);

  // ライトとトラックボールマニュピレータを作成、追加
  root->addChild(new SoDirectionalLight);
  root->addChild(new SoTrackballManip);

  // マテリアルをルートに追加
  SoMaterial *material = new SoMaterial;
  material->diffuseColor.setValue(0.0, 0.0, 1.0);
  root->addChild(material);

  // 円柱を作成、追加
  root->addChild(new SoCylinder);

  // 表示領域を作成して、シーンを追加する
  SoQtRenderArea *renderArea = new SoQtRenderArea(window);
  camera->viewAll(root, renderArea->getViewportRegion());
  renderArea->setSceneGraph(root);
  renderArea->setTitle("Cylinder with Trackball");
  renderArea->show();

  // メインウインドウを表示して、イベントハンドリング開始
  SoQt::show(window);
  SoQt::mainLoop();
}
