ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

OpenGLコミュのC++BuilderでOpenGLを作成しています

  • mixiチェック
  • このエントリーをはてなブックマークに追加
先日、C++BuilderでOpenGLを作成できるようにコチラ(→http://dn.codegear.com/article/10528)のサイトからソースをとってきたのですが、自分が作成したいものが作れず悩んでいます。

自分は3D表示ができるようにしたいのですが、どこ3D表示に必要な関数(gluLookAtなど)を入れていいのやら・・・です。とりあえずglut32.libやglut32.dllは入れました。

どなたか教えていただけないでしょうか?

あと、どんな関数を使えば出来るか教えていただけると幸いです。



コメント(6)

glutを使用するなら、C++Builderの
VCLを使用しないコンソールアプリケーションで、
通常のglutを使用したOpenGLプログラムをした方が
よいと思います。
C++Builderの良さは生かせませんけど・・・

リンク先のソースを拝見するに、
TForm1::IdleLoopかTForm1::RenderGLSceneに
描画ルーチンを入れてやればいいのではないでしょうか。

C++Builderを使ってOpenGLプログラムをするのなら
「C++Builder6コンポーネント活用ガイド&実践プログラム Vol8」
を購入された方がよろしいと思います。
ただし、この本のサンプルではアイドル処理にスリープが入っていないので
CPU使用率が100%のプログラムができてしまうので

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Application->OnIdle = IdleLoop;
}

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Application->OnIdle = IdleLoop;
Sleep(1);
}
と修正する必要があります。
ながもりさん返信ありがとうございます.

C++Builderを使用して,OpenGLを使っているのには理由がありまして,デバイスから送られてくるリアルタイムデータを受信する・データをバイナリー保存するetcのボタンを作る必要がありC++Builderを使わせてもらいました.VCLは使う方向でいます.

現在,TForm1::RenderGLSceneに描画ルーチンを入れております.

プログラムの方を作成したのですが,もし御迷惑でなければ見ていただくことは可能でしょうか?大変失礼かと思いますがよろしくお願いします.



重複して申し訳ないのですが,gluLookAtなど(3D表現に必要な定義???)関数の配置はTForm1::RenderGLSceneの初めの方に書いてしまってもよいのでしょうか???

プログラムを作成する事が初めてであり,よく解っていなくすみません.自分でも色々勉強しているのですが,いまいちよく解らないことばかりが多理解に苦しんでいます.コチラ(http://dn.codegear.com/article/10528)の方の内容も本来ならばすべて理解する必要があるのですが・・・(動作をすべて把握していない状態です)すみません.
こんにちわ。

私はC++BuilderのみでOpenGLを作成していますよ。
もともとはVisualC++で作成したものを移植したのですが、
それほど苦労することもありません。

初期化ロジックはFromの上にパネル等を貼り付けて、そのHandleを
使いFormCreateの時に初期化を行います。

gluLookAt等レンダリング関数はマウスやキーボード等のイベントで
呼び出すように処理をしています。
OnIdleで行うと結構面倒なのでそうしています。

VCLを使うメリットは開発者にとってすごくありがたいですし、VC++を使う
よりはGL以外のプログラムに気を使わない点は本当に良いと思いますので、
最初のハードルさえ越えてしまえばあとは簡単です。

また、ExsampleにもOpenGLのソースがついていますので、それをご参考に
するのが良いと思います。
>Cristiano Ronaldoさん
>重複して申し訳ないのですが,gluLookAtなど(3D表現に必要な定義???)関数の配置はTForm1::RenderGLSceneの初めの方に書いてしまってもよいのでしょうか???

問題ないと思います。


URLで指定されているソースの流れは、簡単に言うと
FormCreate
 ↓
IdleLoop
となっており、IdelLoopが無限ループとなっている状態です。
IdelLoop内で、SwapBuffersが呼び出されていますが、
これが、フォームに描画内容を反映するAPIとなっています。
なので、RenderGLSceneで指定した処理が、SwapBuffersで反映される
という処理を繰り返すプログラムとなっています。
FormResizeは、フォームのサイズが変更されたとき、
FormDestroyは、終了時に呼び出されています。

まず、OpenGLプログラムで1度だけ行う初期化などの設定は、SetupRCに記述
OpenGLのAPIを使用した描画はRenderGLSceneに記述
で問題ないと思います。

gluLookAtがもし、毎回の描画時に行う必要がない場合は、しじゅうれーさーさんが
いわれている通り、イベントなどからgluLookAtを呼ぶようにした方がよいと思います。
皆さんありがとうございます.非常に参考になる内容ありがとうございました.

おかげさまで,プログラムを2/3作ることができました.

こんなに親切に,内容を書き込んで頂き本当にありがとうございました.
困っている人を助けていただける方は,どれほど心のやさしい方なのでしょうか.感謝しております.

ながもりさん・しじゅうれーさーさん,ありがとうございました.

まだまだ,初心者の私ですが,また困った時はよろしくお願いします.
いまさらですがうまい!

「OpenGLで作る力学アニメーション入門」
ISBN-10: 4627845618

という書籍では、OpenGLをC++Builderで使っていますので、何かの参考になるでしょう。
ただし、本の内容はあくまでも力学アニメーションが主になります。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

OpenGL 更新情報

OpenGLのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング