「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

回転 world coordinate|3Dプログラミング整理

では、ワールド座標に存在するx,y,z軸で回転する事を考える。

oFではofRotate, ofRotateX, ofRotateY, ofRotateZ というメソッドが用意されているので、これをそのまま使用すればよい。

今回の意図としては、画面全体を任意の回転軸で任意角度回転させる。

下記の動画のように、 windowの左上を起点としている。 x,y,z軸はそれぞれ赤・緑・青の線で示している。

回転軸X https://vimeo.com/74013475

回転軸Y https://vimeo.com/74013635

回転軸Z https://vimeo.com/74013670

float degree = 0.0;

//--------------------------------------------------------------
void testApp::setup(){
    
    ofSetFrameRate(60);
    
}

//--------------------------------------------------------------
void testApp::update(){
    degree += 5.0;
}

//--------------------------------------------------------------
void testApp::draw(){
    
    ofBackground(0, 0, 0);

    ofPushMatrix();
    {
        ofSetLineWidth(10.0);
        
        //  x
        ofSetColor(255, 0, 0);
        ofLine(0.0, 0.0, ofGetWidth(), 0);
        
        //  y
        ofSetColor(0, 255, 0);
        ofLine(0.0, 0.0, 0.0, ofGetHeight());
        
        //  z
        ofSetColor(0, 0, 255);
        ofLine(0, 0, -30.0, 0, 0, 30.0);
    }
    ofPopMatrix();

    
    ofRotateZ(degree);
    ofSetColor(255);
    ofCircle(ofGetWidth()/2, ofGetHeight()/2, 20.0);

}