• ベストアンサー

OpenGLでプログラミングをお願いします。

OpenGLでプログラミングをお願いします。 単刀直入に申し上げます。 画像のようなものができるよう プログラミングを代わりにお願いします。 最初に正解をプログラミングを組んで いただいた方にポイントを渡そうと思いますm(__)m

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

  • ベストアンサー
  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.1

だんごの描画プログラムの質問を見たものです。 とりあえず基本方針だけ示しておきます。 [1] 円を描画する関数を作る 座標(x, y)を中心とする半径rの円の円周を 透明度alphaの線で描画する関数を drawCircle(x, y, r, alpha)とします。 これをまず作りましょう。 OpenGLではデフォルトで円を描画する関数が無いらしいので、 点、線、多角形を上手く利用してそれらしいものを作るしかないと思います。 だんご描画プログラムができているのであれば、 その時に使った円描画の方法を流用できます。 なのでこれはさほど苦労しないと思います。 [2] メイン部分を作る。 添付画像に描かれている各円の中心位置を計算してあげます。 で、その計算した位置に円を描くように 関数drawCircle(x, y, r, alpha)を並べるだけで完成です(メイン部分の関数の中に)。 例えば drawCircle(90, 50, 30, 1.0); drawCircle(80, 76, 30, 0.9); drawCircle(70, 84, 30, 0.8); ・ ・ ・ と書けばよいです(結構適当に計算しています)。 円の中心座標計算が面倒ですが、それさえできれば何とかなります。 極座標を利用して円の中心位置を指定してあげることもできます。 それを上手く利用できれば、わざわざdrawCircleをたくさん並べなくても for(…; …; …){  drawCircle(…, …, …, …); } という3行だけで、添付図の画像のような円描画が実現できます。 上手く極座標を利用する方法が思いつかない(または極座標を知らない)のであれば、 わざわざ後者のような方法を使って簡潔に書こうとしなくても良いです。 前者のような形式で作れば良いと思います。

asaduki
質問者

お礼

返信遅くなって申し訳ありませんでした。 無事課題が終わりました。 感謝いたします!! 投稿時間が早い方をベストアンサーと させていただきました。

その他の回答 (1)

  • sygh
  • ベストアンサー率76% (42/55)
回答No.2

#include <cmath> #include <GL/glut.h> const float F_PI = 3.14159265f; inline float ToRadian(float x) { return x * F_PI / 180.0f; } void OnDisplay() { glClear(GL_COLOR_BUFFER_BIT); const float r1 = 7.0f, r2 = 2.3f; float cx, cy, t0, t1; for (int i = 360; i > 0; i -= 10) { cx = r1 * cos(ToRadian(i)); cy = r1 * sin(ToRadian(i)); glColor4f(1, 0, 0, i / 360.0f); glBegin(GL_LINE_LOOP); for (int j = 0; j < 360; j++) { t0 = ToRadian(j); t1 = ToRadian(j + 1); glVertex2f(cx + r2 * cos(t0), cy + r2 * sin(t0)); glVertex2f(cx + r2 * cos(t1), cy + r2 * sin(t1)); } glEnd(); } glFlush(); } void OnResize(int w, int h) { glViewport(0, 0, w, h); glLoadIdentity(); glOrtho(-10, 10, -10, 10, -1, 1); } void Init() { glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glClearColor(0, 0, 0, 1); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(400, 300); glutCreateWindow(argv[0]); glutDisplayFunc(OnDisplay); glutReshapeFunc(OnResize); Init(); glutMainLoop(); return 0; } C++ソースとしてコンパイルしてください。VC++ 2008 SP1とGLUT 3.7.6で検証しています。 ただし線分を繋げて楕円を描画するこの方法は高速ではないし、あまり拡大した場合角度分割数を上げないと美しくなくなるので、2次元の楕円を高速かつ綺麗に描画したいのであれば、Bresenhamのデジタル円描画アルゴリズムなどを勉強されることをお勧めします。

asaduki
質問者

お礼

返信遅くなって申し訳ありませんでした。 無事課題が終わりました。 感謝いたします!! 投稿時間が早い方をベストアンサーと させていただきました。

