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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenGL

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

Q&A

2回答

603閲覧

OpenGLでの図形の変形、連動

okawari

総合スコア4

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenGL

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

0グッド

0クリップ

投稿2020/08/18 09:51

前提・実現したいこと

プログラミング初心者です。
現在タイリングを簡単に作ることのできるシステムを作っています。
下の写真のようなシステムをC言語とOpenGL使い作ろうとしています。
イメージ説明

発生している問題

C言語、OpenGLを使い、このシステムを作ろうとしていますが、
まず、ウィンドウ左側の長方形を変形すると右側の長方形もすべて変形するようにするためにはどのような考え方をすればよいのでしょうか。
また、左の長方形の辺をクリックするとその辺を変形できるようにしたいのですが、どのようにすればできますか。

また、現在はC言語、OpenGLを使い作ろうとしていますが、他に簡単にこのシステムを作れそうな言語などがあった場合教えてくださると助かります。

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

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

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

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

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

guest

回答2

0

「上の辺」と「下の辺」は同じデータ(左右反転しているだけ)みたいですから,
データとしては

  1. (上か下の)どちらか一方の辺のデータ
  2. 上と下との間の距離を決める値が1個

があれば図形を表すことができるように思います.

上記1.に関して,ユーザの操作によって制御点を追加したり削除したりすること(もちろん上下移動させることも)ができればよいだけではないでしょうか.
制御点間を単純に直線で結ぶ(:要は,「上(下)の辺」を折れ線として表現する)のか,制御点の座標から補間なりして曲線的な形を表現するのか… そこらへんは自由にやればよいかと.

OpenGLだ何だという話は,ユーザ操作と表示処理のための実装が簡単になるような好きな物を使えばよいでしょう.
(個人的にはOpenCVとかの方が簡単に済みそうですが,質問者がOpenGLに慣れているならそっちの方が早いでしょう)

投稿2020/08/20 10:12

編集2020/08/20 10:14
fana

総合スコア11708

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

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

0

どちらかと言えばC(言語)やグラフィックス(OpenGL)の話ではなく、アルゴリズムやデータ構造、そしてUIの話になるような気がします。
ともあれ考えてみましょう。あくまで例なので参考程度に。

まずは上端・下端データの持ち方。
1枚のタイルのサイズは小さい(横幅が数十から数百ピクセル程度)と仮定するなら、上下どちらかの辺のオフセット値(元位置からの「ずれ」)を左から右へ数十、数百ピクセル分保持すれば、下辺はそれを左右逆に扱うだけですね。

これで幅数十ピクセルの場合はUIはドット絵エディタのようにマス目にして、選択した場所までその縦列のオフセットをズラせば済みます。
上下どちらを修正したのかの判定が要るので、そこは切り替えスイッチなり現在値に近い方を選ぶなり考えましょう。

数百ピクセルの場合、数百個の点を綺麗に切るのが難しくなるので線や丸の形に変更するツールが欲しくなりますね。

投稿2020/08/18 12:46

kagilinn

総合スコア354

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

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

okawari

2020/08/18 20:23

kagilinnさん、回答本当にありがとうございます。 返信が遅くなり申し訳ございません。 具体的なアルゴリズムを提案してくださり、ありがとうございます。 私がプログラミング初心者ということもあり非常に助かりました。 //長方形の座標 GLdouble vertex[][2]={ {0.0, 0.0}, {2.0, 0.0}, {2.0, 1.0}, {0.0, 1.0} } //間省略 glBegin(GL_LINES); for (i = 0; i < 4; ++i) { glVertex2dv(vertex[i]); } glEnd(); glFlush(); このようにまず長方形を描画する予定なのですが、 まず、上端を変更する場合、どのようにコード上では表現するのでしょうか。 //もし上端がクリックされ、{1.5, 1.2},{0.5, 0.6}に点が打たれそれを直線で結ぶ場合 GLdouble vertex[][2]={ {0.0, 0.0}, {2.0, 0.0}, {2.0, 1.0}, {1.5, 1.2},{0.5, 0.6}, {0.0, 1.0} } まず、このようにすることは考えることはできるのですが、それを実際にコードに表すこと、 そして下端を変更するために、頭の中では下端は  {0.0, 0.0}, {2.0, 0.0}  を結んだ辺ですので、 {0.0, 0.0},{0.5, -0.2}, {1.5, 0.4}, {2.0, 0.0}  になることは考えられるのですが、どのようにして上端や下端の辺を構成している点を判別できるのかが分かりません。 拙い文で申し訳ございませんがよろしくお願いいたします。
kagilinn

2020/08/19 00:57

わざわざ頂点を弄らずに, 縦にタイルが3枚入るくらいの長方形を作り, タイルの形はテクスチャの透明色で表現したらどうでしょうか.
okawari

2020/08/20 09:17

返信遅れて申し訳ありません。 返信ありがとうございます。 質問なのですが、 縦にタイルが3枚入るくらいの長方形を作り, タイルの形はテクスチャの透明色で表現したらどうでしょうか という部分の理解ができなかったのですがどういうことでしょうか。 .
kagilinn

2020/08/20 09:48

タイル縦3枚分の大きさのポリゴン板に、以下のようなテクスチャを貼るって意味です。 ・上部3分の1: 透明 ・中央部3分の1: タイルの色or模様 ・下部3分の1: 透明 で、操作で透明部分の形を変える感じです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問