質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2273閲覧

glRectfを使って矩形を中心を中心に回転させいたい。

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/06/23 11:30

編集2021/06/24 07:17

提示コードなのですが参考サイトの回答を参考にプログラムしたいのですが回転する角度に数値20を入れると画面に表示されなくなります。これは一体何をしたのでしょうか?原因が知りたいです。

#試したこと
getWindowContext()->getSize()関数の実装には問題がないです。確認しました。
glMatrixMode,glPushMatrix,glTranlated,glRotate,関数をコメントアウトすると矩形が正常に描画されます。
回転角度rに0,20,45,90と入力すると表示されなくなり180と表示すると提示画像のうに表示されます。
回転の順序の間違いをglTranslated,glRotated関数を逆しました。
glRectfではなくglVetrex2f関数を使ってみした。

#やりたいこと
矩形の中心を中心に回転させたい

イメージ説明
参考サイト(リファレンス): https://docs.microsoft.com/ja-jp/windows/win32/opengl/glrectf
参考サイト: https://teratail.com/questions/345582

cpp

1 // ##################################### 矩形 描画 ##################################### 2 void DrawRectangle(glm::vec2 start, glm::vec2 end,float r, glm::vec4 color) 3 { 4 glColor4f(color.x * RGBA_COLOR, color.y * RGBA_COLOR, color.z * RGBA_COLOR, color.w * RGBA_COLOR); 5 6 float dx = 1.0f / (FrameWork::getWindowContext()->getSize().x / 2); 7 float dy = 1.0f / (FrameWork::getWindowContext()->getSize().y / 2); 8 9 glm::vec2 pos; 10 pos.x = start.x * dx -1.0f; 11 pos.y = 1.0f - start.y * dy; 12 glm::vec2 posA; 13 glm::vec2 posB; 14 posA.x = start.x * dx - 1.0f; 15 posA.y = 1.0f - start.y * dy; 16 posB.x = end.x * dx - 1.0f; 17 posB.y = 1.0f - end.y * dy; 18 19 glMatrixMode(GL_MODELVIEW); 20 glPushMatrix(); 21 glTranslated(pos.x, pos.y, 0); 22 glRotated(r, 0, 0, -1); 23 24 glRectf(posA.x,posA.y, posB.x, posB.y); 25 26 27 glFinish(); 28 glPopMatrix(); 29 } 30

cpp

1 2 // ##################################### スクリーン座標を取得 ##################################### 3 glm::vec2 getWindowPosition(glm::vec2 pos) 4 { 5 float dx = 1.0f / (FrameWork::getWindowContext()->getSize().x / 2); 6 float dy = 1.0f / (FrameWork::getWindowContext()->getSize().y / 2); 7 8 pos.x = ((pos.x * dx) - 1.0f); 9 pos.y = (1.0f - (pos.y * dy)); 10 11 return pos; 12 } 13

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/24 03:51

> 回転の順序の間違いを疑い順序あれこれ触りました。 「あれこれ触りました」ではわかりません、試した内容を追記してください。
退会済みユーザー

退会済みユーザー

2021/06/24 06:34

文章を修正しました。
退会済みユーザー

退会済みユーザー

2021/06/24 06:58

すいません、言葉が足りなかったようなので改めて。 試した内容とは、「何を試したのか」、「どうなることを期待したのか」、「結果はどうだったのか」を書いてください。 よくわからないけど入れ替えてみた、結果はよくわからないとかであれば、 何も試していないのとほぼかわらないから書かなくてもいいと思います。 > 回転する角度に数値20を入れると画面に表示されなくなります。 これは20以外も試して、20の時だけ起こるということでしょうか。 それともたまたま20を入れたら表示されなくなったということでしょうか。
退会済みユーザー

退会済みユーザー

2021/06/24 07:21

> glRotated(r, 0, 0, -1); ほかの質問では「1」だっと思いますが、この「-1」は何を意図して入れているのでしょうか。 「glRotated()」自体を特に調べてもいないので、的外れでしたらすみません。
fana

2021/06/24 08:04

