提示コードのDrawRotate();関数の//Transform部ですがなぜ矩形が0,0の場所にぴったり描画されないのでしょうか?OpenGLでは画面の真ん中が0,0なので画像の半分のサイズを足してるのですが原因がどうしてもわかりません。なぜ画像の位置がずれてしまうのでしょか?回転は真ん中を中心に行っています
cpp
1 2 3//回転描画 4void Rectangle::DrawRotate(glm::vec2 start, glm::vec2 end,float angle, glm::vec4 color) 5{ 6 if (isDefaultShader == true) { 7 setEnable(); 8 } 9 10 setVertexALLColor(color); //頂点カラーを再設定 11 12 glBindVertexArray(vao); 13 14 //頂点カラー 15 GLint attrib = getAttribLocation("vertexColor"); 16 glEnableVertexAttribArray(attrib); 17 glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexColor), rectangleVertex, GL_STATIC_DRAW); 18 glVertexAttribPointer(attrib, 4, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 2)); 19 setBindAttribFragment("vertexColor"); 20 21 //Transform 22 //回転 23 setSizeScale(glm::vec2((end.x - start.x) , (end.y - start.y))); //サイズ 24 setRotate(angle); 25 setScale(glm::vec2(getSizeScale().x, getSizeScale().y)); //スケール 26 setTranslate(glm::vec3(start.x + (getSizeScale().x / 2.0f), start.y + (getSizeScale().y / 2.0f, 0.0f))); //平行移動 27 28 29 //Uniform 30 setUniformMatrix4fv("uTranslate", translate); 31 setUniformMatrix4fv("uRotate", rotate); 32 setUniformMatrix4fv("uScale", scale); 33 setUniformMatrix4fv("uViewProjection", glm::ortho(0.0f, windowContext->getSize().x, windowContext->getSize().y, 0.0f, -1.0f, 1.0f)); 34 35 glDrawArrays(GL_TRIANGLES, 0, 6); 36 glBindVertexArray(0); 37 38 39 if (isDefaultShader == true) { 40 setDisable(); 41 } 42} 43 44
cpp
1#include "Transform_2D.hpp" 2#include "Actor.hpp" 3 4// ###################### コンストラクタ ###################### 5Transform_2D::Transform_2D() 6{ 7 size = glm::vec2(0,0); 8 9 //行列を初期化 10 scale = glm::scale(glm::mat4(1), glm::vec3(0.0f,0.0f,0.0f)); 11 rotate = glm::rotate(0.0f,glm::vec3(0.0, 0.0, 1.0)); 12 translate = glm::translate(glm::mat4(1), glm::vec3(0.0f,0.0f,0.0f)); 13} 14 15// ###################### メンバ関数 ###################### 16 17//スケール 18void Transform_2D::setScale(glm::vec2 s) 19{ 20 scale = glm::scale(glm::mat4(1), glm::vec3(s.x,s.y,0.0f) + glm::vec3(size.x,size.y,0.0f)); 21} 22 23//回転 24void Transform_2D::setRotate(float a) 25{ 26 glm::mat4 m = glm::translate(translate, glm::vec3(size.x * 0.5f, size.y * 0.5f, 0)); //平行移動 27 rotate = glm::rotate(m, a, glm::vec3(0.0,0.0,1.0)); //回転 28 m = glm::translate(translate, glm::vec3(-size.x * 0.5f, -size.y * 0.5f, 0)); //平行移動 29 rotate = glm::rotate(m, a, glm::vec3(0.0, 0.0, 1.0)); //回転 30} 31 32//平行移動 33void Transform_2D::setTranslate(glm::vec3 t) 34{ 35 translate = glm::translate(glm::mat4(1), t); 36} 37 38//画像サイズを設定 39void Transform_2D::setSizeScale(glm::vec2 s) 40{ 41 size = s; 42 scale = glm::scale(glm::mat4(1), glm::vec3(s.x, s.y, 0.0f)); 43} 44 45//画像サイズを設定 46glm::vec2 Transform_2D::getSizeScale() 47{ 48 return size; 49 50} 51 52// ###################### デストラクタ ###################### 53Transform_2D::~Transform_2D() 54{ 55 56} 57
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。