1 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 03:17:59 ] Delphi用OpenGLライブラリGLSceneのためのスレッドです。 フリーの3Dコンポーネントでお気楽プログラミング。 とうとうGLScene正式版リリース glscene.sourceforge.net/index.php ヘルプはこっちで落とした方が良さそう。 GLScene Help Project caperaven.co.za/ ついでにGraphics32もあれば心強い www.graphics32.org/wiki/ Lazarus使いなら、これ。Lazarus with GLScene bundled www.skinhat.com/ 質問は出来る限り詳しく的確にお願いします。 日本語情報ほとんど無し。GLSceneマスター様、情報お願いします。 GLSceneの他にもこんなライブラリがあるという情報もおk。
57 名前:デフォルトの名無しさん [2007/01/27(土) 17:53:58 ] GLScene使ってみたんだが、 アプリケーション終了時にエラーが起こる・・・。 なんとかならんのか? --------------------------- デバッガ例外通知 --------------------------- プロジェクト fire.exe は例外クラス EGLContext (メッセージ 'Context activation failed: C0070006, ')を送出しました。 --------------------------- ブレーク(B) 継続(C) ヘルプ --------------------------- と出て、無限にダイアログが出て終了できなくなる。 demoのFireでも起こったし、自作のアプリでも起こった。 Delphi2006 GLScene 1.0.0.0714
58 名前:57 [2007/01/27(土) 18:53:41 ] CVS版でも起こりますね・・・ 困った
59 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 18:54:45 ] どうでもいいことだけどバージョンの付け方がうざすぎるよな
60 名前:53 mailto:age [2007/01/27(土) 22:04:24 ] >>54 ありゃりゃ、DirectSoundでもOgg使えたのか。 僕の勉強不足だったです。DirectSoundでOggが使えれば、ほとんど解決ですね。 mp3のライセンスが極悪なんで、Oggが使えるライブラリを探していたら、たまたまDelphiOpenALを見つけました。 >>56 サンクスです。LGPLへの動的リンクは、ソース入手先等を書いとけばいいのですね。 >>57 僕の場合は、GLScene付属のデモ(Fire含めて)も自作アプリも、そんなエラーは出たこと無いのですが・・・ TuboDelphi2006(10.0.2288.42451 Update 2) +GLScene 1.0.0.0714 ですので、ほとんど同じですね。 ・・・・・・ということは、グラボのドライバが怪しい?
61 名前:57 [2007/01/27(土) 22:29:30 ] そっか、そちらでは、エラーでてないのですかー。 ドライバ更新してみっか・・・
62 名前:57 [2007/01/27(土) 23:11:19 ] だめだ、ドライバ更新したのに直らないや・・・ 困った。 GeXCube RADEON 9600XT Game Buster ドライバー: 2006/12/16 ver 8.33.0.0 他の環境でも試して見ます・・・。
63 名前:53 mailto:age [2007/01/27(土) 23:42:49 ] >>57 やはり全く同じエラーが出ている人もいるようです。 www.wincustomize.com/skins.aspx?skinid=171&libid=40 delphi.newswhat.com/geoxml/forumhistorythread?groupname=glscene.support&messageid=c7omik$cim$1@talkto.net でも、原因も解決方法がわからないです。 もうちょっと調べてみます。
64 名前:デフォルトの名無しさん [2007/01/28(日) 00:03:18 ] delphi入門 delphi-delphi.tripod.com/delphi.html
65 名前:57 [2007/01/28(日) 00:29:31 ] 素のOpenGL使ってるときには、起こらなかったから、 GLScene側の問題だとは思うのだが、環境によっておこらないとなるとねえ。
66 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 00:38:12 ] >>57 もしかして、標準のopengl32.dllとグラボのドライバとの相性が悪かったりして・・・ 試しにMesa6.2 Win32を使ってみたらどうだろ? (GLSceneのサイトからダウンロード出来る) 念のためWindows\System32\opengl32.dllをバックアップして、Mesaのopengl32.dllと入れ替えしてみて
67 名前:57 [2007/01/28(日) 00:46:51 ] newswhat.com [glscene.general] delphi.newswhat.com/geoxml/forumhistorythread?groupname=glscene.general&messageid=ed92mg$g4m$1@news.talkto.net ここにも、同じこと言っている人がいた。 同じビデオチップだ・・・
68 名前:57 [2007/01/28(日) 00:51:29 ] newswhat.com [glscene.general] delphi.newswhat.com/geoxml/forumhistorythread?groupname=glscene.general&messageid=ecudnn$nd7$1@news.talkto.net これ?が解決策だろうか?
69 名前:57 [2007/01/28(日) 01:00:03 ] >>66 MesaのOpenGL.dllをデモと同じディレクトリに置きました。 そっちを優先的に見ると思うので・・・ で、結果ですが、終了時のエラーは起きませんでした。 (ただ、fireのdemo自体はは正常に動いていませんが) むふー。
70 名前:53 mailto:age [2007/01/28(日) 01:01:36 ] 「About Ati Context OnClose bug, quick solution」ってやつ? viewerを開放するって、手動で開放するってことかな?
71 名前:57 [2007/01/28(日) 01:13:08 ] えーと、TForm.OnCloseに Viewerの開放処理、つまり、 FreeAndNil(GLSceneViewer1); を入れたら、エラーは出ませんでした。
72 名前:53 mailto:age [2007/01/28(日) 01:14:30 ] >>57 もし、この英文どおりドライバのバグなら、Catalyst7.1を入れたらどうでしょうか? ati.amd.com/index.html
73 名前:53 mailto:age [2007/01/28(日) 01:18:24 ] >>57 あ、一応解決ですね。 ・・・と言う事は・・・ Radeon対策に、TGLSceneViewerの開放処理をしたほうが良さそうですね。
74 名前:57 [2007/01/28(日) 01:20:09 ] これでも、まあいいのですが、 一応、エラーの原因は追究しておきたいと思います。 エラーというか、例外がおきているんですよ。 procedure TGLWin32Context.DoActivate; 内の if not wglMakeCurrent(Cardinal(FDC), Cardinal(FRC)) then が、失敗し、次の行の raise EGLContext.Create(Format(cContextActivationFailed, で、例外発生。 どうも、GLScene的に、WM_DESTROYをフックして(GLWin32Context.TrackHookProc)、 そのときに開放処理を行っているようなのですが、 その中で、終了時なのに、GLContext.TGLContext.Activate呼び出して、 wglMakeCurrentやってるんですよね・・・。 なんか、奇妙だ。 素でOpenGL使っていたときはやらなかったからなあ。 ソースが追えるところの、呼び出し履歴を張っておきます。 :7c812a5b kernel32.RaiseException + 0x52 GLWin32Context.TGLWin32Context.DoActivate GLContext.TGLContext.Activate GLContext.TGLContext.DestroyContext GLWin32Context.TGLWin32Context.DestructionEarlyWarning(???) GLWin32Context.TrackHookProc(0,0,1244640)
75 名前:57 [2007/01/28(日) 01:22:13 ] >>72 7.1は、先ほど、ドライバを最新に・・・と言われたときに入れました。 それでも同じでした。
76 名前:57 [2007/01/28(日) 01:45:17 ] > どうも、GLScene的に、WM_DESTROYをフックして(GLWin32Context.TrackHookProc)、 このタイミングがわるいのかと思い、フックしない設定 つまり、 GLWin32Context.vUseWindowTrackingHook := False; とやったのですが、これでも起こりました。 GLWin32Context.TGLWin32Context.Destroyで普通におきる罠・・・ 呼び出し履歴: GLWin32Context.TGLWin32Context.DoActivate GLContext.TGLContext.Activate GLContext.TGLContext.DestroyContext GLContext.TGLContext.Destroy GLWin32Context.TGLWin32Context.Destroy :00463cf9 TGLContext.Destroy + $1D :00443106 TWinControl.WndProc + $49E :0044288f TWinControl.MainWndProc + $2F
77 名前:53 mailto:age [2007/01/28(日) 02:12:02 ] 僕も今、ソースを追ってみたのですが・・・ あ、頭が混乱してきた・・・ あー力不足。 >その中で、終了時なのに、GLContext.TGLContext.Activate呼び出して、 >wglMakeCurrentやってるんですよね・・・。 >なんか、奇妙だ。 なんでこんなとこでバインドする必要があるんだろ?本当に奇妙ですよね。 glGetString(GL_VENDOR)のため?・・・いや、関係ないか。 ぼちぼちもうちょっとソース追ってみようっと。
78 名前:53 mailto:sage [2007/01/30(火) 00:09:32 ] ニュースグループにも、ATI Mobility X1300で同じ症状の人がいるみたいです。 (procedure TGLWin32Context.DoActivateのwglMakeCurrent(Cardinal(FDC), Cardinal(FRC))で例外発生) 「TForm.onDestroyでGLSceneViewer1.Buffer.DestroyRC;」しろ!とレスされてます。 でも・・・私のノートパソがATI Mobility X1400なので、もしかしてと思い、試してみたのですが・・・(fireデモ含んで)例外は発生しませんでした。 本当に何が原因なんだろ?
79 名前:デフォルトの名無しさん [2007/01/30(火) 03:26:10 ] Delphiで、3Dライブラリといったら、Rage3Dっつーのもあるんですね。 Google Code Searchふらついてたら見つけた。 Rage 3D Game Engine News - Open Source free game engine for commercial games and free game use www.rage-game-engine.za.net/ とは言え、サンプルとかが多そうなGLSceneをしばらくは使ってみますが。 浮気するには、まだ早い!
80 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 00:51:00 ] Rage3D、インストールの仕方もわからんかった。 やはりGLSceneの方が良さそうか。
81 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:15:24 ] これ、使いやすくていいですね! キューブにtexture画像を貼り付けると、自動的にstretchされるんですが、 tileにするにはどうすればよいか教えていただけませんか?
82 名前:デフォルトの名無しさん [2007/02/07(水) 17:59:04 ] 落としたファイルにライセンス条項が見当たらないのですが、 本家ページによればMPL相当らしいので、配布には、copyrightを書かねばいけませんよね? copyrightは、どう書けばいいのですかな。 GLScene (c) GLScene Project glscene.org
83 名前:デフォルトの名無しさん [2007/02/07(水) 18:02:10 ] GLScene, Delphi + OpenGL caperaven.co.za/ ここのヘルプに書いてありますね。 GLScene (c) 2000-2001 Eric Grange glscene.org でよいのかな・・・
84 名前:デフォルトの名無しさん [2007/02/07(水) 18:36:54 ] 思ったのですが、 VectorGeometryは、通常のFPUと、SSEと、3DNow!で、場合分けしますよね? リプレイの実装で問題がでそうなので、OFFりたい、というか、FPUオンリーにしたいのですが、 initialization の CPU判別ルーチンをコメントアウトしておけば、 vSIMD:=0; が初期値なので、OKですよね。
85 名前:デフォルトの名無しさん mailto:age [2007/02/10(土) 23:33:18 ] >>81 マテリアルライブラリからなら、タイル状に貼れるぞ。 例えば、GLMaterialLibrary1の0番目に入っているテクスチャを貼りたい時、 GLMaterialLibrary1.Materials[0]のプロパティTextureScaleをいじってみてくれ。 たとえば5×5にするなら、X=5,Y=5だ。
86 名前:デフォルトの名無しさん [2007/02/12(月) 09:54:17 ] >>85 サンキューです。できました。 簡単にできて、素晴らしいですね。直にOpenGLいじる気なくなりますね。
87 名前:デフォルトの名無しさん [2007/02/15(木) 17:58:16 ] 物理エンジンoxNewtonをインストールしてみました。 www.dave.serveusers.com/oxNewton.html TGLSceneが拡張されて、oxNewton用のGLSCeneObjectが追加されます。 何故か嬉しい事にOpenAL用コンポーネントも付いているようです。 また時間が空いているときにいじってみようと思います。
88 名前:デフォルトの名無しさん [2007/02/15(木) 18:13:21 ] インストールに悩みました。同じ様に悩む人もいると思うので、やり方を書きます。 解凍後、GLSceneのフォルダにコピーする。 →GLVectorFileObjects.pasが上書きされる oxNewtonフォルダのinstalldll.batを実行する。 →「Newton.dll」「oxNewton.dll」「OpenAL32.dll」「wrap_oal.dll」がsystem32にコピーされる ライブラリパスに「\oxNewton」を追加する。 GLSceneのDelphi***.dpkをダブルクリックして、プロジェクトマネージャーを立ち上げる。フォルダDesignTimeにある「oxNewtonRegister.pas」をDelphi***.dpkに追加し、再構築&インストールする。
89 名前:デフォルトの名無しさん mailto:age [2007/02/16(金) 19:18:29 ] >>87 乙です。 ・・・ということは、GLSceneでODE(Open Dynamics Engine)とNewtonと二つの物理エンジンが使えるってことだよね。 どっちがどう違うんだろ? 誰か知っている人います?
90 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 02:17:28 ] GLScene入れてみた。 殆どコード書かなくても3D的な事ができるな。こりゃ楽だ。 しかし.3dsかぁ。teapotを10000個出して動かしてみたけど、楽しくないや。 モデリングソフトはさっぱり知らんが、もっと手軽なフォーマットがないかな。
91 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 22:50:54 ] >>90 有名どころのフリーのモデラーの出力形式をコピペしてみた。GLSceneが対応しているフォーマットは>>22 が書いてるとおり。 【Blender】 3D Studio, AC3D, COLLADA, DEC Object File Format, DirectX, Lightwave, MD2, Motion Capture, Nendo, OpenFlight, PLY, Pro Engineer, Radiosity, Raw Triangle, Softimage, STL, TrueSpace, VideoScape, VRML, VRML97, Wavefront, X3D Extensible 3D, xfig export 【OpenFX】 3D Studio models(.3DS) , DXF models(.DXF) , STL Stereo Lithography(.STL) , VRML files(.WRL) 【Wings3D】 Nendo (NDO) , 3D Studio (3DS) , Wavefront (OBJ) , VRML (WRL) , Renderware (RWX) , FBX (on Windows and Mac OS X) これからするとやはりフォーマットは、3dsがポピュラーっぽいね。
92 名前:90 mailto:sage [2007/02/27(火) 23:13:01 ] >>91 おぉ、すごい。ありがとう。今から見てきます。 今週末はタイマー周りで遊んでみた。 GLTimeEventsMGRがあるので、自前でタイマー処理を書かなくて済むし、 GLCadencerの設定変えれば描画スキップして10ms毎に確実にカウントできる処理とかもできるし。 これ便利だわ。
93 名前:87 [2007/02/28(水) 00:09:27 ] 物理エンジンoxNewtonを試してみました。ヘルプが無いのが辛いです。まだまだわからない事ばかりですが簡単にまとめてみます。 ・剛弾性体の運動および衝突をシミュレートしてアニメーション。 ・TGLSceneの代わりにToxNewtonManager(TGLSceneから継承)を使用する。TGLCadencerは必須。 ・ToxNewtonManagerで設定する必要のあるプロパティは以下のとおり Cadencer←TGLCadencer、Cadencer側でもToxNewtonManagerを指定 WorldSizeMax,WorldSizeMin WorldMaterialElasticity←弾性係数 WorldMaterialKineticFriction←動摩擦係数 WorldMaterialStaticFriction←静摩擦係数 WorldMaterialSoftness WorldStepMode ・・・mdNormalStepの場合はWorldStepTimeで設定 ・・・mdMultyplyStepの場合はWorldMultiplyTimeで設定 ・・・mdCadencer 実時間? Gravity←初期値は(0,0,-9.81)つまりz軸が上方向 ・ToxNewtonManagerをダブルクリックしてGLSceneエディタを立ち上げて、oxNewtonオブジェクトを追加していく。 ・Dynが付くのは動くオブジェクトで、Staが付くのは動かないオブジェクト(床や壁等)。 ・弾性係数はMaterialElasticityプロパティで動摩擦係数はMaterialKineticFrictionプロパティ。 ・oxNewtonManagerやoxNewtonオブジェクトやジョイントはフォームのonCreateイベントで初期化しておく。 ・onNewtonには直接関係ないけど、GLSceneを使ったときは、フォームのonCloseイベントで以下のコードを追加しましょう。 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin // ATI onclose context error fix if assigned(GLSceneViewer1) then GLSceneViewer1.Free; end;