openFrameworks で 3DCG を行う方法です。
プロジェクト名は graphics3D とします。

まずは2次元の図形を描くところからはじめます。
void ofApp::draw() {
ofTranslate(ofGetWidth() / 2, ofGetHeight() / 2); // 画面の中心を原点にする
ofRotateRad(ofGetElapsedTimef() * 0.5); // 回転させる
ofSetColor(65, 105, 225);
ofSetRectMode(OF_RECTMODE_CENTER);
ofDrawRectangle(0, 0, 300, 300);
}
上記のプログラムの ofRotateRad() を、ofRotateXRad() に変更してみます。
void ofApp::draw() {
ofTranslate(ofGetWidth() / 2, ofGetHeight() / 2); // 画面の中心を原点にする
// ofRotateRad(ofGetElapsedTimef() * 0.5); // 回転させる
ofRotateXRad(ofGetElapsedTimef() * 0.5);
ofSetColor(65, 105, 225);
ofSetRectMode(OF_RECTMODE_CENTER);
ofDrawRectangle(0, 0, 300, 300);
}
長方形は、実は3次元空間にあったことがわかります。
ofRotateXRad() は、x軸を中心に3次元回転を行う関数です。この例では、時間経過に応じて長方形がX軸を中心に回転し続けるため、手前と奥に傾く動きになります。
ofRotateYRad() と ofRotateZRad() もあります。それぞれを組み合わせることも可能です。
3Dプリミティブの例として、球と立方体を作成・配置してみます。
...略...
class ofApp : public ofBaseApp {
public:
...略...
ofSpherePrimitive sphere; // 球プリミティブ
ofBoxPrimitive box; // 立方体プリミティブ
};
void ofApp::setup() {
sphere.set(90, 8); // 引数は半径と分割数
sphere.setPosition(-150, 0, 0); // 球の中心位置を設定
box.set(180); // 引数は幅、高さ、奥行き
box.setPosition(150, 0, 0); // 立方体の中心位置を設定
}
void ofApp::draw() {
ofTranslate(ofGetWidth() / 2, ofGetHeight() / 2); // 画面の中心を原点にする
sphere.drawWireframe(); // ワイヤーフレームで描画
box.drawWireframe(); // ワイヤーフレームで描画
}