提示画像ですがxpos,ypos
変数を0\,0
にすると画面の真ん中に表示されるのですがこれを画面の左上に描画させるには提示コードの////
コメント部の行をどのように変換したらいいのでしょうか?色々試しましたが実装出来ません。座標系は中央が(0,0)のopengl座標系です。
// ##################################### 描画 ##################################### void FrameWork::Text::Renderer(const glm::mat4 view,const glm::vec2 position, const FrameWork::CharacterTexture* character)const { glm::vec2 screenSize = glm::vec2(1.0f / windowContext->getSize().x, 1.0f / windowContext->getSize().y); if (character != NULL) { glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); glm::vec2 pos = position; pos.y = windowContext->getSize().y - position.y - character->pixelSize; //printf("%f\n", (pos.x * screenSize.x) + ((float)screenSize.x / 2.0f)); printf("%f\n",(pos.y * screenSize.y) - ((float)screenSize.y / 2.0f)); ////////////////////////////////////////////////////////////////////////////// float xpos = (pos.x * screenSize.x) + ((float)screenSize.x / 2.0f); float ypos = (pos.y * screenSize.y) - ((float)screenSize.y / 2.0f); ////////////////////////////////////////////////////////////////////////////// float w = (character->size.x * character->scale.x) * screenSize.x; float h = (character->size.y * character->scale.y) * screenSize.y; FrameWork::Text::vertex[0].position[0] = xpos; FrameWork::Text::vertex[0].position[1] = ypos + h; FrameWork::Text::vertex[0].uv[0] = 0.0f; FrameWork::Text::vertex[0].uv[1] = 0.0f; FrameWork::Text::vertex[1].position[0] = xpos; FrameWork::Text::vertex[1].position[1] = ypos; FrameWork::Text::vertex[1].uv[0] = 0.0f; FrameWork::Text::vertex[1].uv[1] = 1.0f; FrameWork::Text::vertex[2].position[0] = xpos + w; FrameWork::Text::vertex[2].position[1] = ypos; FrameWork::Text::vertex[2].uv[0] = 1.0f; FrameWork::Text::vertex[2].uv[1] = 1.0f; FrameWork::Text::vertex[3].position[0] = xpos; FrameWork::Text::vertex[3].position[1] = ypos + h; FrameWork::Text::vertex[3].uv[0] = 0.0f; FrameWork::Text::vertex[3].uv[1] = 0.0f; FrameWork::Text::vertex[4].position[0] = xpos + w; FrameWork::Text::vertex[4].position[1] = ypos; FrameWork::Text::vertex[4].uv[0] = 1.0f; FrameWork::Text::vertex[4].uv[1] = 1.0f; FrameWork::Text::vertex[5].position[0] = xpos + w; FrameWork::Text::vertex[5].position[1] = ypos + h; FrameWork::Text::vertex[5].uv[0] = 1.0f; FrameWork::Text::vertex[5].uv[1] = 0.0f; shader->setEnable(); glBufferSubData(GL_ARRAY_BUFFER, 0, vertex.size() * sizeof(FrameWork::VertexAttribute_Text), vertex.data()); shader->setUniformSampler2D("text",0,character->textureID); glActiveTexture(GL_TEXTURE0); shader->setUniform4f("uFragment", character->color); shader->setUniformMatrix4fv("uViewProjection", view); glDrawArrays(GL_TRIANGLES, 0, vertex.size()); //バインド解除 glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindTexture(GL_TEXTURE_2D, 0); shader->setDisable(); } else { std::cerr << "void FrameWork::D2::Text::Draw(glm::vec2 pos)const Error: character == NULL" << std::endl; assert(0); } }
https://teratail.com/questions/7wbzyheufgj6xl
この質問となにが/どこが違うのでしょう?
自分の過去の質問欄に出てこないためバグかと思ってもう一回質問してしまいました。削除しました。
回答2件
あなたの回答
tips
プレビュー