関連するQ&A

  • OpenGLでプログラミング

    現在、OpenGLの勉強をしているのですが、 Cのプログラムの中でOpenGLを使いたいと思っています。 でも、いろいろなサイトを見てみたのですが、 OpenGLはVC++では使えるようですがVC++.NETでは使えないのでしょうか? 私が所有しているのはMicrosoft Visual C++.NET Standardで、 PCはNECのバリュースターLシリーズの300/3Dです。 VC++.NETでプログラミングができない場合、 VC++を手に入れたほうがいいのでしょうか?教えてください。

  • JOGL OpenGLプログラミングについて

    こんにちは。 私は、現在行っている研究にOpenGLによる経路探査シミュレーションを取り入れたいと考えております。 プログラミングの経験はjavaでの知識半年(全てネット上で)しかなく,sunの提供しているJOGL(Java bindings for OpenGL)に挑戦しています。 しかし、JOGLのネット上での情報には限りがあり,JOGLのdocを見ても所々のクラスやメソッドに、interface C language と書いてあったりするだけですので、 Cベースのマニュアルを参照しておりますが言語的になかなか理解することが出来ません。 結局OpenGLは、一からC/C++を勉強してその環境でやるべきか悩んでいます。 これまでEclipse上でjavaプログラミングをしていたのでVisualStudio(Visual C++)に挑戦しようと思ってもなかなか補完などの処理にどうしてもとっつきづらい感があります。 JOGLのプログラミングマニュアルやサイト(英語可)で有能なものがありましたら教えていただけませんでしょうか? またJOGLよりも有能なjava bindingがありましたら教えていただけませんでしょうか? もし,C/C++をお奨めされる方の中でEclipse + CDTを使っていらっしゃる方がいましたらCDTに関するお奨めのサイトもしくは本がありましたら,教えていただけませんでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • 拡張とはなんですか?(プログラミングにおいて)

    こんにちは 単刀直入なのですが、 「拡張」とはなんですか? プログラミング(C++かHTML)で拡張て入力しないと数増えたりしないと思うのですが、勝手にアメーバのように繁殖していくのでしょうか数字が…。 プログラミング初心者の中の初心者なのですが、だれか教えてくださるかたいますか??m(__)m

  • OpenGLとJava3D

    質問なのですがJava3Dを用いるという事は結局はOpenGLやDirectXなどの3Dグラフィックス用APIを呼び出す事によって行っている。で正解なのでしょうか?ということはJava=OpenGLということでよろしいんでしょうか?無知なものですいません。わかる方詳しく教えてください。

  • このプログラミングが分からないです

    単刀直入にお話いたします。 このプログラムを実行したいのですが、プログラミングが うまくいきません。 どうか以下の問題のプログラムを書いていただけないですか?? 以下の数列を初項から10項計算するプログラムを作成 問1 X_n+1 = 1/2 ( X_n + 2/X_n ) , X_0 = 1 問2 X_n+1 = X_n + X_n-1 , X_0 = 1, X_1 = 1 ご迷惑をおかけしますが宜しくお願いします。

  • DirectXとOpenGLはどちらが動作が軽い?

    環境:Visual Studio 2005 WinXP Win32 C/C++ Windowsプログラミングを一通り勉強したので、 次は3Dプログラミングに挑戦したいと思っています。 DirectXとOpenGL、どちらを学習しようか決めかねています。 最終的にはとても軽く動作する3Dゲームを作りたいです。 そこで、たとえばまったく同じ動作をする DirectXの3Dゲームと、OpenGLの3Dゲームがある場合、 どちらのほうが動作が軽いのでしょうか。 ここでいう「動作が軽い」というのは、 そのゲームが使用するメモリ量、CPU量などが低く動作が快適なものです。 メールソフトやブラウザを同時に起動しても気にならない ほど軽いものが作りたいと思っています。

  • DirectX Graphics と OpenGLってどちらがいいの?

    お礼は必ず書きますのでどなたか教えてください。 今趣味で2Dゲームプログラムを色々と作っています。 最近2Dでは物足りなくなってきたので 3Dプログラミングを勉強していきたいなと思っているのですがDirectX Graphics と OpenGL どちらを勉強しようか悩んでいます。 シューティング、RPG、通信プログラムなどを普段作っています。 今、2人で出来るなんちゃってオンラインゲームも完成したところで 将来オンラインゲームを自分で作れたらなと思っています。 今大学4年生で、去年授業でほんのちょっとOpenGLをかじりました。しかし難しくてほとんどわかりませんでした・・。 こんな私にオススメなのはどちらでしょうか? (1)RPG,シューティング、などのゲームプログラムを通信プログラムも含めて作りたい (2)PS2などで作られているソフトはOpenGLよりほとんどがDirectXで作られていると聞きましたがそうなのでしょうか?それはなぜですか? (3)書籍などが充実しているのはどちらでしょうか?ウェブでの解説などがあればそちらでも。 (こちらの方がわかりやすく書いてある本があるなど) 結局この2つはどう違うのかが知りたいです。 どなたかお詳しい方教えてください。 よろしくお願いします。

  • OpenGLでの軸回転について

    はじめまして 早速質問ですが、OpenGLで平面画像をカメラ目線にさせる(視線に合わせる)という動作をプログラムしたいのですが、 そのやり方がわかりません(カメラは動いて、常にその方向に向かせる)。 最初XYZ軸をそれぞれ動かす計算をさせたかったのですが、 その計算式が分かりません どなたか教えていただけないでしょうか? LightWaveみたいにHPBを動かして出来れば楽なんですが…^^;

  • パワーポイントでOpenGL

    パワーポイントを使ってプレゼンをされてた方が、スライドショーをしながらOpenGLのプログラムを実行していました。 スライドショーを止めずに、他のプログラムを実行する方法をご存知の方、教えてください。 よろしくお願いいたします。<(_ _)>

  • O・N時代に詳しい人

    先日、友達と言い合いになって長嶋が四番を打ったことがある無いで揉めました。単刀直入に言ってどちらが正解でしょうか?因みに私は、あると思います。野球を知らないとまで言われてしまいました。宜しく回答お願いします。