ブロックを回転させると際に表示されているブロックの中心を原点にして回転させたいのですがどうすればいいのでしょうか?
4x4の配列にブロックがるので2x2を中心にブロックを回転させたいです。一次回転を使って最後にその分のCELを引いて原点をずらしているのですがどうすればいいのでしょうか?上手く実装出来ません。
参考サイト: http://www.geisya.or.jp/~mwm48961/kou2/linear_image3.html
cpp
1 2//描画アップデート 3void Game::GenerateOutput() 4{ 5 6 //画面クリア関係 7 glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 8 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 9 10 11 //ステージ 12 for (int y = 0; y < 11; y++) 13 { 14 for (int x = 0; x < 10; x++) 15 { 16 if (stage[y][x] == 1) { 17 DrawMap->DrawGraph(stage_pos.x + (CELL * x) , stage_pos.y + (-CELL * y)); 18 } 19 } 20 } 21 22 23 24 //ブロック表示 25 for (int i = 0; i < 4; i++) { 26 for (int j = 0; j < 4; j++) { 27 28 if (block[1][i][j] == 1) { 29 30 glm::ivec2 v; 31 v.x = (CELL * j); 32 v.y = -(CELL * i); 33 34 Set_rotate(&v, r); 35 36 sprite->DrawGraph(move_sprite.x + v.x, move_sprite.y + (v.y)); 37 38 //sprite->DrawGraph(move_sprite.x + v.x , move_sprite.y - v.y ); 39 } 40 } 41 } 42 43 44 45 46 47 //デバッグログ 48 char str[1000]; 49 sprintf_s(str, sizeof(str),"block x %d , y %d", move_sprite.x, move_sprite.y); 50 font->RenderText(str, -CELL * 7, -CELL * 2, 0.5, glm::vec3(1.0, 1.0, 1.0)); 51 52 sprintf_s(str, sizeof(str), "stage x %d , y %d", stage_pos.x, stage_pos.y); 53 font->RenderText(str, -CELL * 7, -CELL * 3, 0.5, glm::vec3(1.0, 1.0, 1.0)); 54 55 56 57 sprintf_s(str, sizeof(str), "R: %d", r); 58 font->RenderText(str, -CELL * 7, -CELL * 1, 0.5, glm::vec3(1.0, 1.0, 1.0)); 59 60 61 glViewport(0, 0, WIDTH, HEIGHT); //ビューポート 62 glfwSwapBuffers(Window); //ダブルバッファリング 63 glfwPollEvents(); //イベント処理 64 65 66} 67 68 69void Game::Set_rotate(glm::ivec2 *pos,const int R) 70{ 71 float posX = (float)pos->x; 72 float posY = (float)pos->y; 73 74 float r[4] = { 0 }; 75 76 r[0] = cos((PI / 2.0f) * R); 77 r[1] = sin((PI / 2.0f) * R); 78 79 r[2] = -sin((PI / 2.0f) * R); 80 r[3] = cos((PI / 2.0f) * R); 81 82 glm::imat2 m = glm::make_mat2(r); 83 84 float p[2]; 85 p[0] = posX; 86 p[1] = posY; 87 88 glm::ivec2 m2 = glm::make_vec2(p); 89 90 glm::ivec2 t = (m * m2); 91 92 pos->x = (int)t.x - CELL * 2; 93 pos->y = (int)t.y + CELL * 2; 94 95 // printf(" あああ: %d \n",pos->x); 96 97}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/13 09:22 編集
退会済みユーザー
2020/10/13 10:55
2020/10/13 11:05
退会済みユーザー
2020/10/13 11:09
2020/10/13 11:09
2020/10/13 11:12
退会済みユーザー
2020/10/13 11:18