gotutiyan’s blog

競技プログラミングをやったりopenframeworksでお絵かきをしたりしています。

細胞

この作品を横で見ていた友人が「細胞みたいやな」と言うのでこの題名に。

ofSphere(Box)PrimitiveとEasyCamの練習が主な目的でした。



まず、EasyCamのインスタンスをcamという名前で作成しました。これはcam.begin()からcam.end()の間にある行に書かれた物体を、マウスドラッグとホイール回転で自由な角度で見られるというものです。今回はこの部分にsphereとboxの両方を入れました。

また、ofSphereのインスタンスをspという名前で作成しました。
今の所、
sp.set(直径,メッシュの分割数?)
sp.setPosition(x座標, y座標, z座標)
sp.drawWireframe();

の流れで書くということくらいまで分かりましたが、ほかにもいじっているときに、若干座標が思い通りにならないところがあったので今後の課題です。

ソースは以下の通りです。色を変えようとした痕跡がありますが、今回は関係ないです。

#include "ofApp.h"
#define rep(i,j,k) for(int i=j;i<k;i++)

ofSpherePrimitive sp;
ofBoxPrimitive box;
ofEasyCam cam;
ofColor c;

int yro=0;

void ofApp::setup(){
    ofSetFrameRate(60);
    ofNoFill();
    ofSetBackgroundColor(0);
    ofSetColor(255);
}

void ofApp::update(){
    yro++;
}

void ofApp::draw(){
    ofTranslate(ofGetWidth()/2,ofGetHeight()/2);
    c.setHsb(yro,255,255);
    ofSetColor(c);
    cam.begin(); //カメラ起動
    ofPushMatrix(); 
    ofRotate(yro);
    
    sp.set(100,8);
    sp.setPosition(0,0,0);
    sp.drawWireframe(); //メッシュの線だけ描画。sp.draw()だと塗りつぶし
    ofPopMatrix();  //回転させるのは球だけ
    
    box.set(300);
    box.setPosition(0,0,0);
    box.drawWireframe();  
    
    cam.end(); //カメラ終了
    
}