• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:OpenGLを使ったプログラムについて)

OpenGLを使った2次元ペイントソフトの開発方法とは?

このQ&Aのポイント
  • BorlandC++Builder4を使って、OpenGLを使った2次元ペイントソフトの開発を目指しています。
  • プログラムの機能はマウスを使った描画、消しゴムのような消去機能、指定範囲の切り取り&移動機能です。
  • 具体的なプログラムの骨子は、OpenGLPanelとTimerをForm上に配置し、マウスイベントで描画や消去を行います。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmb01
  • ベストアンサー率45% (63/138)
回答No.2

OpenGLでは特に設定をしない限り、 画面の右向きが+x方向、上向きが+y方向、奥向きが-z方向で、 それぞれ-1.0から1.0までの範囲が「見える」範囲になります。 ところがMouseMoveで渡されるX,Yは、例えばウィンドウサイズが640*480だと、 ウィンドウ内ではXが0から640なので、OpenGLの範囲にはまず入りません。 簡単なのはX,Yを-1.0から1.0に修正して使う方法で、 double x=(double)(X-center_x)/width; double y=(double)(center_y-Y)/width; としてglVertex*に渡す。 しかし、OpenGLでの「見える」範囲を変更するのは必ず必要になるので glOrtho, glPerspective, gluLookAt, glViewport 等についてはよく知っておく必要があるでしょう。 マウス移動時に線を引き続けることについては ダブルバッファをオフにして毎回、前回の位置から今回の位置まで線を引くか、 点の位置を全部覚えて、再描画のたびに全部描くかだと思います。 点を書くにはglBegin(GL_POINTS), glPointSize()があります。

kunimi923
質問者

補足

大変参考になりました。 実はOpenGLの様々な参考文献を見ていくと、サンプルプログラムなどで必ず線分の範囲が-1.0~1.0の範囲内でしたので、なぜそれ以上の値がないのだろうと考えていました。glVertex()を使ってただ四角形を表示するような簡単なプログラムを作っても、見えるようにするためにZ軸の座標を色々試してみないと表示されていることを確認できなかったのはこれが原因ですね。glPerspectiveで指定したらきちんと表示されるようになりました。 マウス移動時の線描画に関しても、指摘していただいた方法を試してみようと思います。 また分からないことがあれば聞かせていただきたいと思います。ありがとうございました。

その他の回答 (1)

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.1

3次元グラフィックを扱うソフトとペイントソフトはかなり毛色が違うと思います。 3次元だと線分や面を扱い、ペイントは点を扱うという感じですから。 二次元扱う場合でもCAD、ドロー系の線を扱うソフトの方が近いでしょう。 あと、OpenGLではペイントソフトは向きません。 基本的に線と面を扱うためのものなので、点を扱うのは不適切です。そもそも点を書く関数がなかったと思いますが。 わからないことですが、あまりに漠然としてて答え難いですね。どうにでもできるとか、いろいろあるとしか言えません。 もう少し自分が書きたいプログラムの内容を具体的に考えてみてください。

kunimi923
質問者

補足

現在すでに3次元に線を描くソフトが先輩方によって開発済でして、これに色々な機能を付け加えたり、場合によってはプログラム自体を書き直すための準備段階なんです。 ペイントソフトという言い方が悪かったのかもしれませんが、なんにせよ、もう少し勉強する必要がありそうですね。 ご指摘ありがとうございました。

関連するQ&A