提示コードですが下記のようなfontSize値のマス目にピッタリ一文字を表示させたいのですがQ
,Z
などといった文字がマス目からはみ出てしまいます。これはどうしたらぴったりはめられるのでしょうか?
試したこと
参考サイトの書きのコードを入力しましたが出来ません。
決め打ちでピクセルをずらしましたがうまくできません。
参考サイトコード[ float ypos = y - (ch.Size.y - ch.Bearing.y); ]
参考サイト: https://learnopengl.com/In-Practice/Text-Rendering
Text
cpp
1 2// ##################################### テクスチャ 設定 ##################################### 3void FrameWork::D2::Text::setTexture(const std::vector<wchar_t>& wc, std::vector<Character>& text) 4{ 5 text.clear(); 6 //FT_Face face = LoadFont("font/PressStart2P.ttf"); 7 FT_Face face = LoadFont("font/SourceHanCodeJP.ttc"); 8 9 size = glm::ivec2(0,0); //サイズ 10 11 for (std::vector<wchar_t>::const_iterator itr = wc.begin(); itr != wc.end(); itr++) 12 { 13 14 FT_Error err = FT_Set_Pixel_Sizes(face, 0, pixelSize); 15 if( err != 0) 16 { 17 std::cerr<< "Error: FT_Set_Pixel_Sizes: " << err <<std::endl; 18 assert(0); 19 20 } 21 22 err = FT_Load_Glyph(face, FT_Get_Char_Index(face, *itr), FT_LOAD_RENDER); 23 if(err != 0) 24 { 25 std::cerr<< "Error: FT_Load_Glyph: " <<err<<std::endl; 26 assert(0); 27 28 } 29 30 Character ch = 31 { 32 0, 33 glm::lowp_u8vec2(face->glyph->bitmap.width, face->glyph->bitmap.rows), 34 glm::lowp_u8vec2(face->glyph->bitmap_left, face->glyph->bitmap_top), 35 (unsigned short)face->glyph->advance.x, 36 *itr, 37 }; 38 39 40 size.x = face->glyph->bitmap.width; 41 size.y = face->glyph->bitmap.rows; 42 bearing.x = face->glyph->bitmap_left; 43 bearing.y = face->glyph->bitmap_top; 44 45 46 47 glGenTextures(1, &ch.textureID); 48 glBindTexture(GL_TEXTURE_2D, ch.textureID); 49 glActiveTexture(GL_TEXTURE0); 50 //glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 51 glTexImage2D 52 ( 53 GL_TEXTURE_2D, 54 0, 55 GL_RED, 56 face->glyph->bitmap.width, 57 face->glyph->bitmap.rows, 58 0, 59 GL_RED, 60 GL_UNSIGNED_BYTE, 61 face->glyph->bitmap.buffer 62 ); 63 64 //テクスチャタイプを設定 65 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 66 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 67 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 68 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 69 70 glBindTexture(GL_TEXTURE_2D,0); 71 text.push_back(ch); 72 } 73 74 size.x -= pixelSize; 75} 76 77
Draw
#include "Character.hpp" Character::Character() { text = std::make_shared<FrameWork::D2::Text>(); color = FrameWork::GetGlColor(glm::vec4(255,255,255,255)); fontSize = 25; position = glm::vec2(0,0); } void Character::setColor(glm::vec4 co) { color = co; } void Character::setCharacter(std::string str) { character = str; text->setString(fontSize, color, character.c_str()); } void Character::setFontSize(int size) { fontSize = size; } void Character::setPosition(glm::vec2 pos) { position = pos; } void Character::setTexture() { text->setString(fontSize,color,character.c_str()); } void Character::Update() { position.y = position.y + text->getSize().y + text->getBearing().y; } void Character::Renderer()const { text->Draw(position); } Character::~Character() { }
あなたの回答
tips
プレビュー