Hi arturo,

Thanks for the answer. I tried to combine the code you found with my project but failed. It shows `Call to implicitly-deleted default constructor of 'ofApp'`

on the line “ofRunApp(new ofApp());” in the main.cpp page.

if I comment out the part (in the draw() function part ), the error would disappear.

what I want to achieve is: make the Chinese Character (ofTrueTypeFont) won’t affected by transformation, just like the “hello” and “welcome” (ofDrawBitmapString()) in the gif above

Many thanks!

## ofApp.h

```
class ofApp : public ofBaseApp{
public:
....
//------- random postion vector
vector <glm::vec3> randomPositions;
float totalNum;
float range;
//------- font
ofTrueTypeFont hongdao;
//------- matrix
ofMatrixStack matrixStack;
const ofAppBaseWindow * window;
};
```

## ofApp.cpp

(in setup() )

```
void ofApp::setup(){
totalNum = 5;
range = 200;
for(int i = 0; i < totalNum; i++){
randomPositions.push_back(glm::vec3(ofRandom(-range,range), ofRandom(-range,range), ofRandom(-range,range)));
}
//------- fonts
hongdao.load("hongdao.ttf", 30);
ofTtfSettings settings("hongdao.ttf", 20);
settings.antialiased = true;
settings.addRange(ofUnicode::Latin1Supplement);
settings.addRange(ofUnicode::Hiragana);
settings.addRange(ofUnicode::Katakana);
settings.addRange(ofUnicode::CJKUnified);
settings.addRange(ofUnicode::Space);
settings.addRange(ofUnicode::CJKLettersAndMonths);
hongdao.load(settings);
//-------- matrixStack
matrixStack.setRenderSurface(*window);
}
```

(in draw() )

```
void ofApp::draw(){
ofSetColor(255,255);
// ofRectangle rViewport;
// glm::mat4 modelView;
// rViewport = ofGetCurrentViewport();
// auto mat = matrixStack.getProjectionMatrixNoOrientation() * matrixStack.getModelViewMatrix();
// auto dScreen4 = mat * glm::vec4(randomPositions[0].x, randomPositions[0].y, randomPositions[0].z, 1.0);
// auto dScreen = dScreen4.xyz() / dScreen4.w;
// dScreen += glm::vec3(1.0) ;
// dScreen *= 0.5;
//
// dScreen.x += rViewport.x;
// dScreen.x *= rViewport.width;
//
// dScreen.y += rViewport.y;
// dScreen.y *= rViewport.height;
//
// if (dScreen.z >= 1) return;
//
// ofMatrixMode(OF_MATRIX_PROJECTION);
// ofPushMatrix();
// ofLoadIdentityMatrix();
//
// ofMatrixMode(OF_MATRIX_MODELVIEW);
// ofPushMatrix();
//
// modelView = glm::translate(modelView, glm::vec3(-1,-1,0));
// modelView = glm::scale(modelView, glm::vec3(2/rViewport.width, 2/rViewport.height, 1));
// modelView = glm::translate(modelView, glm::vec3(dScreen.x, dScreen.y, 0));
// ofLoadMatrix(modelView);
//
// ofPopMatrix();
// //ofMatrixMode(OF_MATRIX_PROJECTION); //error redefinition
// ofPopMatrix();
// //ofMatrixMode(OF_MATRIX_MODELVIEW); //error redefinition
ofPushMatrix();
ofTranslate(randomPositions[0]);
hongdao.drawString("操",0, 0);
ofPopMatrix();
ofPushMatrix();
ofTranslate(randomPositions[1]);
hongdao.drawString("你", 0,0);
ofPopMatrix();
ofPushMatrix();
ofDrawBitmapString("hello", randomPositions[3]);
ofPopMatrix();
ofPushMatrix();
ofDrawBitmapString("welcome", randomPositions[4]);
ofPopMatrix();
cam.end();
}
```