(回転方向を逆向きに指定したくなっただけかと)
guest

回答2

0

ベストアンサー

「回転させると正方形が長方形になっちゃう」という話について回答


OpenGLのルールとしては,(ここではビューポートがクライアント領域全体だから)
「クリッピング座標系の -1~1 の範囲を,ウィンドウのクライアント領域全体に表示するよ」
という話だよね.

だから,例えば,クライアント領域のサイズが 横200縦100[pixel] だとしたら,
クリッピング座標系でX,Yが共に -1~1 の正方形な範囲を,200
100[pixel]という横長な長方形の形に伸縮するという話になるわけ.

…ということは,
最終的に表示される形状がこの伸縮によって歪んでほしくない(正方形を描画したいのに長方形とかになってほしくない)ならば,
この伸縮の結果がまともな形になるようにクリッピング座標系での座標を指定すればいいってことになるよね.
この200*100の例であれば,クリッピング座標系では横方向を1/2に潰した形状にしておけば,最終的にうまい形に伸縮されるわけだ.

という感じで,最終的にうまい形になるようなクリッピング座標系にpixel座標系から変換する処理を書けばいいよ.


さて,回答としては上記だけでも十分だと思うけど,
「最終的な伸縮でうまくいくような座標に変換する」ってところがちょっと難しいかもしれないから,
ここでは考えやすいように,

pixel座標系 → クリッピング座標系(形状はいい感じに潰しておく必要がある)

という変換を,

pixel座標系 → 何か考えやすい中間の座標系(形状はそのまま.潰れてない) →(潰す)→ クリッピング座標系(形状はいい感じに潰しておく必要がある)

として,間に1つ座標系を挟んでみる話をするよ.
この座標系の名前を,ここでは便宜上「おCAT座標系」とか呼ぼうか.

このようにすると,
必要な回転とか並進とかは全てこの「おCAT座標系」の上で行ってやり,その結果を最後に一発潰してクリッピング座標系に変換すればいいって話になる.

「最後に一発潰す」のところは,こう書けるよね.

glScalef( 0.5f, 1, 1 ); //X座標を半分に潰す {//このブロックの中は「おCAT座標系」 glTranslatef( ... ); //おCAT座標系での並進 glRotatedf( ... ); //おCAT座標系での回転 glRectf( ... ); //おCAT座標系での座標 }

だからあとは,pixel座標系からおCAT座標系への変換があればいい.

最終的にクライアント領域に表示されることになるおCAT座標系の範囲というのはどこからどこまでかな?
というのを考えれば,
この例ではX方向を半分に潰した結果が -1~1 になる範囲なんだから,「X方向が -2~2,Y方向が -1~1」という長方形な範囲だ.
この範囲に 200*100[pixel] な範囲がすっぽりはまるような変換をしてやることは問題ないよね.
(元々あなたがやっていた,pixel座標をクリッピング座標に変換する計算と話は全く一緒.倍率とオフセット量を考えればいいよ)

…と言う話のサンプルコードを以下に示すよ.
おCAT座標系での値は,そうだとわかるように変数名の末尾を _oc としている.
ウィンドウのサイズが変更された際に,上記の計算をして,glRectf()とかに渡す値を求めてるようにしてある.

あと,このコードでは,上下方向の反転も glScalef で行う形にしてある.
つまり,pixelの世界とおCAT座標系では上下の向き(Y軸の正の方向)は揃っていて,クリッピング座標系だけがそれらとは逆という形で考えてる.

C++

