QtとC++とOpenGLで立方体で表示するよ
I updated: 2017/06/03
※ここに書かれているやり方は古いので、こっちの方がベターです。
QtとC++とOpenGLを使って立方体を表示してみました。
OpenGLのAPIの中には立方体を直接描画するものはおそらく無いので、
自力で立体的に描画する必要があると思う。
簡単に立方体の表示方法を説明すると、左側、正面側、上側に正方形を描画して、
それぞれに光源を設定すれば、立方体に見えるという仕組みになっています。
正直、光源設定がよく分かっていない!難しい!(。ŏ﹏ŏ)
以下はソース
#include <QApplication> #include <QGLWidget> class SampleGL { public: void init() {} void resize(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glEnable(GL_LIGHTING); // 光源関係の設定① glEnable(GL_LIGHT0); // 光源関係の設定② glEnable(GL_NORMALIZE); // 光源関係の設定③ glFrustum(-1.0, 1.0, -1.0, 1.0, 3.0, 1000.0); glMatrixMode(GL_MODELVIEW); } void paint() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); // 左側の面 glNormal3f(1,1,1); // 光源 glVertex3f(-0.7, 0.8, -7.0); glVertex3f(-0.1, 0.0, -4.0); glVertex3f(-0.1, -0.7, -4.0); glVertex3f(-0.7, -0.3, -7.0); // 正面 glNormal3f(0,1,1); // 光源 glVertex3f( -0.1, 0.0, -4.0); glVertex3f( 0.7, 0.0, -4.0); glVertex3f( 0.7, -0.7, -4.0); glVertex3f( -0.1, -0.7, -4.0); // 上側の面 glNormal3f(1,0.4,1.0); // 光源 glVertex3f( -0.7, 0.8, -7.0); glVertex3f( 0.6, 0.8, -7.0); glVertex3f(0.7, 0.0, -4.0); glVertex3f(-0.1, 0.0, -4.0); glEnd(); glFlush(); } }; class Sample : public QGLWidget { private: SampleGL *sampleGL; public: Sample(QWidget *parent = NULL) : QGLWidget(parent) { this->setWindowTitle("Sample"); this->resize(350, 350); sampleGL = new SampleGL(); } ~Sample() { delete sampleGL; } protected: void initializeGL() { sampleGL->init(); } void resizeGL(int w, int h){ sampleGL->resize(w, h); } void paintGL() { sampleGL->paint(); } }; int main (int argc, char* argv[]) { QApplication appl(argc, argv); Sample sample; sample.show(); return appl.exec(); }