最終更新: mikk_ni3_92 2009年11月23日(月) 18:31:02履歴
現在地 >> メニュー >> OpenCSG >> OpenCSG::01
Index:OpenCSG::00<< OpenCSG01 >> OpenCSG::02?
OpenCSGは抽象クラスを提供しているのみである。
従って、プログラミングする際は、その抽象クラスを継承したクラスを用意する必要がある。
OpenCSGには、派生クラスの例として「displaylistPrimitive.h」、「displaylistPrimitive.cpp」がある。
これを使うと、ディスプレイリストに描画物を登録し、出力する事ができる。
【例】
Index:OpenCSG::00<< OpenCSG01 >> OpenCSG::02?
OpenCSGは抽象クラスを提供しているのみである。
従って、プログラミングする際は、その抽象クラスを継承したクラスを用意する必要がある。
OpenCSGには、派生クラスの例として「displaylistPrimitive.h」、「displaylistPrimitive.cpp」がある。
これを使うと、ディスプレイリストに描画物を登録し、出力する事ができる。
- 「std::vector<OpenCSG::Primitive*> 」という「vector型」にデータをpushしていく。
- OpenCSG::render()で描画内容やアルゴリズムを指定
- glDepthFunc(GL_EQUAL)指定
- 「std::vector<OpenCSG::Primitive*>」にpushされたデータの「render()メンバ関数」を使う
【例】
GLuint id1 = glGenLists(1); glNewList(id1, GL_COMPILE); glutSolidSphere(1.2, 60, 60); glEndList(); GLuint id2 = glGenLists(1); glNewList(id2, GL_COMPILE); glPushMatrix(); glTranslatef(0.0,1.0,1.0); glutSolidCube(1.0); glPopMatrix(); glEndList(); //付属派生クラスより(displaylistPrimitive.h、displaylistPrimitive.cppより) //データのpush primitives.push_back(new OpenCSG::DisplayListPrimitive(id1, OpenCSG::Intersection, 1)); primitives.push_back(new OpenCSG::DisplayListPrimitive(id2, OpenCSG::Subtraction, 1)); … … //描画方法指定 OpenCSG::render(primitives, OpenCSG::Automatic, OpenCSG::NoDepthComplexitySampling); glDepthFunc(GL_EQUAL); for (std::vector<OpenCSG::Primitive*>::const_iterator Iter = primitives.begin(); Iter != primitives.end(); ++Iter) { (*Iter)->render(); //描画 } glDepthFunc(GL_LESS);