1namespace 2{ 3 //値がクライアント領域のサイズ次第である変数群の再計算が必要なことを示すフラグ 4 bool NeedToRecalc_Flag = true; 5 6 //ウィンドウサイズ変化時のコールバック 7 void OnWndSizeChanged( GLFWwindow *const pWnd, int w, int h ) 8 { 9 NeedToRecalc_Flag = true; //フラグを立てておく 10 glViewport( 0,0, w,h ); 11 } 12} 13 14int main() 15{ 16 GLFWwindow *pWindow = nullptr; 17 {//GLFW ウィンドウ準備 18 if( !(pWindow = glfwCreateWindow( 640, 480, "GLFW", NULL, NULL )) )return 1; //ウィンドウ生成 19 glfwMakeContextCurrent( pWindow ); //ウィンドウをGLの処理対象にする 20 glfwSetWindowSizeCallback( pWindow, OnWndSizeChanged ); //callback設定 21 } 22 23 //設定.てきとーに. 24 glfwSwapInterval(1); //垂直同期信号待ちの設定っぽい 25 glClearColor( 0.1f, 0.2f, 0.4f, 0.0f ); 26 glMatrixMode( GL_MODELVIEW ); 27 glColor3d( 1,0,0 ); //Rectの描画色 28 29 //描画したいRect の2頂点 [pixel] 30 const glm::vec2 V1{ 100, 70 }; 31 const glm::vec2 V2 = V1 + glm::vec2{ 100,100 }; 32 33 //ウィンドウクライアント領域のサイズに合わせて計算する必要がある変数群 34 //※初期値には特に意味はない 35 float AspectRatio = 1.0; //ウィンドウクライアント領域の縦横比(W/H) 36 glm::vec2 C_oc{0,0}; //Rectの中心 37 glm::vec2 RectHalfSize_oc{1,1}; //Rectの(縦横半分の)サイズ 38 39 //メインループ 40 double rotate_angle = 0; //Rectの回転角度[deg] 41 while( glfwWindowShouldClose( pWindow ) == 0 ) 42 { 43 //(ESCキーで終了) 44 if( glfwGetKey( pWindow, GLFW_KEY_ESCAPE ) == GLFW_PRESS ){ glfwDestroyWindow( pWindow ); break; } 45 46 //回転角度の変更用キー処理 47 if( glfwGetKey( pWindow, GLFW_KEY_A ) == GLFW_PRESS ){ rotate_angle -= 1.0; } 48 if( glfwGetKey( pWindow, GLFW_KEY_S ) == GLFW_PRESS ){ rotate_angle += 1.0; } 49 if( glfwGetKey( pWindow, GLFW_KEY_D ) == GLFW_PRESS ){ rotate_angle = 0; } 50 51 //ウィンドウサイズが変わったら必要な計算をする 52 if( NeedToRecalc_Flag ) 53 { 54 NeedToRecalc_Flag = false; //フラグを下す 55 56 int WndW, WndH; 57 glfwGetWindowSize( pWindow, &WndW, &WndH ); 58 AspectRatio = WndW / (float)WndH; 59 60 const float CvtRate = 2.0f / WndH; 61 const glm::vec2 CvtOffset{ -AspectRatio, -1.0f }; 62 63 const glm::vec2 V1_oc = V1*CvtRate + CvtOffset; 64 const glm::vec2 V2_oc = V2*CvtRate + CvtOffset; 65 66 C_oc = ( V1_oc + V2_oc ) * 0.5f; 67 RectHalfSize_oc = glm::abs( V1_oc - V2_oc ) * 0.5f; 68 } 69 70 // 71 //draw 72 // 73 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); 74 glLoadIdentity(); 75 76 glScalef( (1.0f / AspectRatio), -1, 1 ); //おCAT座標系 から クリッピング座標系 への変換 77 {//この中は おCAT座標系 78 glTranslatef( C_oc.x, C_oc.y, 0 ); 79 glRotated( rotate_angle, 0,0,1 ); 80 glRectf( -RectHalfSize_oc.x, -RectHalfSize_oc.y, RectHalfSize_oc.x, RectHalfSize_oc.y ); 81 } 82 83 glfwSwapBuffers( pWindow ); 84 glfwWaitEvents(); 85 } 86 87 return 0; 88}

[追記]

動作結果のスクリーンショット画像を示す.
これは実行後にウィンドウをかなり小さくした状態のスクリーンショットである.
矩形を回転させても,ウィンドウ座標を変更しても

  • 矩形の中心は常に(150,120)あたりにある
  • 矩形の1辺は100[pixel]くらいになってる

イメージ説明

投稿2021/06/25 03:44

編集2021/06/28 06:54
fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/06/25 04:12

MEMO: この回答は,別の回答(投稿 2021/06/24 16:53)のコメント欄での話から派生したもの.
退会済みユーザー

退会済みユーザー

2021/06/25 04:26

なるほどわかりました。 glLoadIdentity();関数がこの関数を抜けたあとも影響が残っており次に来る 点描画の関数にも影響されてしまい。描画できません。この関数はどうやって終了するのでしょうか?
fana

2021/06/25 04:34

そこはあなたのコード特有の話でしょうから,ここで続けられても困る. MODEL_VIEWマトリクスは全体で1個しかないのだから,その状態を適切に管理するのはあなたの役目だ. glLoadIdentity()をどこで実施するべきかを考えねばならないだろうし, 「ローカルな」変換を施す場合には,glPushMatrix() と glPopMatrix() を使って影響範囲を制御する等,適切にやってください,としか.
fana

2021/06/25 04:37

この回答の内容を一言で言うならば, 「pixelにこだわるなら,ビューポート変換のことも考えないといかんよね」となるかな.
退会済みユーザー

退会済みユーザー

2021/06/25 05:54

なるほど。回答コードの  C_oc = ( V1_oc + V2_oc ) * 0.5f; 部ですがこれは図形の中心指定して描画座標を指定していますが自分は提示コードの引数startの座標に描画したいのですが値を色々変更しましたがわかりません、どうすればいいのでしょうか?
fana

2021/06/25 06:04

> startの座標に描画したい の意味がいまいち謎ですが, > 色々変更 ではなくて,所望の動作になるためにはどのような順でどのような演算をせねばならないのか? というのを(この回答のように)筋道立てて考えて,その通りにやってください. どうしてもその話を質問せねばならないのであれば,別途質問してください. なお,その場合,「あなたの考えた理屈」をこの回答くらいに詳細に具体的に説明する必要があるでしょう. (動かないコードの断片だけ示しても,読む側には,実装しようとしている処理内容を推測することはできませんから)
退会済みユーザー

退会済みユーザー

2021/06/28 05:40 編集

回答コードのglScalef( (1.0f / AspectRatio), -1, 1 )部ですがシェーダを使った矩形描画と比較すると表示される矩形のサイズが小さくなるのですが回答コードの間違えでしょうか?いろいろ試しまたがわかりません。
fana

2021/06/28 06:20

> シェーダを使った矩形描画 ってのが何なのかさっぱり不明なので,こっちには何の話なのかもわかりません. この回答コードを動作させてみれば,ウィンドウのサイズを変えても常に矩形の描画結果のサイズは100x100[pixel]を保つはずです. また,矩形の描画位置も保たれるはずです. 私はこの2点が求められている動作であろう,と思い回答しています. それがあなたの所望の動作と異なるというのであれば,その意味では「間違え」と言えるかもしれません. (BAの取り消しって通知が来ないのね)
退会済みユーザー

退会済みユーザー

2021/06/28 06:32 編集

vao,vboを使った描画と比較すると矩形のサイズが変わるのですが何か回答のコードは間違えて居るのでしょうか?という質問です。https://imgur.com/a/8NwEttB
fana

2021/06/28 06:55 編集

いやだから,あなたがどこぞで > vao,vboを使った描画 をしていようが,そんなことはこっちは知らんわけで. そのシェーダでの描画結果というのは所望の動作をしているんですか? 100x100[pixel]での表示になって欲しい,という指定に対して,100x100[pixel]の描画結果になるんですか? 至極単純に考えれば,所望の動作にならない側が間違っているんじゃないですか? (あるいは両方ともあなたの所望の動作を達成しない可能性だってある) そこをあなた自身で確認してください. 少なくとも私の書いたコードは私の環境においては前述のような動作結果になっています. あなたの環境ではそうならないということですか? (回答コードの実行結果のスクショを回答に追加.)
fana

2021/06/28 07:06 編集

スクショに示した通り,私のコードでは赤い矩形が描画されています. あなたの示した画像では赤い矩形は描かれていないので,私のコードそのものを動作させているわけではないのだと見えます. まずは一切の変更なしに,この回答コードを動作させてみてください. その結果がすでにおかしいというのであれば,(その原因はもう私にはわかりませんが)私の回答ではダメなのでしょう. ↓ 私はまともに動くつもりのコードを提示しているので,これがダメな場合には,私には「これ以上はわかりません」ということになるので,どうにかして誰かわかる人に聞いてください,としか言えないです. (その場合,答えがわかったならば,ここにフィードバックしてもらえるとありがたい)
退会済みユーザー

退会済みユーザー

2021/06/28 08:45

自分のミスでした。 しかしopenglが実行出来なかったためそこは自分で書き換えました。原因としては if (glfwInit() == GL_FALSE) { std::cerr << "glfw初期化失敗。" << std::endl; return false; } が抜けているためだと思われます。こちらの環境での話ですが。
fana

2021/06/28 09:15

「論拠無しで」お前のコードは間違ってねぇか? とか言わないようにね. 回答も間違うことは普通にあるのだけども, 回答側はそれが正しいと思って(思い込んで)書いているのだから, ただ「それ間違ってないか?」とだけ問われても困るわけで. 回答コードが怪しいならばその論拠をあなたが示しつつ間違いを指摘するようでないと,話が進ないです. (あと,相手が悪いと怒らせることにもなりそうな気がするし.)
guest

0

別の質問の回答に書いた話を理解してください
描画するものが楕円だろうが線だろうが矩形だろうが,理屈は全く同じ話なのだから.

以前の回答の内容の繰り返しになりますが,

「矩形の中心」を glRatated() で行う回転の中心にしたいのならば,
コード上で glRateted()の下に書く座標というのは,「矩形の中心が(0,0)である座標系での値」にしないといけないよね.

っていう話.

glRotated( ... ); /* ここに書く座標値というのは回転中心を(0,0)とした世界の値で書くんだよね */

つまり,

void DrawRectangle(glm::vec2 start, glm::vec2 end,float r, glm::vec4 color)

の引数 start, end で示された位置を 矩形中心を(0,0)とした座標系で読み直した座標値 を求めて,それを glRectf() に渡さないといかん.


そういう話を実装しているのであれば,あなたの関数 DrawRectangle() の中には,
「矩形の中心」というデータを算出なり何なりするような処理が書かれることになると思うのね.
なのに,提示コードにはそれらしき記述が見当たらないのですよね.

投稿2021/06/24 07:53

編集2021/06/24 07:55
fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/06/24 08:00

あえて別の表現をすれば, glRotated( ... ); の意味は, 「これ以降に glXXX() で指定する全ての座標値を (0,0)を回転中心として回転せよ」だ.
fana

2021/06/24 08:09

(「理解しない」ことを芸風としているのだと知っているのに 「理解して」という回答を付ける矛盾)
退会済みユーザー

退会済みユーザー

2021/06/24 08:10

なるほどありがとうざいます。以下のようにして実装出来たのですがなぜか90度に回転すると正方形が長方形になるのですがこれは一体なぜなのでしょうか? { // ##################################### 矩形 描画 ##################################### void DrawRectangle(glm::vec2 start, glm::vec2 end,float r, glm::vec4 color) { glColor4f(color.x * RGBA_COLOR, color.y * RGBA_COLOR, color.z * RGBA_COLOR, color.w * RGBA_COLOR); glm::vec2 pos = getWindowPosition(start); glm::vec2 posA; glm::vec2 posB; posA.x = -((getWindowPosition(end).x - getWindowPosition(start).x ) / 2.0f); posA.y = ((getWindowPosition(end).y - getWindowPosition(start).y) / 2.0f); posB.x = +((getWindowPosition(end).x - getWindowPosition(start).x) / 2.0f); posB.y = -((getWindowPosition(end).y - getWindowPosition(start).y) / 2.0f); glPushMatrix(); glMatrixMode(GL_MODELVIEW); glTranslated(pos.x, pos.y, 0); glRotated(r, 0, 0, 1); glRectf(posA.x,posA.y, posB.x, posB.y); glFinish(); glPopMatrix(); }
fana

2021/06/24 08:48

0度なら正方形ですか? 30度でも正方形ですか? 90度だけ長方形なのですか?
fana

2021/06/24 08:57

角度を 0→90 に大きくしていくにつれて形が正方形でなくなっていく,という話なのであれば > float dx = 1.0f / (FrameWork::getWindowContext()->getSize().x / 2); > float dy = 1.0f / (FrameWork::getWindowContext()->getSize().y / 2); この2つの値が異なることが原因でしょう.
fana

2021/06/24 09:18

例えば,ウィンドウのクライアント領域のサイズが 640*480[pixel] のとき, このdx,dyを用いた演算だと, ・x方向では 320[pixel]の長さが 1 になり, ・y方向では 240[pixel]の長さが 1 になる. 逆に言えば, ・回転や並進を考えている世界でのX方向の長さ1は,320[pixel]の長さとして表示され, ・回転や並進を考えている世界でのY方向の長さ1は,240[pixel]の長さとして表示される わけだ. だから, x方向に320[pixel]だったもの → 変換結果が「X方向に1」になる → この世界で90度回したら「Y方向に1」になる → これは表示上,240[pxiel] になっちゃう ということになるから,回すと表示結果がひずむわけだね.
退会済みユーザー

退会済みユーザー

2021/06/24 09:21

なるほどではクライアントサイスを同じすればいいのでしょうか?
fana

2021/06/24 09:25 編集

「クライアント領域のサイズを正方形に限定する」というのは1つのわかりやすい解ではある. ウィンドウの大きさを自由にしたい場合は,像がひずまないようにこのdxとdyは同じ値にそろえる (ウィンドウがリサイズされた際にアスペクト比がどうのとかいうことを考える)んだけど, そうすると,現状で暗黙的に -1~1 だとしている「見える範囲」が変わることになるから, まぁ,ちょっとだけ面倒になる.
fana

2021/06/24 09:34

関係ないけど > glTranslated(pos.x, pos.y, 0); これだと,所望の位置に行かないんじゃない? glm::vec2 pos = getWindowPosition( start と end の中間 ); とかして矩形の中心にしないと.
退会済みユーザー

退会済みユーザー

2021/06/24 10:15

> ウィンドウの大きさを自由にしたい場合は,像がひずまないようにこのdxとdyは同じ値にそろえる (ウィンドウがリサイズされた際にアスペクト比がどうのとかいうことを考える)んだけど, そうすると,現状で暗黙的に -1~1 だとしている「見える範囲」が変わることになるから, まぁ,ちょっとだけ面倒になる. の部分が知りたいのですがつまり何をする必要があるのでしょうか?
退会済みユーザー

退会済みユーザー

2021/06/24 10:16

クライアントサイズを正方形だと考えてdx の値をのみを使っいました。形は同じですが(100,100),(200,200)とした場合に長方形になってしまうのでやりたいことと違います。
fana

2021/06/25 01:01

最後の最後に「正方形」になるためには途中の計算をどういう形にすればよいのか? というのを考えてみては.
退会済みユーザー

退会済みユーザー

2021/06/25 02:11

以下ようにスケールを加えて見たのですが正方形は描画されるのですが大きさ極端に小さいのですがこれはなぜなのでしょうか? glPushMatrix(); glMatrixMode(GL_MODELVIEW); glTranslated(pos.x, pos.y, 0); //平行移動 glScaled((dx * end.x - dx * start.x), (dy * end.y - dy * start.y), 0); //スケール glRotated(r, 0, 0, 1); //回転 glRectf(posA.x,posA.y, posB.x, posB.y);
fana

2021/06/25 03:45

この「像が歪む」ことの話については,別の回答に分けて書いた. > glScaled((dx * end.x - dx * start.x), (dy * end.y - dy * start.y), 0); //スケール っていうのがどういう考えの結果のものなのか,私にはわからない.
fana

2021/06/25 04:37 編集

(コメントする場所を間違えたので削除)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問