openFrameworksでTrueTypeFontをofVboMeshに変換する方法を調べてみました。
フォーラムのこの投稿を参考にしました。
https://forum.openframeworks.cc/t/extrude-text-into-3d/6938/2
まず.hで
ofTrueTypeFont font,bounds; vector <ofVboMesh>textMesh; vector <ofTTFCharacter>letterPaths; vector <ofPolyline>lines; ofRectangle bbox;
を定義します。
次にsetup()で
font.load("フォント名.otf",フォントサイズ, true, true, true);//フォントをロード
letterPaths = font.getStringAsPoints("文字列");//メッシュ化するテキスト
bbox = font.getStringBoundingBox("文字列", 0, 0);
for(int i=0; i<letterPaths.size(); i++){
ofVboMesh front = letterPaths[i].getTessellation();
ofVboMesh back = front;
ofVec3f* v = back.getVerticesPointer();
for(int j=0; j< back.getNumVertices(); j++){
v[j].z += 50;//テキストの奥行き
}
textMesh.push_back( front );
textMesh.push_back( back );
}
update()にて
for(int i=0; i<textMesh.size(); i++){
textMesh[i].clear();//メッシュをクリア
}
for(int i=0; i<letterPaths.size(); i++){
lines = letterPaths[i].getOutline();
ofVboMesh side;
for(int j=0; j<lines.size(); j++){
vector <ofPoint>points = lines[j].getVertices();
int k=0;
for(k=0; k<points.size()-1; k++){
ofPoint p1 = points[k+0];
ofPoint p2 = points[k+1];
side.addVertex(p1);
side.addVertex(p2);
side.addVertex(ofPoint(p1.x, p1.y, p1.z+50));
side.addVertex(ofPoint(p1.x, p1.y, p1.z+50));
side.addVertex(ofPoint(p2.x, p2.y, p2.z+50));
side.addVertex(p2);
}
// Connect the last to the first
ofPoint p1 = points[k];
ofPoint p2 = points[0];
side.addVertex(p1);
side.addVertex(p2);
side.addVertex(ofPoint(p1.x, p1.y, p1.z));
side.addVertex(ofPoint(p1.x, p1.y, p1.z+50));
side.addVertex(ofPoint(p2.x, p2.y, p2.z+50));
side.addVertex(p2);
}
textMesh.push_back( side );
}
最後にdraw()で描画します。
for(int i=0; i<textMesh.size(); i++){
textMesh[i].draw();
}