OpenGLスレ Part18

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
クロスプラットフォームの3D API OpenGLに関する話題を扱うスレッド。
現在のバージョンは4.1
http://www.opengl.org/
http://www.opengl.org/wiki/Main_Page

== OpenGLと一緒に使われるツール&ライブラリ ==
苦労したくなかったらとりあえず入れとけ。
・glx:    XからOpenGLを使うためのライブラリ。普通は直接は使わず意識する事はない
・glut:   クロスプラットフォームなツールキット。でもさすがに古くさい
・glew:   これを入れないと拡張機能が使えないor使いにくい
・glxgears: 歯車が回るベンチマーク。-infoでOpenGLのバージョンが見られる。OpenGLの動作確認はこれで
・glxinfo:  自分の使っているカードのOpenGLの機能が全てリストアップされる。
・OpenTK  C#からOpenGLを簡単に使えるようになる。VC#の強力なIntellisenseとあわせてサクサク開発可能。
・OpenSceneGraph: OpenGL を高度に抽象化し、利便性を高めたラッパー。C++ ライブラリ
・OpenGL Mathematics (GLM): GLSL 文法ライクの C++ 数学ライブラリ

== チュートリアルサイト ==
床井研究室: http://marina.sys.wakayama-u.ac.jp/~tokoi/oglarticles.html
OpenGL de プログラミング: http://wiki.livedoor.jp/mikk_ni3_92/
NeHe:    http://nehe.gamedev.net/

== 前スレ ==
OpenGLスレ Part17
http://toro.2ch.net/test/read.cgi/tech/1321350331/
2デフォルトの名無しさん:2012/04/14(土) 12:32:20.39
3デフォルトの名無しさん:2012/04/14(土) 12:35:10.44
== 必読書 ==

-- CG入門 --
OpenGL以前の普遍的なCGの概念。
CG-ARTS協会の3冊は初心者向け。あとの2冊は上級者向け。
・コンピュータグラフィックス (CG-ARTS協会)
・ビジュアル情報処理 (CG-ARTS協会)
・ディジタル映像表現 (CG-ARTS協会)
・ゲーム制作者になるための3Dグラフィックス技術
・ビジュアルコンピューティング 3次元CGによる画像生成

-- 初心者用 --
・GLUTによるOpenGL入門
・GLUTによるOpenGL入門2 テクスチャマッピング
・OpenGL ES 2.0 プログラミングガイド

-- 上級者用 --
・OpenGL Shading Language (橙本)
・Shader Xシリーズ
・GPU Gemsシリーズ
・GPU Proシリーズ
4デフォルトの名無しさん:2012/04/14(土) 12:37:24.04
== 必読書2 ==

-- モダンなOpenGL --
シェーダーベースの最新のOpenGLの学習
・OpenGL 4.0 Shading Language Cookbook
・OpenGL SuperBible: Comprehensive Tutorial and Reference
・OpenGL 4.0 グラフィックシステム

-- 数学 --
・ゲームプログラミングのための3Dグラフィックス数学
・実例で学ぶゲーム3D数学
・ゲーム開発のための数学・物理学入門

-- 過去の書籍 --
有名だが古いバージョンのOpenGLをもとに書かれているためすでに時代遅れ
通常は買う必要はない
・OpenGLプログラミングガイド 原著第5版 (赤本)
・OpenGL Reference Manual (青本)

5デフォルトの名無しさん:2012/04/14(土) 12:40:24.41
== チュートリアルサイト2 ==
OpenGL Step By Step:    http://ogldev.atspace.co.uk/
OpenGL Samples Pack:    http://ogl-samples.g-truc.net/

== C/C++以外から使うには ==
Rubyから    --> ruby-opengl
Pythonから   --> PyOpenGL
Javaから    --> JOGL
JavaScriptから --> ???
Haskellから  --> ???
C#等、.NET系  --> OpenTK

== Quick Reference Card ==
OpenGL 4.1 API Quick Reference Card
 http://www.khronos.org/files/opengl41-quick-reference-card.pdf
OpenGL 3.2 API Quick Reference Card
 http://www.khronos.org/files/opengl-quick-reference-card.pdf
OpenGL ES 2.0 API Quick Reference Card
 http://www.khronos.org/opengles/sdk/docs/reference_cards/OpenGL-ES-2_0-Reference-card.pdf
WebGL 1.0 API Quick Reference Card
 http://www.khronos.org/files/webgl/webgl-reference-card-1_0.pdf
6デフォルトの名無しさん:2012/04/14(土) 12:42:20.40
以上テンプレでした。

チュートリアルサイト、増えたことに気づかず
まとめ損ないました。
すみません。
7デフォルトの名無しさん:2012/04/14(土) 23:14:09.44
おつおつ
8デフォルトの名無しさん:2012/04/15(日) 22:44:24.25
>>1
おつです


3次元の立方体を線画で描こうと思って入力したら
「error c2099:初期化子が定数ではない」
と下の点情報が引っかかってしまいました(点G以外すべて)
何を直せばいいのかわからないので指摘お願いします

GLdouble vertex[][3]=
{
(0.0,0.0,0.0),//A
(1.0,0.0,0.0),//B
(1.0,1.0,0.0),//C
(0.0,1.0,0.0),//D
(0.0,0.0,1.0),//E
(1.0,0.0,1.0),//F
(1.0,1.0,1.0),//G
(0.0,1.0,1.0)//H
};
9デフォルトの名無しさん:2012/04/15(日) 22:51:03.26
>>1 おつ

質問です

CAD や モデラーなどを OpenGL を使って作る場合も、
頂点データは VBO を使って VRAM 側に持たせて、
頂点の位置や法線などのパラメータを変更する度に
バッファのマッピング系やコピー系の関数を使って書き換えるのが普通ですか

それとも、元の頂点のパラメータが変化しないゲームなどと違って、
モデラーなどではメインメモリ側に持たせる方がいいのでしょうか
10デフォルトの名無しさん:2012/04/15(日) 22:53:05.78
>>8
丸括弧を中括弧にしてみてはどうでしょうか
11デフォルトの名無しさん:2012/04/15(日) 22:54:39.23
>>10
あっさり解決
低レベルな質問で申し訳ないです、ありがとうございました
12デフォルトの名無しさん:2012/04/16(月) 15:28:29.50
OpenGLコンテキストを作らずにシェーダーで使われているUniform変数とAttribute変数の名前を表示したいのですが、
どうすれば可能でしょうか?
自前でGLSLを全部パースするしか無い?
(すごく大変。。。。)
13デフォルトの名無しさん:2012/04/16(月) 18:40:26.20
>>8 の初期化子って定数だよね?
数が足りないから警告ならあってもいいけど
C/C++的にはエラー出るのはおかしくない?
14デフォルトの名無しさん:2012/04/16(月) 19:48:09.38
>>13
VisualCのC言語ファイル(.c)だと変数の初期化にカンマ演算子を使うとこのエラーになるっぽい
15デフォルトの名無しさん:2012/04/16(月) 23:27:30.81
>>13
(0.0,0.0,0.0)なんて定数ありません
16デフォルトの名無しさん:2012/04/17(火) 03:47:57.89
>>14
VSもgccもいけるやん!
って思ってたらVC++か。。。
17デフォルトの名無しさん:2012/04/17(火) 05:11:45.34
たんに{と(を間違ってるだけじゃ?
18デフォルトの名無しさん:2012/04/17(火) 06:11:03.80
>>14
へへ。確かに初期化でカンマ演算子を使うことはないから、
その仕様はいいかも。
19デフォルトの名無しさん:2012/04/17(火) 23:52:21.96
>>12
OpenGLでは出来ないのでパーサを作るしかないんだが、既製の物がいくらかあるので使えるよ
ANGLE Project http://code.google.com/p/angleproject/
Mesa3D http://mesa3d.org/
どちらもGLSLコンパイラだけ取り出して使うことができる。
ANGLEの方が簡単そうかな。
2012:2012/04/18(水) 00:03:24.97
やはりそれしかないですか....
C#から使いたいのでAngleのGLSLパーサーをC#から使えるようにして。。。。
まあ自前でGLSLパーサーを作るよりは簡単でしょう
どうしたものか、むむむむ
21デフォルトの名無しさん:2012/04/19(木) 13:24:27.25
頂点インデックスを使いたいのですが
たとえば立方体を描画する場合、頂点情報は8つですみますが
それにテクスチャを貼り付けたい場合は、UV情報は最大だと48個必要になると思います
この場合どのように描画すればいいのでしょうか?
UVの個数に合わせなければなりませんか?
22デフォルトの名無しさん:2012/04/19(木) 14:00:32.14
UVにあわせるしかない。
法線も必要な場合は48個まるまる必要になる。
立方体は不連続な子だから仕方ない。
2322:2012/04/19(木) 14:15:25.00
48個じゃねえ、24個だorz
UVも変な張り方しないなら24個で収まる。
が、UVの個数にあわせるしか方法は無い。

とりあえず俺は算数からやり直してきます…。
24デフォルトの名無しさん:2012/04/19(木) 15:13:26.61
>>22-23
UVに合わせてやってみます
ありがとうございました
25デフォルトの名無しさん:2012/04/21(土) 00:43:30.89
3Dモデルの平均曲率の計算の実装の方法を教えてください!
26デフォルトの名無しさん:2012/04/21(土) 01:51:18.03
それはOpenGLのAPI使わないと出来ないことか?
27デフォルトの名無しさん:2012/04/21(土) 03:04:43.61
>>25
3Dモデルの曲率を平均すればいい
28デフォルトの名無しさん:2012/04/22(日) 23:46:13.45
>>27
25です.
wikiやベクトル解析の教科書などで曲率を調べて数式的定義は見たんですが,
実際の3Dモデルに対する実装の方法が良く分かりません・・・
よろしければ教えてください。
29デフォルトの名無しさん:2012/04/23(月) 00:32:57.35
>>28
だからそれはOpenGLなのか?
曲率考える前に
質問する板考えろ。
頭くさってんじゃねぇのか?
30デフォルトの名無しさん:2012/04/23(月) 00:39:55.73
もしかするとGLSLでという?いや、まさかね
31デフォルトの名無しさん:2012/04/25(水) 00:47:23.64
質問です
VC2008(C++)で、最初から入ってるopengl32.lib/glu32.libを使って、テクスチャをポリゴンに貼って表示する所まで出来るようになりました。
そこで、テクスチャとレンダーターゲットを16bit or 32bitの浮動小数点にしたいんですが、最初から付いてる奴はヘッダもlibも古いみたいで、
そういうテクスチャが作れないように思えます。
何か新しいライブラリを入れる必要があると思うのですが、何を使えばいいのでしょうか?
テクスチャフォーマットをfloatにして精度を上げたいだけで、それ以上の凝った機能は無くても大丈夫です。
商用に使いますので、できるだけライセンスの緩い奴だと助かります。
よろしくお願いします。
32デフォルトの名無しさん:2012/04/25(水) 01:27:25.96
>>31
glext.h / glxext.h とか wglGetProcAddress()とか
ttp://www.opengl.org/registry/#headers

めんどくさいなら>>1にあるglew使えば便利。
33デフォルトの名無しさん:2012/04/25(水) 01:46:06.04
>>32
ありがとうございます、これです!glext.h / glxext.h ってヘッダしか無いんですね。
ライセンスについて書かれてないっぽいですが、勝手に使って良いんでしょうか?

glewも色々便利っぽいですね〜!こっちはglew使ってますっていう表記をしないといけないヤツですね。
34デフォルトの名無しさん:2012/04/25(水) 14:12:49.69
表記する必要あんのか?
35デフォルトの名無しさん:2012/04/25(水) 21:35:22.53
glewはBSDライセンスだし(他の物も混ざってるようだが)少なくとも添付のドキュメントか何かには表記が必要だろ
しかし素のgl.hもSGI Free Software License B, Version 1.0とやらに従って表記が必要なようなんだけど、これ書いてあるの全く見たことないな
36デフォルトの名無しさん:2012/04/25(水) 23:59:28.88
glew使ってます!って表記してんの見たことない
37デフォルトの名無しさん:2012/04/27(金) 12:13:47.67
ちょっと前ダイレクトXにダイレクト2Dって奴の2D機能あったじゃないですか?
オープンGLに2D機能って無いんですか?
3DにしてCPU使いすぎる程のものではないので・・・
38デフォルトの名無しさん:2012/04/27(金) 12:46:58.44
ない
39デフォルトの名無しさん:2012/04/27(金) 12:52:57.43
今はなんでもかんでも3Dとして描画するのが流行り
40デフォルトの名無しさん:2012/04/27(金) 12:56:45.80
>>37
> オープンGLに2D機能って無いんですか?
あるよ。というか、特に3Dと区別していない。
41デフォルトの名無しさん:2012/04/27(金) 15:20:34.65
有難うございます。
ではz軸を固定して線を描いたりすればいいんですね。
そうやってみます。
42デフォルトの名無しさん:2012/04/27(金) 16:53:18.49
openGL32ライブラリーじゃなくてopenGL64ってあるんですか?
64ビット対応CPUなんで使ってみたいんですけど
windows7です。どうやったら出来るか教えてください。
43デフォルトの名無しさん:2012/04/27(金) 17:42:28.78
ライティングやモーションの有無等によって処理を切り替えたいのですが
GLSLは動的な条件分岐に弱く、速度が極端に落ちると聞いたのですが
処理毎にプログラムを分けると条件分岐の数の二乗分だけプログラムが必要になり色々効率的ではなさそうですが
動的な条件分岐に弱いなら、一回のdraw中に条件判定に要する値が変わらない静的な分岐なら速度はそれほど落ちないのでしょうか?
44デフォルトの名無しさん:2012/04/27(金) 21:26:53.90
>>43
OpenGL4で関数ポインタみたいのが導入されて、
それつかえば関数の呼び出し先を必要に応じて変えられるらしい。
使った事は無いのでよくわかんないけど。
45デフォルトの名無しさん:2012/04/27(金) 23:41:10.53
最近のGPUだと条件分岐も昔よりだいぶ改善されてんじゃないかな
静的な分岐というか、なるべく多くのプロセッサが同じ動作をするように分岐を書くと効率はいいはず
46デフォルトの名無しさん:2012/04/29(日) 02:00:43.62
>>43
頭でっかちにならないで実際にシェーダーを書いてみなよ、
動的な条件分岐でさ。案外問題ないと思うよ。
それで速度が遅いなら#ifdefとかで分ければ無駄にならないし、勉強にもなるよ。
47デフォルトの名無しさん:2012/05/02(水) 16:49:49.49
projectionMatrixで正規化した座標に変換するのって
w座標が1のにできないの?
逆行列で戻すとき困るんだけど
48デフォルトの名無しさん:2012/05/03(木) 19:35:02.63
質問は日本語で
49デフォルトの名無しさん:2012/05/04(金) 13:01:21.95
SSAOってもう過ぎた技術なの?
50デフォルトの名無しさん:2012/05/04(金) 21:16:28.71
>>48
projectionMatrixで変換した座標がwに馬鹿でかい数値入ってくる。
wに1が来るようなprojectionMatrixの作り方教えろ
5147:2012/05/04(金) 22:58:50.66
http://rudora7.blog81.fc2.com/blog-entry-415.html

ここにいい例がある。

http://blog-imgs-30.fc2.com/r/u/d/rudora7/20100228235936195.jpg

この行列の計算で求められるのは[480 240 2 3]だ。
wで割れば[160 80 0.6 1]になって確かに、スクリーン座標になるのだが。
[160 80 0.6 1]からは逆行列をかけても元のワールド座標に戻せない。
クリックした画面のワールド座標を求めたいのだが
スクリーン座標は[160 80 0 1]しか得られないのだが
どうすりゃいいんだ。
52デフォルトの名無しさん:2012/05/04(金) 23:03:25.94
スクリーン座標からワールド座標は一意に決まらないことからわからないのか?
まずそこはどうなのよ
53デフォルトの名無しさん:2012/05/04(金) 23:38:17.88
>>51
>クリックした画面のワールド座標を求めたいのだが
glReadPixelsでデプス取ってきてUnProjectすればいいだけじゃないのか?
54デフォルトの名無しさん:2012/05/04(金) 23:57:43.04
>>51
その[160 80 0.66666 1.0] を逆行列で変換すると[-0.6666 0.6666 0.0 0.33333]になるから
またwの0.3333で割ってやれば[-2 2 0 1]に戻る

クリックした画面のワールド座標は、スクリーン座標[160 80 0 1]の(x,y)だけではダメで
glReadPixelsのGL_DEPTH_COMPONENTでzも拾ってこないと
OpenGLならgluUnProjectを使うのが楽
55デフォルトの名無しさん:2012/05/09(水) 01:52:58.21
RBOをコピー等のオーバヘッドなしでテクスチャオブジェクトとして振舞わせることは可能ですか?
56デフォルトの名無しさん:2012/05/09(水) 08:22:22.46
不可能です
最初からテクスチャに描けよ
57デフォルトの名無しさん:2012/05/09(水) 13:36:10.32
GLSLについて質問があります。
fragmentシェーダ内でアクティブであるテクスチャの横幅、縦幅を取得する方法はありますか?
現在はuniform float pixel_size_x;等の変数を作成しセットして利用しています。
これが自動的に求められる(シェーダ内で関数を用いる等で)と、
例えばポストプロセスでガウスをかける時に非常に簡単になるのですが
このような関数はありますでしょうか。
もし存在しており、ご存知の方がいればご教示のほうお願いします。

58デフォルトの名無しさん:2012/05/09(水) 19:24:55.90
textureSize()
59デフォルトの名無しさん:2012/05/09(水) 23:53:05.80
>>56
ありがとうございます。デプステクスチャが使えないandroidなもんで...
60デフォルトの名無しさん:2012/05/10(木) 10:23:49.32
GLUTでの視点の操作について質問させていただいてもよろしいでしょうか。
平面を移動する物体があります。
物体の向き(進む方向)の真後ろから物体を見たいのですが、
視点の位置がうまく導き出せません。
物体の操作方法は
http://www.wakayama-u.ac.jp/~tokoi/opengl/ex-a.html
のページを参考に
r-=(マウスのX座標)/10.0;
(物体のX座標)+=(マウスのY座標)*sin(r*π/180.0)/100.0;
(物体のZ座標)-=-(マウスのY座標)*cos(r*π/180.0)/100.0;
で導出しています。
まだまだわからないことばかりで大変恐縮ですが
何卒ご教示のほうお願いします。
61デフォルトの名無しさん:2012/05/10(木) 10:55:59.11
何が分からないのか意味不明
何をやりたのかも意味不明

62デフォルトの名無しさん:2012/05/10(木) 12:26:11.62
申し訳ありません。
物体が平面の上を自由に動くプログラムを作りたいのですが、
その際に視点を物体の真後ろに固定したいのです。
物体を自由に動かすことは自分でできたのですが、
視点が物体の真後ろに固定する方法がうまく見つからず、アドバイスをいただきたい
という内容です。
63デフォルトの名無しさん:2012/05/10(木) 12:37:15.88
物体の位置からのオフセットを決めて視点の位置に物体の位置+オフセット値を入れれば
取り敢えずケツにくっついて動くよね。
物体が回転したら視点の位置ベクトルに物体の回転量を掛ければいい。
64デフォルトの名無しさん:2012/05/10(木) 12:39:26.47
物体の場所が判っていて物体の向きも判っているなら、視点も視線も判るべさ。
65デフォルトの名無しさん:2012/05/10(木) 12:43:28.33
>>62
物体の前方を意味する方向ベクトルを v とし、
物体の中心位置の位置ベクトルを p とする。

カメラの位置ベクトルを p - l * v とする(l は物体とカメラの間の距離)。
カメラの視線の方向ベクトルを v とする(あるいはカメラの注視点の位置ベクトルを p とする)。
カメラの天頂方向の方向ベクトルは適当に設定する(普通は物体の天頂方向と同じにする)。

カメラの3つのベクトルをこのように設定すれば、
基本的にはとりあえずこれで望みのことは出来るはず。

ただ、これだと物体がほんの少しでも向きを変えれば、その瞬間に
カメラは注視している物体の周りを「大きく」回ることになるので、
たいていは非常に見難いことになる。
カメラの移動を遅らせたり、慣性を付けたりして工夫する必要がある。
6662:2012/05/10(木) 14:08:58.64
>>63
>>64
>>65
おかげさまで無事に動くことができました。
わかりやすいアドバイスをありがとうございました。
6757:2012/05/11(金) 18:51:37.97
>>58
57です。レスありがとうございます。
また、返信が遅れてしまい申し訳ありませんでした。

そのままの名前だったのですね・・・。
バージョン1.3から使えることを先ほど確認しました。
おかげでGL側のコードが非常にスマートに書けそうです。ものすごい嬉しいです。

本当にありがとうございました。
68デフォルトの名無しさん:2012/05/11(金) 20:34:43.97
※ OpenTKです
GL.BindBuffer (BufferTarget.ElementArrayBuffer, glResources[ibuf]);
GL.BindVertexArray (id);
GL.BindBuffer (BufferTarget.ArrayBuffer, glResources[positions]);
GL.DrawElements (省略)
みたいに
(1) ElementArrayBufferをバインドして
(2) バーテックスアトリビュートをバインド
(3) DrawElements
するとメモリアクセス違反で落ちます。
(1)と(2)を入れ替えると正常に動作します。
DrawElementsの直前でElementArrayBufferをバインドしなければならない
という制約はありますか? もしくは何かすごい勘違いをしてますか?


69デフォルトの名無しさん:2012/05/11(金) 21:32:52.15
わかりました
glBindVertexArray()の前にglBindBuffer(GL_ELEMENT_ARRAY_BUFFER)を呼ぶと落ちます
本にはVAOのバインドはカレントのバッファーポイントを変更しないと書かれていますが、
ATIだと思いっきり変更してくれるようです。
やれやれ

70デフォルトの名無しさん:2012/05/11(金) 21:39:48.43
解決乙
いろいろあるよね(´・ω・`)
71デフォルトの名無しさん:2012/05/11(金) 22:16:44.82
しつこくてすみません。OpenGL4.2の仕様書にはVAOの保存されるステートに
ELEMENT_ARRAY_BUFFERが明記されていて初期値0で初期化されると書いてあります。
というわけでATIの動作は正しいです。
本(OpenGL Super Bible)の記述が間違えています
あとIntelドライバーだと保存してくれないみたいです。
http://stackoverflow.com/questions/8973690/vao-and-element-array-buffer-state
72デフォルトの名無しさん:2012/05/12(土) 22:35:00.25
固定シェーダーとまったく同じ機能のGLSLコードどこかに落ちてませんか?
73デフォルトの名無しさん:2012/05/13(日) 00:07:38.80
固定シェーダーではマルチテクスチャだったり、合成方法だったり関数で指定するだけだが、
シェーダーは使う機能ごとに異なる記述しないといけないから、何をもってして固定と同じと呼ぶかがそもそも不明。
74デフォルトの名無しさん:2012/05/13(日) 00:10:12.78
質問は日本語で
75デフォルトの名無しさん:2012/05/13(日) 00:33:14.20
OpenGL ES の本とか参考になるかも。
76デフォルトの名無しさん:2012/05/13(日) 02:19:52.08
Mac+GeforceでGLSL描写がすこぶる遅いって話を聞いたんだけど
これはOSとGPUの相性だったりしますの?
7772:2012/05/13(日) 10:19:45.94
いやシェーダーにFogColorとかあって
それをセットすれば固定シェーダーと同じ画像が得られるというだけですよ?
探せばありそうですが意外と無いです
78デフォルトの名無しさん:2012/05/13(日) 12:06:50.44
お前は何を言っているんだ・・・・
79デフォルトの名無しさん:2012/05/13(日) 12:39:18.45
>>78
OpenGL2まではFogは固定機能であったんだよ。
それともシェーダー=プログラマブルシェーダーっていう最近の子なのかい?

>>72
適当にググったのだとこの辺とか?ES2.0向けっぽいけど、このくらいなら違いはないっしょ。
http://code.google.com/p/gles2-bc/source/browse/trunk/Sources/OpenGLES/OpenGLES20/shaders/?r=4

まぁこの手のオープンソースプロジェクト漁るのが王道かな。
80デフォルトの名無しさん:2012/05/13(日) 19:45:28.84
自分で使ったことはないけど似たようなものがShaderGenで作れると思う
http://3dshaders.com/home/index.php?option=com_weblinks&catid=14&Itemid=34


81デフォルトの名無しさん:2012/05/15(火) 02:35:19.89
微妙にスレ違いかもしれないけどGL関係なので・・・。
C++でglew.hを複数回includeしてしまうとエラーを吐く仕様なのは理解しています。
現在、
クラスのメンバ関数のデフォルト引数にGLenum型の定数を、
クラスのメンバ変数の型にGLenum型を利用したいと思っています。

例)
classA.h ←glew.hをinclude
classB.h ←glew.hをinclude

これらのヘッダを相互にincludeすると先程のエラーを吐くとおもいます。
現在はこの問題に対してglew.hの中から使用する型や定数の部分を抜き出して
ヘッダ上部で前方宣言することで解決しています。
よりスマートな解決法をご存知の方がいましたら教えて頂けないでしょうか。

82デフォルトの名無しさん:2012/05/15(火) 02:43:18.67
インクルードガードが付いてるのに複数回 include でエラー吐くとは思えんが。
83デフォルトの名無しさん:2012/05/15(火) 02:45:20.15
#ifdef ヘッダーで検索してみろ
84デフォルトの名無しさん:2012/05/15(火) 02:50:12.92
classA.hとかclassB.hにインクルードガードが付いてないとかが原因だったりして…。
85デフォルトの名無しさん:2012/05/15(火) 03:23:31.62
>>82
>>83
>>84
レスありがとうございます。
申し訳ありません、自己解決しました。
エラー内容は下のようなモノだったのですが
C1189: #error : gl.h included before glew.h

どうやら、自作のGLヘッダの前にOpenCLのc++ラッパ用ヘッダcl.hppを
includeしたのが問題だったようです。(内部を確認しにいったところgl.hが・・・。)

スレを汚してしまい申し訳ありません。
86デフォルトの名無しさん:2012/05/15(火) 22:33:18.02
知らんがな
87デフォルトの名無しさん:2012/05/16(水) 00:31:25.47
すいません。
openglのポリンゴンのオブジェクトを作った後、バインドしなきゃ
有効なならないとか解説されてますが。
バインドっていったいなにをやっているんですか?なぜ必要なのでしょうか?
88デフォルトの名無しさん:2012/05/16(水) 00:54:23.05
質問は日本語でおねがいします
一体どこでそんな解説を見てきたんですか
OpenGLにポリゴンのオブジェクトなんて物は存在しません
89デフォルトの名無しさん:2012/05/16(水) 01:03:00.42
ポ、ポリゴンじゃねえよ!
90デフォルトの名無しさん:2012/05/16(水) 01:12:56.60
ぬ〜ぶすだ、ぬ〜ぶす!
91デフォルトの名無しさん:2012/05/16(水) 03:49:19.13
glBindBufferじゃね?
92デフォルトの名無しさん:2012/05/16(水) 04:01:08.88
>>88
お前は本当に頭が悪いな。どこにポリゴンなんて書いてある?
ちゃんと「ポリンゴン」と書いてあるだろう。
恥かく前にゴミは消えろ
93デフォルトの名無しさん:2012/05/16(水) 09:17:10.03
>>92
ポリンゴンって、スタートレックみたいだなーと思ったぉ。
94デフォルトの名無しさん:2012/05/16(水) 09:24:16.13
それクリンゴンや
95デフォルトの名無しさん:2012/05/16(水) 09:30:25.03
某MMOのMobの名前か?
96デフォルトの名無しさん:2012/05/16(水) 12:42:22.88
三角形の秘密を教えてくれないいけずな奴だろ
97デフォルトの名無しさん:2012/05/16(水) 13:08:47.21
は?なに?
98デフォルトの名無しさん:2012/05/16(水) 13:17:57.51
それはポリンキリー
99デフォルトの名無しさん:2012/05/16(水) 13:26:23.97
>>98
自演だろ (ノД`)
100デフォルトの名無しさん:2012/05/16(水) 20:08:11.61
やっべww俺今度からポリンゴンて言うわww
101デフォルトの名無しさん:2012/05/18(金) 00:53:12.25
GLSLのフラグメントシェーダで、これから点を描こうとしてるバックバッファのドットの色って取得できるんでしょうか?
カレントの色を拾ってきて、それに何か加工するような処理を入れたいんですが・・・。
102デフォルトの名無しさん:2012/05/18(金) 01:03:27.88
どの環境なのかわかんないけど
たぶんできない
レンダリングターゲット作って描画して
それを使ってなにかする系が普通らしいです
簡単な計算だったらBlendFuncとかいじればいいよ
103デフォルトの名無しさん:2012/05/18(金) 01:06:39.95
ありがとうございます う〜んダメなんですね
描画結果をテクスチャに貼って、マルチテクスチャで混ぜるようなカンジですか・・・
面倒です!!!
104デフォルトの名無しさん:2012/05/18(金) 08:17:08.59
OpenGL4.2で追加されたARB_shader_image_load_storeは任意のテクスチャ配列に対してフラグメントシェーダで自由に読み書きできるらしいからそれ使えば出来るんじゃない。
多分DirectX11のUnorderedAccessView相当の機能だと思うから、やりたいことによっては使えないだろうけど。
105デフォルトの名無しさん:2012/05/21(月) 11:13:29.02
>>103
それ面倒とか言ったら何も出来ないと思う
106デフォルトの名無しさん:2012/05/24(木) 00:31:10.25
linuxでRenderMonkeyみたいなのないでしょうか?
107デフォルトの名無しさん:2012/05/24(木) 11:29:34.59
犯人特定できてないうちは俺らの負け
108デフォルトの名無しさん:2012/05/25(金) 02:04:41.82
でお前らエウレカ環境遮蔽は見ているのか
109デフォルトの名無しさん:2012/05/25(金) 21:51:13.31
固定シェーダーをパクったGLSLを書こうとしています。

struct LightInfo {
 int  Type;
 vec4 Position;
 vec3 Color;
};
uniform LightInfo Light[8];

と書いてglGetActiveUnfiform()でユニフォーム変数の名前とサイズ、型を取得すると

name = "Light[0].Type"
size = 1
type = INT

みたいな値が8個返ってきます(配列ではなく...)。
ユーザー定義の配列の型は何が帰ってくるのが正しいのか?
配列で返ってくるにはどうすればいいのか?
を教えていただけないでしょうか



110デフォルトの名無しさん:2012/05/26(土) 00:16:48.42
GetActiveUniformの返してくる型にはユーザ定義型や配列なんてのはないから「配列で返ってくる」ことはないよ
今の状態が正しい
もし配列的に設定したいならUniform Blockを使ってバッファオブジェクトを設定するといいよ
111デフォルトの名無しさん:2012/05/28(月) 16:22:03.73
VertexShader、FragmentShaderともにエラーもなくコンパイルもできており、
きちんとAttacheShaderもしてるのに、LinkProgramをすると失敗します。
おまけにglGetShaderivでログの長さを調べるとゼロになってます。

いままでLinkが失敗したことなんてなかったのでさっぱりなのですが、
こういった場合何が悪いのでしょうか。
112デフォルトの名無しさん:2012/05/28(月) 17:25:30.63
VertexShaderのoutとFragmentShadreのinが一致してないんだろ
エラーはGetProgramInfoLogに書いてあるはず
113デフォルトの名無しさん:2012/05/28(月) 17:44:11.76
>>112
レスありがとうございます。
それぞれinとoutは以下のようになっており、一致しているのですが・・・。
// vertex shader
in vec3 in_pisition;
in vec3 in_color;

out vec3 o_Color;
114デフォルトの名無しさん:2012/05/28(月) 17:46:17.16
途中で送信してしまいました。
続きです。
// fragment shader側の変数
in vec3 o_Color;
out vec4 FragColor;

GetProgramInfoLogでみようにも、glGetShaderiv(handle, GL_INFO_LOG_LENGTH, &loglen)
で帰ってくる長さがゼロなんです。
適当にバッファサイズ増やしてみて無理やりGetProgramInfoLogしてみても何もはいって
きません。
115111:2012/05/28(月) 19:07:12.45
すみません、自己解決しました。
ステータスチェック用の変数を0で初期化してしまっており、
GL_FALSE扱いになっていました。

GLint status;
glGetShaderiv(this->handle, GL_LINK_STATUS, &status);

とやると、成功してるとなにもはいってこないんですね・・・。
116デフォルトの名無しさん:2012/05/28(月) 19:22:35.96
リンクはglGetShader()ではなくglGetProgram()だけどな
なんかいろいろ単純ミスをしてる感じ
117デフォルトの名無しさん:2012/05/28(月) 19:26:50.81
>>116
ぁ・・・・そうですね、そりゃログ取れないですよね・・・

すごく単純なミスでした、すみませんorz
118デフォルトの名無しさん:2012/05/30(水) 09:51:01.84
PBOについて勉強中なのですが、ただ単純に画像ファイルデータを
そのままポリゴンへ貼り付ける場合にはPBOを介した方が早くなるのでしょうか?

VBOと同じように「GPU側へ予め転送しておく事で高速に描画できる」ものなのかと認識していたのですが、
サンプルソースを探してみても、MapBuffer/UnmapBufferを利用して何らかの処理を施してからテクスチャとして
利用するものばかりなもので・・・画像データをそのまま貼り付けるソースが見当らず戸惑っております
119デフォルトの名無しさん:2012/05/30(水) 10:28:15.67
何をやりたいのかサッパリ分からんが
PBOとか使わずに普通にテクスチャーを貼ればいいんじゃね
120118:2012/05/30(水) 15:13:19.55
「頂点配列→描画」よりも「頂点配列→VBO→描画」
121118:2012/05/30(水) 15:14:26.54
すみません、途中送信してしまいました

「頂点配列→描画」よりも「頂点配列→VBO→描画」の方が処理が早くなるのと同じように
「画像ファイル→テクスチャ」よりも「画像ファイル→PBO→テクスチャ」の方が早いのかと
お聞きしたかったのです
122デフォルトの名無しさん:2012/05/30(水) 16:40:19.17
毎フレームテクスチャが変わる(動画テクスチャやアニメーションテクスチャ)の?
単に画像ファイルを貼りたいだけなら意味ないんじゃね。普通使わない。
123デフォルトの名無しさん:2012/05/30(水) 16:42:24.66
「画像ファイル→TO→テクスチャ」が一番速いに決まってるだろ・・・
何で標準で用意されている最も簡単で最も速い方法を使わずに
アクロバティックな方法を採用したがるのか・・・
124デフォルトの名無しさん:2012/05/30(水) 17:06:41.08
>>121
テクスチャを書き換えするならPBO使え
125デフォルトの名無しさん:2012/05/30(水) 17:30:09.18
他人のアドバイスにケチをつけるつもりはないが無意味
126デフォルトの名無しさん:2012/05/30(水) 17:44:29.57
そもそもそこはボトルネックなのか?
127デフォルトの名無しさん:2012/05/30(水) 23:05:37.22
ttp://asura.iaigiri.com/OpenGL/gl43.html
のサンプルプログラムを実行したところ、次のようなエラーが出てしまいました
GLUT: Fatal Error in c:\〜〜〜〜.exe: pixel format with necessary capabilities not found.

おそらくglnterleavedArraysあたりでエラーを吐いてるんじゃないかと思うのですが
glnterleavedArraysは諦めたほうが良いのでしょうか?
128デフォルトの名無しさん:2012/05/30(水) 23:17:02.13
pixel format with necessary capabilities not found.
ってしっかり書いてあるじゃねぇか、glnterleavedArrays関係ないよ。
初期化部分で指定してるRGBAとかDepthのサイズが対応してないんじゃないかな
129デフォルトの名無しさん:2012/05/31(木) 00:00:47.64
>>128
ありがとうございました
動くようになるまで初期化部分を試行錯誤してみます
130デフォルトの名無しさん:2012/05/31(木) 18:04:03.08
すいません超初心者なんですけど
CとopenGLでボーンアニメーションを動かすことってできますか?ぐぐっても、C++ばっか出てきちゃって
131デフォルトの名無しさん:2012/05/31(木) 18:31:35.66
できる
132デフォルトの名無しさん:2012/05/31(木) 19:20:15.06
よろしければ、やり方か参考になるサイトなんかを教えてもらえませんか?
133デフォルトの名無しさん:2012/05/31(木) 19:26:21.01
お前が見つけたC++のソースが参考になるだろ。
134デフォルトの名無しさん:2012/05/31(木) 23:46:49.79
シェーダー使うか使わないかでもだいぶ違うし
一口にこれというのはないな
135デフォルトの名無しさん:2012/06/01(金) 10:52:42.26
c++でもcでも出来ることはだいたい一緒だよ
継承とかを多用されてたらやや面倒臭い程度

ところでスレチになったらすまないんだが、OpenGLを使ってゲーム製作中なんだけれどもdxと違ってサウンド機能が無いのが辛い
GLのように広いプラットフォームで利用できて、ある程度高速に実行できるサウンドライブラリはないだろうか
136デフォルトの名無しさん:2012/06/01(金) 12:22:16.82
SDL Audio
137デフォルトの名無しさん:2012/06/01(金) 12:28:45.52
OpenALは
138デフォルトの名無しさん:2012/06/01(金) 12:37:52.25
OpenALなんてものがあったのか
クロスプラットフォームなのに加えてGLライクに書けるみたいだし、早速試してみるわ
ありがとう
139デフォルトの名無しさん:2012/06/04(月) 13:35:38.51
glext.hにglBindTextureARBがねぇ!
140デフォルトの名無しさん:2012/06/04(月) 13:44:23.03
glew使えよ
141デフォルトの名無しさん:2012/06/04(月) 13:53:58.84
glewにもgoogleにも軽く聞いてもなかったよ
142デフォルトの名無しさん:2012/06/04(月) 16:16:53.81
glBindTextureEXTじゃね?
しかし今更OpenGL1.0の環境もないだろうからglBindTextureでいいと思うがな
143デフォルトの名無しさん:2012/06/04(月) 17:56:48.15
そもそもないってなんだよ。
コンパイルエラーなのか、定義がないのか、IntelliSenseで出ない(笑)のか
144デフォルトの名無しさん:2012/06/05(火) 03:53:41.43
定義
145デフォルトの名無しさん:2012/06/05(火) 04:12:42.13
glBindTextureEXTの間違いじゃね?
>>142も言ってるけどglBindTextureでおk
146デフォルトの名無しさん:2012/06/05(火) 08:45:56.76
英語のforumでもそんな感じの解答だったしやっぱりそうなのかな。とりあえずありがとう
147デフォルトの名無しさん:2012/06/05(火) 11:11:16.05
そもそもglBindTextureARBという名前はどこから出てきたんだよ
何が元でglBindTextureARBの存在を信じていたのかが知りたい
148デフォルトの名無しさん:2012/06/05(火) 11:18:36.43
便乗質問。

glBindTextureって遅いので、起動時に一回だけ
実行して、あとはそのまま描画してglBindTextureを
二度と実行しないという方法で高速化して動いてるんだけど、
この方法で問題ないですか?

というか、glBindTextureでバインドしたテクスチャが
消える条件が良く分からない。

149デフォルトの名無しさん:2012/06/05(火) 12:12:25.06
テクスチャー変更しないなら最初に1回だけ指定すればOK
ってか別に遅くないだろ
150デフォルトの名無しさん:2012/06/05(火) 12:14:43.06
>>147
yunoの雑記帳 - GL_ARB_multitexture
http://sugarpot.sakura.ne.jp/yuno/?GL_ARB_multitexture
151デフォルトの名無しさん:2012/06/05(火) 12:37:31.88
>>148
遅いのはglTexImageXd系でglBindTextureは遅くないと思うのが
152148:2012/06/05(火) 13:48:37.06
>>149
ありがとうございます。っていうか、えっ?!と
思ったら>>151 !!!

サンプル改造して動かすだけじゃなく、ちゃんと
中身理解しないとダメですね……
153デフォルトの名無しさん:2012/06/05(火) 14:04:02.53
そのglTexImage2D()も充分速かったりするけどね。
154デフォルトの名無しさん:2012/06/05(火) 19:35:13.98
そもそも割り当てたテクスチャ変更しないならglBindTextureも
glTexImage2Dも作成時に1回しか呼ばないから何も問題ない。
※描画時にBindTextureしないのはGLSLの話

単に貼るテクスチャ変えるなら複数枚作っておいて切り替えればいい話。
155デフォルトの名無しさん:2012/06/06(水) 01:15:18.36
一枚のテクスチャの中に
@ABC
DEFG
HIJK
LMNO
と言う感じで、複数枚のコマ送りの画像を埋め込んでおいて
UV座標で@だけをマッピング→Aだけをマッピング→Bだけをマッピング・・・
として簡単なアニメーションをさせていたんだけどこれじゃダメかな?
156デフォルトの名無しさん:2012/06/06(水) 02:27:32.73
どういう用途か分からないけどそれはそれでいいよ。
2Dゲームのキャラのアニメーションとかはそうやるし。

使ってないならディスプレイリストも使うといいかもね
157デフォルトの名無しさん:2012/06/06(水) 10:57:43.32
>>155
テクスチャアトラスでググると吉。俺も2Dゲーム
作ってるんで、その方法で行ってる。
158デフォルトの名無しさん:2012/06/07(木) 16:22:23.29
質問です。
GLSLでバリアンスシャドウマップをやろうとしています。

シャドウマップ作成、
色情報内にライトまでの距離と距離の2乗を格納

ガウスフィルタでシャドウマップをぼかす

ぼかしたシャドウマップで距離を比較して影をつける

これでやろうとしているのですが、
ガウスでぼかしたタイミングで
周りの描画されていない部分の色(ここでは白)と混ざって
ぼかした部分の格納した距離が描画していない部分の距離と混ざってしまい、
距離が正しく比較できなくなり、ぼかした部分が表示されないのですが、
ぼかすのが間違っているのでしょうか???

描画していない部分は白(1.0, 1.0, 1.0)なので
ライトまでの最短距離が0.0,最長距離が1.0に変換しているとすると
混ざって大体最長距離になってしまうっぽいのですが…。
159デフォルトの名無しさん:2012/06/07(木) 23:52:59.31
ぼかすのは近隣の深度値も見て影を描きたいという意味なので、背景描いてないなら正しい挙動でしょう
嫌ならちゃんと背景を描いてやるか、ぼかすのをやめるしかない
160デフォルトの名無しさん:2012/06/08(金) 11:18:37.34
>>159

やっぱりそうなのですね…。
背景も描いてみて頑張ってみます。
ありがとうございます。
161デフォルトの名無しさん:2012/06/08(金) 12:45:19.69
シェーダーって1回だけ実行すればいいように作りますか、
それとも何回かに分けて実行しますか
162デフォルトの名無しさん:2012/06/08(金) 13:07:08.67
語りえぬものについては、沈黙しなければならない。
163デフォルトの名無しさん:2012/06/09(土) 16:25:55.05
glClear(赤,緑,青,透明度)
この透明度の値を変えると,背景にどのような変化がありますか。
自分の持っているプログラムで試しても変化がわかりませんでした。
164デフォルトの名無しさん:2012/06/09(土) 16:29:47.78
>>163
その透明度を計算に利用する時に影響が出る。

当然その透明度を使わなければ見た目何の変化もない。
165163:2012/06/09(土) 16:33:13.60
>>164
なるほど納得です。ありがとうございます。
166163:2012/06/09(土) 16:35:59.31
連投すみません。
ソースコードの間違い探しってここに晒せば見てもらえますか。
長めかもしれないんですけど。
167デフォルトの名無しさん:2012/06/09(土) 16:39:49.86
思わず探したくなるようなコードなら、探すかも知れん

クソなコードなら無視する
168163:2012/06/09(土) 16:50:58.41
げげ。一応晒してみようか…な…。

とあるサイトで、
「X-Y平面、Y-Z平面にポリゴンを描画し、クリックした所の
三次元位置を取得せよ。」
という問題と、それの答えが公開されていたサンプルをもらいました。

いざ実行してみると、正しく座標が取れないことがあったので、
まだ直すところがあるのかどうかを見てもらいたいです。
次にソースをさらします。
169デフォルトの名無しさん:2012/06/09(土) 17:01:31.32
ディスプレイ座標とデプスから逆算する奴なら、誤差があるのは当然だけど、
まさかその話じゃないよな。
170163:2012/06/09(土) 17:08:07.62
>>169
そうでした。クソでした。
全力でごめんなさい。
171163:2012/06/09(土) 17:25:18.70
一応投下します。
http://codepad.org/uTZTuch0
172デフォルトの名無しさん:2012/06/09(土) 17:38:13.85
投下したってことはまだ何か聞きたいことがあるの?
173デフォルトの名無しさん:2012/06/09(土) 17:50:33.32
義理と人情ってやつだろう。
174デフォルトの名無しさん:2012/06/09(土) 17:55:01.58
ギリトニン錠
175デフォルトの名無しさん:2012/06/09(土) 17:55:22.80
2次元のディスプレイ(しかも高々数千×数千の解像度)と言う少ない情報から、
3次元と言う高次の情報を無理矢理得ようとしているんだから誤差は付き物

逆算は誤差が出ることを前提にプログラムしなきゃならないよ
176163:2012/06/09(土) 18:01:32.12
>>171
は、間違えてボタンを押して投下しまっていたみたい。
お気遣いありがとうございます。
ご迷惑おかけしました。
177デフォルトの名無しさん:2012/06/09(土) 18:08:29.06
>>175
> 2次元のディスプレイ

縦横にデプス加えて3次元だぞ。誤差が大きくなるのは、単に透視投影の際のデプス値の入り方のせい。
178デフォルトの名無しさん:2012/06/09(土) 19:00:31.83
3Dのアクションゲームを作っています
ダメージを受けた時に「画面を揺らす」と言う効果を実装したいのです

現在は全描画物に対して僅かにglTranslateさせると言う方法で行なっていますが、
これよりもスマートで良い方法があればご教示下さい
179デフォルトの名無しさん:2012/06/09(土) 19:05:01.97
View行列にTranslateすればいいのでは
180デフォルトの名無しさん:2012/06/09(土) 19:05:16.18
>>178
全描画物ではなく、カメラの方を僅かに揺らす方が良い
181デフォルトの名無しさん:2012/06/10(日) 09:41:39.74
>>161
誰かこれ教えて下さい。
多分MeshクラスにShaderProgramクラスを持つことになって
1つ持つべきかN個持つべきか迷ってます
182デフォルトの名無しさん:2012/06/10(日) 09:54:26.59
1回で描けるなら1回で描くし
描けないなら複数回で描く
それだけのことよ
183デフォルトの名無しさん:2012/06/10(日) 10:16:38.37
>>182
複数回で描いた方が良いシェーダーって例えばどんなの?
184デフォルトの名無しさん:2012/06/10(日) 10:23:13.82
描けないならっつってんだろ
185デフォルトの名無しさん:2012/06/10(日) 10:42:55.67
>>184
不快な思いをさせたようで申し訳なかった
どういう時に描けないのか、何か例を知っているのなら、という意味で聞いたんだ
186デフォルトの名無しさん:2012/06/10(日) 11:24:22.13
シャドーマップとかディファードレンダリングとか、トゥーンシェーダーの輪郭とか複数回描く奴ならいろいろあるし、
そうじゃない特殊なケースもある。いろいろでしょ
187181:2012/06/10(日) 12:37:18.38
今の予定だと
(1) (ボーン)TransformShader => 頂点の変形
(2) MaterialShader => マテリアル係数の書き出しとテクスチャー
(3) LightShader => ライティング
の3種類を考えています。
これをレンダリングするためには単純に一回だけレンダリングするだけでは駄目で
多分シェーダーとフレームバッファー)を取り替えながら3回回す必要があります。
で、3回x(ShaderProgram+UniformArray+VertexArray)とレンダーターゲットの変更とかやると
すごく長くなりそうで死にそうなんですがどうすればいいですか
188181:2012/06/10(日) 12:39:33.59
あとシャドーは別パスで。
シャドーマップ作る時はマテリアルはいらないので
その時だけシェーダーを単純なのに取り替える?
それはどういうAPIがあればいい?
シェーダーを複数セットできるようにしておいて
レンダリングの時にpass=1とか送って
使用するシェーダーを決めればいい?

189デフォルトの名無しさん:2012/06/10(日) 20:13:11.38
glGetErrorってもしかしてレンダリングデバイスコンテキスト毎にエラーをストックしていて、それを返している?
デバイス設定直後いエラーがある場合は、前にそのデバイスを使っていた時のエラーを返している可能性があるのか・・?
190デフォルトの名無しさん:2012/06/10(日) 20:16:42.91
ってちょっと調べればわかるよな、ビンゴだった
191171:2012/06/10(日) 21:16:55.03
たびたびすみません。
http://codepad.org/uTZTuch0
なんですが、タイマー関数の存在って何か意味がありますか。
c(28)C4113:
"void (__cdecl *)()" はパラメータ リストが "void (__cdecl *)(void)"と異なる
という警告が出るんですが、これの解決法はありますか。
192デフォルトの名無しさん:2012/06/10(日) 21:32:35.65
>>191
display 関数内でアニメーションしてるわけでもないから、
これだけならタイマー関数を使う意味は無いように思える。

警告の方は、display 関数のシグネチャを
void display() から void display(void) に変えてみるとか。
193デフォルトの名無しさん:2012/06/10(日) 21:32:40.44
glGetErrorをglBeginとglEndの間で使っちゃいけないってすごい落とし穴
194171:2012/06/10(日) 21:49:36.46
>>192
了解しました。警告は直したところ出なくなりました。
ありがとうございます。
195デフォルトの名無しさん:2012/06/10(日) 23:40:22.22
>>187
その程度で死にそうになってたらこの先確実に死ぬぞ
設計はDirectXのエフェクトやCgFXなんかの既存のエフェクトシステムや
OpenSceneGraphとか各種ゲームエンジンなんかの描画システムをまず参考にするといいんじゃないかな
196デフォルトの名無しさん:2012/06/11(月) 02:48:35.42
そこでlispという選択肢もありですよ
197デフォルトの名無しさん:2012/06/11(月) 07:33:14.45
またそんな格好(カッコ)ばかりつけて
198デフォルトの名無しさん:2012/06/13(水) 17:46:16.00
GL_FOG を適用したテクスチャを GL_BLEND で背景テクスチャとαブレンドしたいのですがどうすればいいでしょうか?
フォグの色は
float fogColor[] = { 0, 0, 0, 1 };
glFogfv( GL_FOG_COLOR, fogColor );
で、ブレンドに
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
とすると、ブレンド後にフォグの黒い部分が背景に現れてしまいます。
glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
だと、色が加算されてしまいます。

フォグ適用結果のアルファ値だけを利用する手段はないのでしょうか?
よろしくお願い致します。
199デフォルトの名無しさん:2012/06/13(水) 23:18:22.91
フォグ色のアルファ値は使われないので無理です
諦めてシェーダ書いてください
200デフォルトの名無しさん:2012/06/14(木) 00:00:33.79
回答ありがとうございます
マニュアルに書いてありました。どーもすみません。
あしたシェーダ書いてみます。初体験です。(今までのコードと共存出来るのかな?)
201デフォルトの名無しさん:2012/06/14(木) 15:08:08.85
>>200
共存、て話で言うと、シェーダコードは別のプログラム(GLSL)を書いて、それを自分の処理の途中で使うように指示するだけで、
自分の処理そのものを大きく変えるようなアプローチでは無いから大丈夫

もちろん、引き渡す内容に関して、それを管理する引き渡す部分の処理は追加になるけど

そしてシェーダコード自体は新たに書くことになるけど、それは当たり前と言うことで
202デフォルトの名無しさん:2012/06/14(木) 18:32:53.46
>>201
シェーダ書きました。
まだまだ改良の余地はありますが、単体テストではいい感じになりました。
教えて頂いて感謝です。

次に共存・共生についてですが
実はこのレンダリングを行う関数はDLL内部にあります。
DLLの初期化時にシェーダプログラムを作成し、親玉のレンダリング処理の一貫として
DLL内のレンダリング関数が呼び出される造りです。

単体テストで「親玉」に相当するものはシェーダなど全く使っていないため
いい感じで動作しました。
ところが「本物の親玉」では既にシェーダを使っていることが分かりました。

glUseProgram() でシェーダを切り替える必要があるのですが
DLL内のレンダリング関数が終了する直前に親玉のシェーダに戻したい場合
どうすればいいか悩んでいます。
(DLLのレンダリング関数を呼び出すときにIDも一緒に渡しておく... ちょ、I/F変更??)


そこで質問です。
その時点で使用されているシェーダのIDを取得する関数はありますか?
例) GLuint program = glNowUsingThisProgram(void);

よろしくお願いします
203デフォルトの名無しさん:2012/06/14(木) 18:46:19.64
>197
いや、今使っている道具の限界を知る上で有用だ
204デフォルトの名無しさん:2012/06/14(木) 18:59:22.85
すみません
PowerVR InsiderのOpenGL ES2.0のウィンドウズ版のSDKって
落とすのにログイン以外にする事あるんですかね?
3日ほど時間をあけて試しているのですが
毎回ダウンロードしようとすると
The page cannot be found
と出てしまうので・・・
ttp://www.imgtec.com/jp/powervr/insider/sdkdownloads/index.asp#GLES2
205デフォルトの名無しさん:2012/06/14(木) 19:18:19.13
>>202
glUseProgramをググって出てくるドキュメントみるとglGet()にGL_CURRENT_PROGRAMで拾えるっぽいこと書いてあるよ
206デフォルトの名無しさん:2012/06/15(金) 10:04:53.78
>>205
またまたすみません。
シェーダが元に戻るのを確認できました。
ドキュメントをちゃんと嫁!ですね。

ところで
シェーダを完全に切り替えるのではなく直前のシェーダの結果に追加したシェーダを合成する場合
皆さんはどのような方法をお使いでしょうか?

質問ばかりで申し訳ありませんが、よろしくお願い致します。
207デフォルトの名無しさん:2012/06/15(金) 23:51:35.08
>>206
シェーダ、2日目で限界を感じました・・

フラグメントシェーダ内でカメラからの距離が分からんのですか?!
z/wでは座標系によっては使えんのですね・・

致命的やん
208デフォルトの名無しさん:2012/06/15(金) 23:56:24.70
バーテックスシェーダーから渡せば?
209デフォルトの名無しさん:2012/06/16(土) 00:08:04.08
>>207
致命的って・・・

フラグメントシェーダに限らず一般的にシェーダというのは、
デフォルトでは得られない情報は外部から得るんだよ。
パイプラインの前段から情報を渡したり(>>208)、テクスチャから得たり。
210デフォルトの名無しさん:2012/06/16(土) 00:13:21.52
バーテックスシェーダって頂点座標だけでなくピクセルごとの(OpenGLでの)座標も取れるのですか?
何だか分からなくなってきました…(泣)
211デフォルトの名無しさん:2012/06/16(土) 00:20:49.66
>>210
バーテックスシェーダで頂点毎のデータを出力すると、
それが補間されてピクセル毎のデータとなり、
フラグメントシェーダに入力される。
212デフォルトの名無しさん:2012/06/16(土) 00:38:51.31
>>211
教えて下さい

例えば最終的に画面上で10x10の100ピクセルが表示されるとして
バーテックス、フラグメントのそれぞれのシェーダは何回ずつ呼び出されますか?

VERTは四隅の4回、FRAGは100回でしょうか?
それともVERT、FRAGとも100回ずつでしょうか?

「補完」のイメージがよくわかっておりません…
213デフォルトの名無しさん:2012/06/16(土) 00:41:05.41
バーテックスシェーダーは頂点数、フラグメントシェーダはピクセル数
補完はあるフラグメントに飛び込むポリゴンの部分の頂点に対する補完
214デフォルトの名無しさん:2012/06/16(土) 00:49:53.51
>>213
なんとなく解りました。
とすると、バーテックスシェーダーから渡すとしても「補間」される前の頂点の座標しか渡せないように思うのですが、まちがってますか?
215デフォルトの名無しさん:2012/06/16(土) 01:12:09.78
>>214
それが補完されるのだから十分であると思うけど・・・とりあえず間違ってはないと思う
216デフォルトの名無しさん:2012/06/16(土) 01:44:52.22
>>215
夜遅くまですみません…

バーテックスシェーダで算出した頂点座標(画面座標系かつユーザ変数)までもがフラグメントシェーダに渡った時点で対象ピクセルの画面座標(頂点とは限らない)に補間されるのでしょうか?
そんな器用なことできないですよね…


フラグメントシェーダ内で画面座標ではなくワールド座標系の変数、gl_FragWorldCoord みたいなのは無いんでしょうか?


テクスチャの淵の座標と視点座標ぐらいなら何とかなりますが、画面上に描画する淵以外のピクセル(補間された部分)だとそう簡単には行きません。。
(OpenGLさんが内部的にやってることと同じ処理を書く必要がある)

で、限界を感じ、致命的などと愚痴りました。(泣)
217デフォルトの名無しさん:2012/06/16(土) 01:54:37.93
>>216
器用も何も単なる線形補間
頂点毎に色を変えたポリゴンを描いたことはないの?シェーダの話以前に
ワールド座標系はバーテックスシェーダでgl_Vertexだったっけな、あるよ確か
あとそっから下に書いてあることはなんかよくわからんw
218デフォルトの名無しさん:2012/06/16(土) 03:47:18.72
だからlisp使えとあれほ(ry
219デフォルトの名無しさん:2012/06/16(土) 09:33:53.06
非効率指向のlisperはAVでもみてろよ
220デフォルトの名無しさん:2012/06/16(土) 12:15:02.34
いやうちlisperちゃうし
221デフォルトの名無しさん:2012/06/16(土) 14:21:43.99
俺はcpluserだし
222デフォルトの名無しさん:2012/06/18(月) 22:04:22.56
>>217
いろいろ教えて下さり、おかげさまで気持ちよく動作するようになりました。有難うございました。
VS内でカメラと頂点の距離を取得し、FSに渡して解決しました…
これで十分要件満たします。

223デフォルトの名無しさん:2012/06/19(火) 11:37:52.52
>>222
パイプラインの処理的にもそれであってる
224デフォルトの名無しさん:2012/06/20(水) 21:27:09.06
GLSLにおけるvarying変数でバーテックスシェーダからフラグメントシェーダに渡せる変数の数って制限があったりします?
225デフォルトの名無しさん:2012/06/20(水) 21:46:35.11
実装依存で制限。つまり環境によって制限数が違う
226デフォルトの名無しさん:2012/06/20(水) 22:10:04.74
やっぱり制限自体はあるんですね
float 20個くらいでリンクの時に必ずフリーズ起こすんですよね
こんなものですかね?環境依存なんでしょうけど
227デフォルトの名無しさん:2012/06/20(水) 23:46:04.04
varying変数の上限ってMAX_VERTEX_OUTPUT_COMPONENTSでいいの?
手元の仕様(4.0)では最小値64になってるけど
228デフォルトの名無しさん:2012/06/21(木) 01:10:19.81
MAX_VARYING_FLOATS?
229デフォルトの名無しさん:2012/06/21(木) 05:32:30.72
GL_MAX_VERTEX_ATTRIBS:16
GL_MAX_VERTEX_VARYING_COMPONENTS_ARB:16
GL_MAX_VARYING_FLOATS:68
で使ってるのが
varying vec4 x1
varying float x11
varying vec2 x8
:31 floats 20 components?
ここから一個でもfloatを削るとリンク通る(Render Monky)
というかrender monkyはこのチェックしないでフリーズしてしまうんだな
230デフォルトの名無しさん:2012/06/21(木) 21:00:29.70
別スレッドでjpgを読み込みそれをglTexture2Dに渡しています。
glTexture2Dを実行している間メインの描画スレッドがカクツキ、停まっているようなんですが
glTexture2D の部分を memcpy に置き換えてバッファに空書きならスムーズに動きます。
こんなんでしたっけ?
NVIDIA GeForce をつかっています。
231デフォルトの名無しさん:2012/06/22(金) 11:11:15.10
渡してるformat+datatypeがinternal_formatと違ってたら変換起きるから遅いよ
formatとinternal_formatは合ってるか?
232デフォルトの名無しさん:2012/06/24(日) 10:11:49.46
ちょっと暇な人付き合ってください
//vertex shader
#define N 20
varying v[N];
void main(void)
{
233デフォルトの名無しさん:2012/06/24(日) 10:18:17.03
↑ミス
//vertex shader
#define N 20
varying float v[20];
void main(void)
{
for(int i = 0 ; i < N ; i++)
{
v[i] = float(i);
}
gl_Position = ftransform();
}

//fragment shader
#define N 20
varying float v[N];
void main(void)
{
float c = 0;
for(int i = 0 ; i < N ; i++)
{
c += v[i]/N;
}
gl_FragColor = vec4( c, 0.0, 0.9, 1.0 );
}
//
このシェーダでrender monkeyか何かでNを増やしていって何処でハングするか・・・自分は以下で20で、floatをvec4に変えても同じという謎
Card name: ATI Radeon HD 4850
Manufacturer: ATI Technologies Inc.
Chip type: ATI Radeon Graphics Processor (0x9442)
234デフォルトの名無しさん:2012/06/24(日) 10:20:53.97
> varying float v[20];
235デフォルトの名無しさん:2012/06/24(日) 11:21:02.41
>>233
(VertexShaderをvarying float v[N];に変えて)39で落ちた。 
vec4に変えると32でエラー

GeForce GTX 580 (Driver 301.32)
236デフォルトの名無しさん:2012/06/24(日) 12:32:40.73
>>234
ああそういうことか、どうも

>>235
レスありがとう。
環境によってまちまちなようですな
でもやっぱり綺麗に4倍ではないのか、かといって同じでもないのか
リンクできないならリンクエラーになって欲しいがそうもならないし
237デフォルトの名無しさん:2012/06/24(日) 18:09:22.93
GLSLの変数のgl_Vertexにはオブジェクト座標空間の頂点座標が入ってるらしいんだけど、オブジェクトの頂点っていっぱいあるだろうから(立方体なら8個?)、これは配列なの??それとも頂点シェーダーはオブジェクトの頂点毎に実行されてるってことなの??
238デフォルトの名無しさん:2012/06/24(日) 18:22:27.59
頂点毎に実行されてる
だから頂点シェーダー
239デフォルトの名無しさん:2012/06/24(日) 18:27:41.17
>>238
そうだよね、答えてくれてありがとう
240デフォルトの名無しさん:2012/06/24(日) 20:08:52.38
まずちゃんとした本を読めと言いたい
241デフォルトの名無しさん:2012/06/24(日) 23:13:46.62
>定説に異論を唱え、議論を挑む姿勢
は評価してよいのではないか
242デフォルトの名無しさん:2012/06/25(月) 23:23:36.28
>>231
そうですか、遅いですか
でも別スレッドなんですよ?
glTexImage2Dに突入してから抜けるまで他のスレッドに移らないようにドライバ内で排他制御してるのかな?cpu->gpu転送時にそうしないといけないんでしょうかね?(でも転送前の変換してるときにはロックする必要もないと思うんだけど)
243デフォルトの名無しさん:2012/06/26(火) 00:36:13.86
>>242
別スレッドというのが新情報な気がするがまあいい
描画スレッド(glDrawElementsなんかで描画してる)と別なスレッドでglTexImage2Dを呼んでいるという理解でいいかな
その時各スレッドでOpenGLのコンテキストはどうなってる?
OpenGLでは大抵の実装で同じコンテキストに複数のスレッドから同時にアクセスしてはいけないことになってる
なのでglTexImage2Dをやるスレッドでは通常の描画コンテキストとは別に共有コンテキストを作って使うべきだ
244デフォルトの名無しさん:2012/06/26(火) 00:55:36.37
230で別スレッドって書いてあるし、当然共有コンテキストにしてるだろう。じゃないとできないし。
245デフォルトの名無しさん:2012/06/26(火) 00:58:35.32
ここってWebglの質問でも良いのかね?
常に最新のverで話されていて躊躇する
246デフォルトの名無しさん:2012/06/26(火) 01:22:17.38
いいんじゃね。わかる人いなければスルーされるだけなんだし
247デフォルトの名無しさん:2012/06/26(火) 09:10:15.38
どうせ過疎スレですし
248デフォルトの名無しさん:2012/06/26(火) 11:47:24.27
botの私もいますよ
249デフォルトの名無しさん:2012/06/26(火) 12:10:20.74
>>242
実はシングルコアのCPUで別スレッドなんです〜
とかだったら笑う。
250デフォルトの名無しさん:2012/06/26(火) 12:46:37.22
>>242
変換処理は、GPU内部で行っていたと思う。
そこは確かめた?
251デフォルトの名無しさん:2012/06/26(火) 16:39:06.96
>>242
>突入してから抜けるまで他のスレッドに移らないようにドライバ内で排他制御してるのかな?
>cpu->gpu転送時にそうしないといけないんでしょうかね?

一つの穴に何人もが突っ込んだら、穴裂けちゃうでしょ


>(でも転送前の変換してるときにはロックする必要もないと思うんだけど)

逆に自分がOpenGLの中側にいると想像して、中で管理するリストを持ってるとした時、
そのリストに追加変更処理発生するような場合、ロックしたくならないか?
252デフォルトの名無しさん:2012/06/26(火) 19:25:20.89
シェーダーの良質なサンプルが沢山あるサイトを教えてくだしい
253デフォルトの名無しさん:2012/06/26(火) 19:36:53.12
本ならあるんだが、まとまったサンプルがあるサイトは見当たらないね
254デフォルトの名無しさん:2012/06/26(火) 19:47:30.52
どんな本?
255デフォルトの名無しさん:2012/06/26(火) 20:18:55.35
俺もGLSLで画像処理する系の本は持ってるな
てか、「良質なサンプル」 ってのは、つまり難しい事を予め片っ端から製造済みのコードそのもの、って事か
よくわかんないからコピペで済ましたいって意味で
256デフォルトの名無しさん:2012/06/26(火) 20:53:25.25
さすがにそれは深読みしすぎじゃねw
257デフォルトの名無しさん:2012/06/26(火) 21:18:47.66
>>254
ShaderX とか GPU Pro なんて、良質でモダンなシェーダーてんこ盛りだよ
258デフォルトの名無しさん:2012/06/26(火) 21:48:52.20
>>251
glTexImage2D に渡す前に自分で変換してから渡したほうが速かった(・o・)ノ

ドライバ、しょぼ
259デフォルトの名無しさん:2012/06/27(水) 20:22:43.43
って、おいらのプログラムの方がショボイですが。。
(ρ_;)
260デフォルトの名無しさん:2012/06/28(木) 22:52:41.98
シェーダってデプスバッファの処理(隠面消去)を勝手にやってくれるんでつか?
261デフォルトの名無しさん:2012/06/28(木) 22:56:48.03
うん。
こっちが返した depth 値を見て、奥にある分は上書きされる。
262デフォルトの名無しさん:2012/06/28(木) 23:02:06.49
設定でしないようにも出来る
263デフォルトの名無しさん:2012/06/29(金) 00:22:48.71
>>261
デプスバッファは自動なのにライトは書き書きしないといけないんですよね?
違いはどこに有るのでしょうか?
ドキュメントのどこをみればいいでつか?
264デフォルトの名無しさん:2012/06/29(金) 00:52:49.05
>>263
ライト?ライトって光源のライトの事?
デプスバッファは、スクリーンの平面だけでは足りない深度についての距離情報を持つ物で、
光源は単に、そのフラグメントの色を決定する為の要素でしかないから、計算すればって話
二つは全然立場が違う物だよ。 違う意味のライトが思いつかないので、こんな話だけど
265デフォルトの名無しさん:2012/06/29(金) 01:17:06.61
デプスバッファはカラーバッファに書き込みしないとか、フラグメントシェーダをカットとか、
グラフィクスパイプラインの動作に深く関わってるから固定機能なんでつよ。
266デフォルトの名無しさん:2012/06/29(金) 01:22:56.16
DirectXのような固定ライト機能が欲しいってことかね?
267デフォルトの名無しさん:2012/06/29(金) 02:14:05.80
何故そこでDirectXが。glLightfv とかせめてそっちに
268デフォルトの名無しさん:2012/06/29(金) 05:46:44.04
263(260)です。質問の仕方が大雑把ですまねぇ。
ライトはglEnable(GL_LIGHTING)&glLightXX()のつもりですた。

glEnable/glDisableでCapa制御するが、シェーダでは GL_DEPTH_TEST だけ特別扱いするぜ!!
ということでいいでつか?
269デフォルトの名無しさん:2012/06/29(金) 11:09:57.89
ビルドインの GL_LIGHTING がシェーダで使えるとか、
それ明らかにシェーダの自由性を損なうから使えないのは当然だろ。

一方デプステストはPシェーダともVシェーダとも直交してるから使えるのはおかしくない。

特別扱いとかお前何言ってるの。
270デフォルトの名無しさん:2012/06/29(金) 11:10:23.16
PではなくFシェーダと言うべきか。
271デフォルトの名無しさん:2012/06/29(金) 16:13:57.76
もしかして…

デプステストは初期状態で有効になってますが、ライティングは初期状態で無効になってます。
OpenGLのレンダリングステートの初期状態について知るには何処を参照すればいいでしょうか?

という質問なのか…?
272デフォルトの名無しさん:2012/06/29(金) 16:22:51.12
wglUseFontBitmapsを使ってフォントを描画しています
左下が1ピクセルでも画面外に行くと描画されなくなっていまいます

うまくクリッピングされるようにはできないのでしょうか?
273デフォルトの名無しさん:2012/06/29(金) 18:58:35.48
デプステスト初期状態で有効になってたっけ?
274デフォルトの名無しさん:2012/06/29(金) 19:23:25.63
http://www.opengl.org/sdk/docs/man3/xhtml/glGet.xml

GL_DEPTH_TEST
params returns a single boolean value indicating whether depth testing of fragments is enabled. The initial value is GL_FALSE.

初期値無効だったわ…。ということは違うのか?
何が疑問なのかさっぱりわからん…。
275デフォルトの名無しさん:2012/06/29(金) 21:52:04.70
>>272
無理。たぶん。
おとなしく wglUseFontOutlines を使用するか、
いったんFBOに描画したやつをTextureで描画する。
276デフォルトの名無しさん:2012/06/29(金) 23:55:58.09
1.glRasterPosで見える位置に設定
2.glBitmapでずらす
3.描画
でいけるとおもうよ
277デフォルトの名無しさん:2012/06/30(土) 01:02:07.54
>>276
いけましたーステキ
278デフォルトの名無しさん:2012/06/30(土) 01:56:15.19
そんな裏技があったとは。
279デフォルトの名無しさん:2012/06/30(土) 09:13:40.47
どうみても間違えた方向の努力
280デフォルトの名無しさん:2012/06/30(土) 20:16:44.25
だからプロラミンなどすんなと言ったのによぉ
281デフォルトの名無しさん:2012/07/05(木) 10:38:01.12
blenderで作成したモデルをOpenGLで使いたいのですが、何か良い方法はありますか。
http://codezine.jp/article/detail/843
を参考にしながらやると、codezineのページが古いためかエラーが起きてしまいます。
一応collada domを使用したいと考えてはいますが、
もし、それよりも良いやり方があればご指南、アドバイス等いただけないでしょうか。
宜しくお願いします。
282デフォルトの名無しさん:2012/07/05(木) 11:00:12.77
「エラーが起きてしまいます」としか書けない奴はプログラミングに向いていないから諦めろ。
283デフォルトの名無しさん:2012/07/05(木) 11:12:12.23
わかりました。不愉快な思いをさせてしまって申し訳ありませんでした。
284デフォルトの名無しさん:2012/07/05(木) 12:47:10.79
>>283

>>282 の真意をくみ取れないなら、あるいは真意を伺うことすらできないなら、
プログラミングどころかコンピュータに関わることすら向いていないから諦めろ
285デフォルトの名無しさん:2012/07/05(木) 13:43:23.09
>>284
いえ、エラーについて書く前に、
もう一度エラーについて考え直していたところでした。

286デフォルトの名無しさん:2012/07/05(木) 13:44:28.85
>>284の真意を汲み取れてない様な・・・

スマン、ループったな
287デフォルトの名無しさん:2012/07/05(木) 15:33:30.23
DOM使ってcolladaのパーサ書いたことあるけど
方便キツすぎて汎用性ないから別の形式にした方がいいよ
288デフォルトの名無しさん:2012/07/05(木) 16:22:24.47
だな。colladaに拘る理由がないなら他の方が楽できると思う。
289デフォルトの名無しさん:2012/07/05(木) 18:56:17.78
方便がキツいというのもよく分らん言い方だが

COLLADA ってデータの意図をパーサーで汲み取らないといけないものなの?
290デフォルトの名無しさん:2012/07/05(木) 20:05:34.90
俺自前だわ
Blender側Exporter書いて、自前のC++コードで読んで表示
都合優先で
291デフォルトの名無しさん:2012/07/05(木) 20:31:18.30
とりあえずボーンその他の仕掛け要らなくて、まずは表示だけ出来ればいいなら、
wavefrontOBJ形式がシンプルで実装しやすいと思うぜ
中の構造もテキストエディタで開いて、一目瞭然。パースも単純。
292デフォルトの名無しさん:2012/07/06(金) 01:15:16.43
>>289
方言のタイポじゃね?
3Dツールの汎用フォーマットってのはバベルの塔なのかもな…。
293デフォルトの名無しさん:2012/07/06(金) 05:16:17.82
Colladaがいいならcollada domなんか使わなくても
C#かboostのptree使えば・・・

結局>>290みたいにモデラー側にExporter書いちゃうのが一番楽
294デフォルトの名無しさん:2012/07/06(金) 08:33:48.39
>>290,>>293
俺Blenderのエクスポーターすごく書きたいんだけど
資料はどこを見ればいい?
どこから手を付けていいかサッパリ分からん
295デフォルトの名無しさん:2012/07/06(金) 08:49:59.35
ヒント:オープンソース
296デフォルトの名無しさん:2012/07/06(金) 11:47:41.75
>>294
とりあえず「Blender プラグイン 作成」とか「Blender スクリプト 作成」とかでググれよ。
あとその話になるともうスレチだからBlenderスレいくといい
297デフォルトの名無しさん:2012/07/06(金) 15:42:22.21
>>294
>>290 だけど、APIリファレンス見ただけだよ
コードはPythonで。 てか、普段 OpenGLの、特にVBOとかのレベル扱ってて意味わかってれば、別に普通。
298デフォルトの名無しさん:2012/07/08(日) 01:59:15.05
3D描画の手前に2Dを描画したいのですが、どうしても3Dの方が手前に来てしまいます。
上手く描く方法はないでしょうか??
299デフォルトの名無しさん:2012/07/08(日) 02:14:49.67
>>298
glDisable( GL_DEPTH_TEST );
300デフォルトの名無しさん:2012/07/08(日) 08:37:48.64
>>298
ナイナイw
301デフォルトの名無しさん:2012/07/08(日) 12:58:13.69
>>298
glDisable( GL_DEPTH_TEST ); してから描画とか
glClear(GL_DEPTH_BUFFER_BIT); してから描画とか、
バックバッファに、そのOSのAPIで上から描画しちゃうとか、色々

>>300
302298:2012/07/08(日) 13:28:02.70
DEPTH_TESTで出来ました。皆さんありがとうございます。
303デフォルトの名無しさん:2012/07/08(日) 21:45:05.00
というか,前から思ってたんだけど,なんで'TEST'なんだろう?
まだ実験段階ですよってこと?
304デフォルトの名無しさん:2012/07/08(日) 21:51:59.08
そりゃそうだろ

なんだと思ってたんだ?
305デフォルトの名無しさん:2012/07/08(日) 22:11:17.11
hitTest
306デフォルトの名無しさん:2012/07/08(日) 22:26:42.61
>>303
判定とか判断って意味じゃないの。TEST
307デフォルトの名無しさん:2012/07/09(月) 11:18:33.18
学校のテストと意味的には変わらん。
308298:2012/07/09(月) 17:42:05.73
すみません、再度質問なのですが、GL_LINEで描画する際、非表示で描画する方法ってあるでしょうか? 「retuneで処理を通さないとかは無しで」

色を無色透明にする、ラインの太さを0にするなど、そういう方法は試しましたが、駄目でした。


309デフォルトの名無しさん:2012/07/09(月) 17:48:40.04
>>308
retune(リチューン?)ってなに?
310298:2012/07/09(月) 18:15:14.56
すみません。returnの間違いです。
311デフォルトの名無しさん:2012/07/09(月) 18:17:08.99
非表示で描画ってなんや?
バックバッファに描画するって事か?
312デフォルトの名無しさん:2012/07/09(月) 19:04:12.38
カラーにマスクかければいい
glColorMaskだっけ? 忘れた
313デフォルトの名無しさん:2012/07/09(月) 19:36:28.99
Zバッファにだけ描画とか、そんな意味なんじゃないか
314デフォルトの名無しさん:2012/07/09(月) 19:54:55.69
blendでsrcを0にしてdstを1にするとかか
315デフォルトの名無しさん:2012/07/09(月) 21:48:49.73
「非表示で描画」とか言っちゃう時点で・・・
316デフォルトの名無しさん:2012/07/09(月) 22:06:31.19
Zバッファにだけ書き込みたいなら そう書けば良いのに
317デフォルトの名無しさん:2012/07/09(月) 23:27:16.81
誰かが作った描画関数のライン部分だけ消したいとかじゃねの
318デフォルトの名無しさん:2012/07/10(火) 05:17:49.06
質問が下手な人は「自分の考えたやりたい処理」じゃなくて出したい結果を書いた方が良い結果になると思う。

答える方もエスパーしなくていいし。
319デフォルトの名無しさん:2012/07/10(火) 15:51:20.09
毎フレームごとにメインメモリ上に生成された画像(動画をデコードした結果とか)を
テクスチャとして使うために GPU 側に転送する場合、

0. glTexImage2D で転送
1. glTexSubImage2D で転送
1. PBO で glMapBuffer して書き込み → glTex(Sub)?Image2D
2. FBO …はこの用途での使い方が分からない。

一般的にはどれが一番早いんでしょうか。
320デフォルトの名無しさん:2012/07/10(火) 16:59:09.83
1 か 1が速い。
0はデータサイズの変更とかもできるのであんまり速く無いと思う。
この用途でFBOを使う事はたぶん無いだろう。

昔Geforce6000系でglTexSubImage2D とPBO+glMapBufferで速度比較したが
大差なかったような記憶がある。
デコード結果を一旦メモリに置いてからglMapBufferが返すアドレスにデータを書き込むよりも
直接デコード結果をglMapBufferが返すアドレスに書き込む方が早いかもしれない。

後ピクセルフォーマットによっては内部でデータ変換が必要になって遅くなるみたいな事を聞いた事がある。

GL通はデコード前のデータをGPUへ転送してGPUでデコードしたりするんだろうか。

まぁ、たくさんGPUを買ってきて、いろんな方法を試して調べてみたらいいと思うよ。
321デフォルトの名無しさん:2012/07/10(火) 17:11:26.19
あは。1が二つあるのね
322デフォルトの名無しさん:2012/07/10(火) 21:07:03.53
OpenGLってゲームプログラマを目指さない高校生が個人でゲームを作るのに使うべきなんですかね?
自分は、Unityとかで作るべきだと思うんですけど、どうなんですかね?
友達が全く言う事を聞かなくて困っています。よろしくお願いします。
323デフォルトの名無しさん:2012/07/10(火) 21:14:46.65
OpenGLは3D描写ライブラリ
ゲームには音だしたりAIだったり他に色々必要になる
ゲームにもよるだろうけどゲーム作りたいとだけ言われたらUnityを薦めるわな
324デフォルトの名無しさん:2012/07/10(火) 21:29:28.76
>>323
普通に考えればそうですよね。ありがとうございます。
325デフォルトの名無しさん:2012/07/10(火) 21:40:22.00
OpenGLを使ってUnityと同じ事が出来るようになる頃には大学卒業してると思うお
326デフォルトの名無しさん:2012/07/10(火) 21:44:33.03
それはそれで悪くないと思うけどね

ただopenGLであとは何もかも自作となると途中で挫折する可能性のほうが高くなりそうで
ヤル気があるのであればopenGLで作るのを止める理由はないね
若いって羨ましいのぅ
327デフォルトの名無しさん:2012/07/11(水) 01:36:18.35
>>320
ありがとう。
しかしこの用途で PBO が早くないとなると、存在価値がよく分からなくなってくるな。
GLES2 では PBO ないし、 FBO が出た時点で用済みなのかな。
328デフォルトの名無しさん:2012/07/11(水) 02:26:43.30
PBOが速いってのはDMA転送使って非同期でアップロード出来るからって意味であって、数フレーム分先に転送始めないとあまり効果はないよ
この辺のサンプルで試してみたらどうだろう
ttp://www.songho.ca/opengl/gl_pbo.html
329デフォルトの名無しさん:2012/07/14(土) 00:36:09.30
15 年前に 2D ゲームを作ったら、一番のボトルネックは RAM => VRAM の転送で、よく
DirectDraw やら GDI の BitBlt と pixel format の組み合わせで、どれが一番速度が
出るかベンチマークしている人がたくさんいた。

2012 年の今でも、未だにここがボトルネックという…。
少し前の Intel GMA でテクスチャ転送すると、 pixel format によっては 640x480 60fps の転送が
間に合わん。何かの冗談だと言ってくれ。
330デフォルトの名無しさん:2012/07/14(土) 01:54:56.89
少し前のIntel GMAでOpenGLを使おうというのが冗談だろ?
最近は4.0まで対応したらしいがどうなんだろうな
331デフォルトの名無しさん:2012/07/14(土) 03:25:39.09
さんざっぱらオンボーロVGAと言われ続けてきたからHD4000を信じられない・・・
332デフォルトの名無しさん:2012/07/14(土) 05:53:40.98
Intel はクセあるからなあ
333デフォルトの名無しさん:2012/07/14(土) 08:48:04.35
こっそり裏で解像度や画質落としてパフォーマンス稼ごうとするしな。
334デフォルトの名無しさん:2012/07/14(土) 08:50:29.08
>>329
インテルGMAはUMAだから理論上は転送コストゼロにできるはずなのに、余程ドライバの実装がアホなのか。
335デフォルトの名無しさん:2012/07/14(土) 09:37:26.16
マザーボードをみると、チップセットとRAM, グラボ間はそこそこ離れているじゃん。
VRAMとRAMの転送速度を速くしようとすると、GPUをCPUかチップセットに内臓せなあかんのやろうね。
でも現状は内臓GPUってしょぼいのばっかだよね。

さらに高解像度なディスプレイが普及してきているから
転送しなきゃいけない量も増えている。

こうなったらRAMとのデータのやり取りは最小限にして
フラグメントシェーダとか駆使してばりばり映像を作るしかないべ。
ここにいるおまいらなら、おっぱい方程式をレイトレーシングとか簡単でしょ。
336デフォルトの名無しさん:2012/07/14(土) 13:19:18.07
>>335
> さらに高解像度なディスプレイが普及してきているから
> 転送しなきゃいけない量も増えている。

ディスプレイが高解像度になったという理由で増えてきてる
RAM->VRAM 転送しなきゃならないデータというのは何?

それはフラグメントシェーダとか駆使することが主な解決方法なの?

俺は、ディスプレイの高解像度化が原因で転送量が増えてきてるのなら、
シェーダのユニット(コア)を増やすよりも、
予めデータを VRAM に置いておける量を増やす、
つまり VRAM の容量を増やした方が解決に繋がると思うのだが。
337デフォルトの名無しさん:2012/07/14(土) 13:27:21.65
UIスレッドと描画スレッドの分離ができるライブラリが見つかりにくい

描画が遅いせいでウィンドウの反応が悪くなったりとか微妙だろ
Qtだと簡単にできるんだが、QtCreatorはVisual Studioと比べるとデバッグがやりにくいし
ttp://doc.qt.nokia.com/qq/qq06-glimpsing.html#writingmultithreadedglapplications
338 忍法帖【Lv=40,xxxPT】 :2012/07/14(土) 21:59:18.90
>>336
> さらに高解像度なディスプレイが普及してきているから
> 転送しなきゃいけない量も増えている。

つまり、高解像度なディスプレイがあると表示するコンテンツも
それに合わせて高解像度にしたくなる。
だからCGやるときはテクスチャサイズが大きくなり
動画再生するときもよりサイズが大きいものが必要になるという事。

初期化時にテクスチャやメッシュをVRAMに転送しておいて
レンダリング時にあまりGPUへデータ転送しなくていいならVRAM容量アップでもいいかもしれない。

けどストリーミングされた動画をテクスチャに貼り付けたいときは
あらかじめVRAMに置いておく事はできない。
そこでデコード前のデータを転送してGPUでデコードするとか
高解像度画像に見えるようにデータ処理すればいいんでないかと。

>>337
Visual Studio Add-inを使えばいいんじゃ。
Express Editionだと使えないらしいけど。
http://qt.nokia.com/downloads/visual-studio-add-in
339デフォルトの名無しさん:2012/07/14(土) 22:30:27.86
>>338
なるほど、テクスチャ ストリーミングね。

すまん、「映像を作る」と言われた時、正直デコーディングは想定してなかった。

340デフォルトの名無しさん:2012/07/21(土) 16:44:51.75
OpenGLの、線を描画するプログラムが正しく表示されません。
具体的な症状は、線が描画されずに真っ白いまま、というものなのですが、どなたかアドバイス頂けませんでしょうか。
OSはWindows7 64bit
ディスプレイアダプターはInterl(R) HD Graphics 4000で、
サンプルプログラムはhttp://www21.atwiki.jp/opengl/pages/21.htmlです
プログラム自体は起動するので、インストール関係は間違ってないと思われます
試しにInterl(R) HD Graphics 4000をアンインストールして、標準VGAドライバにすると描画されたので
おそらくディスプレイドライバ関係だと思うのですが…
341デフォルトの名無しさん:2012/07/21(土) 18:19:53.76
すみません、自己解決しました
Interl(R) HD Graphics 4000のドライバーにWindows8用のベータ版ドライバーを採用することできちんと描画されるようになりました

参考サイトです
http://www.4gamer.net/games/128/G012877/20120713008/
342デフォルトの名無しさん:2012/07/21(土) 18:50:38.03
>>341
http://www21.atwiki.jp/opengl/pages/21.html
のプログラムすら動かなかったなんて、驚き。
元のドライバが相当古かったのか。

ちなみに機種は何でした? VAIO?
343デフォルトの名無しさん:2012/07/21(土) 18:55:42.30
Intelでもジオメトリシェーダ動くようになるのか
344デフォルトの名無しさん:2012/07/21(土) 19:15:05.39
>>342
東芝のdynabookです

>>341のドライバを入れる前はhttp://www21.atwiki.jp/opengl/のサンプルは全滅でしたが
http://www.natural-science.or.jp/article/20091107233553.phpのサンプル(地平線、創造物など)だけは何故か動いてくれました

今では両サイトのサンプルとも正常に描画されますが…
345デフォルトの名無しさん:2012/07/23(月) 23:06:29.41
GLESで3D描画しています。

オブジェクトの移動回転について、
Matrix.scaleM();
Matrix.rotateM();
Matrix.translateM();
の順でやるのがセオリーだと思いますが、これでは上手く行かず
Matrix.translateM();
Matrix.rotateM();
Matrix.scaleM();
だと思ったように描画されます。これはどうしてでしょうか?
346デフォルトの名無しさん:2012/07/23(月) 23:38:22.88
>>345
こう考えてはどうでしょうか。

OpenGL(GLES)の頂点座標ベクトル V は「縦ベクトル」で表されていると考える。
(あくまでそう解釈するだけ。配列の書き方とか内部実装などは考えるな)

その場合、座標変換行列を M とすると、座標変換は M * V と表現される。

scaleM を Ms、rotateM を Mr、translateM を Mt とすると、

Matrix.scaleM();
Matrix.rotateM();
Matrix.translateM();

は Ms * Mr * Mt * V と表現される。

Matrix.translateM();
Matrix.rotateM();
Matrix.scaleM();

は Mt * Mr * Ms * V と表現される。

貴方が意図している変換がどういうものかは知りませんが、
このように考えると、変換を組み合わせるべき順番が分ると思います。
347デフォルトの名無しさん:2012/07/23(月) 23:50:24.12
サンクス
どうも腑に落ちないんだが
内部で頂点の情報は最後に合成されるから、それまでは0に何をかけても0という解釈なのだろうか・・・?
348デフォルトの名無しさん:2012/07/24(火) 00:24:44.69
>>347
内部は考えるなと言ったんだが・・・

内部の事で説明した方が分りやすいのなら、そうしようか。

実行時に Matrix.scaleM(); というコードの部分を処理した時、
ただちに各頂点に scaleM という座標変換が施される訳ではない。

モデルビュー変換行列というバッファが一つある。
この変換行列を使うように設定した後 glLoadIdentity 関数を呼ぶと、
この変換行列が単位行列に「設定」される。

一方、scaleM や rotateM、scaleM という関数が内部で
glScalef や glRotatef や glTranslatef という関数を呼ぶモノだとしたら、
これらの関数はそれぞれ先の変換行列に自身の行列を「乗算」する。

glLoadIdentity 関数は変換行列を「設定」する。
glScalef 関数などは変換行列に「乗算」する。
(乗算する方向は >>346 から類推してくれ)

どちらの類の関数も変換行列のバッファに対して何かをする関数であって、
頂点座標ベクトルに対して何かをする関数ではない。

draw 系の関数が呼ばれて初めて変換行列と頂点座標ベクトルが乗算される。
349デフォルトの名無しさん:2012/07/24(火) 01:21:31.55
行列計算は自前でやる方が圧倒的に楽だぞ
350デフォルトの名無しさん:2012/07/24(火) 20:22:31.11
GLESを使うなら2以降にすれば、シェーダも自分で書くことになるから、
内部も見られて速攻で理解できる。
351デフォルトの名無しさん:2012/07/24(火) 21:00:53.23
計算してglMultMatrixだな
オブジェクト指向ならなおさら
352デフォルトの名無しさん:2012/07/24(火) 21:10:58.59
オブジェクト指向ならglMultMatrixなんて使わずに、
自分で行列クラスを作って、
*とか/を一通りオーバーロードして、
行列やベクトルを直感的に演算できるようにするよ。
ついでに組み込みでSSEやNEON対応のコードを入れておく。
そのあたりが作り終わってからがようやくスタートラインだろう。
353デフォルトの名無しさん:2012/07/24(火) 21:18:59.51
gl系の行列演算操作ってそういえばそんなに速度でないの?
354デフォルトの名無しさん:2012/07/24(火) 21:25:06.25
そもそもボーンのフレームを出したりと事前の計算が必要なときに、全く役に立たない。
ただのテスト用であって、実用するようなものじゃない。
355デフォルトの名無しさん:2012/07/24(火) 21:41:25.50
オペレータオーバーロードは便利だけどクソ遅い
356デフォルトの名無しさん:2012/07/24(火) 22:08:06.99
生成されたコードを見てから言えよ。
オーバーロードと通常の関数に相違点なんて無い。

きちんと作れば、小規模ならインライン展開されて関数の呼び出しすら省略されたコードになるのに、
どこに重くなる要因があるのか、馬鹿の考えはさっぱり分からない。
組み込みと__m128を組み合わせると戻り値の128bitのデータをXMMレジスタから直接引き渡すようになったりするんだぞ。

不勉強で知ったかするのはやめておけ。
357デフォルトの名無しさん:2012/07/24(火) 22:10:23.29
俺はgl系で済ましちゃうけどな>行列計算
速度が必要ってどんな時だ?
358デフォルトの名無しさん:2012/07/24(火) 22:18:32.22
そういうことを書いてある書籍やサイトが少なくないからな
359デフォルトの名無しさん:2012/07/24(火) 22:31:19.71
ESやったら手でやるしかなかった
360デフォルトの名無しさん:2012/07/24(火) 22:31:25.47
glm使えよ
ttp://glm.g-truc.net/

そもそもCore Profileなら行列計算は自前でやるしかないんじゃないのか?
361デフォルトの名無しさん:2012/07/24(火) 23:00:18.57
>>357
ゲームとかって普通に必要じゃね
362デフォルトの名無しさん:2012/07/24(火) 23:08:36.00
速度か可読性か。
うちのようにアセンブラを読めない連中ばかりだと、SIMDが一切使えない。
363デフォルトの名無しさん:2012/07/24(火) 23:19:36.01
アセンブラが読めなくても組み込み関数なら使えるはずだが、単に不勉強なだけだろう。
364デフォルトの名無しさん:2012/07/24(火) 23:22:36.61
ベクトル系の拡張命令なんて、もはや新しい技術とは言えないレベルで枯れてきているのに、
10年以上前の知識にしがみついて、いったいどれだけ怠け者なんだよ。
365デフォルトの名無しさん:2012/07/24(火) 23:29:17.75
陳腐化した技術しか誇れない化石だろ。
口も悪くなるさ。
366デフォルトの名無しさん:2012/07/25(水) 00:48:40.81
>>356
勉強になるな。
367デフォルトの名無しさん:2012/07/25(水) 01:18:17.95
自演乙
368デフォルトの名無しさん:2012/07/25(水) 01:23:34.38
えっ
369デフォルトの名無しさん:2012/07/25(水) 01:31:08.43
スレチなんでこちらでどうぞ
http://toro.2ch.net/test/read.cgi/tech/1130349336/
370デフォルトの名無しさん:2012/07/25(水) 07:18:10.23
時代はどんどん流れているのにCPUの拡張命令どころか、シェーダを使ったことすらなく、
過去の遺物のような演算補助関数や固定機能しか使えない人間は、
少しは不勉強を恥じるべきだろうね。
使わないという選択はあっても、不勉強で使えないから選択すら出来ないというのはみっともない。
371デフォルトの名無しさん:2012/07/25(水) 07:44:16.12
不勉強さん、職場でオナニーコード認められないの?
372デフォルトの名無しさん:2012/07/25(水) 07:45:58.06
>>356
いまどき遅くは感じないけど無駄って発生しないのかね?
373デフォルトの名無しさん:2012/07/25(水) 07:57:59.65
374デフォルトの名無しさん:2012/07/25(水) 08:22:59.86
最適化について一切触れられてないんだけど?
375デフォルトの名無しさん:2012/07/25(水) 08:32:38.58
保証されるものじゃないからね
376デフォルトの名無しさん:2012/07/25(水) 08:36:08.04
出力されたアセンブラのソースを見ていない時点で、いい加減な内容。
コンパイラの最適化をなめすぎ。
377デフォルトの名無しさん:2012/07/25(水) 08:44:22.20
今は右辺値参照使えるしな。
378デフォルトの名無しさん:2012/07/25(水) 08:51:09.42
volatileを必要としないような設計ならな。
379デフォルトの名無しさん:2012/07/25(水) 08:55:14.87
あまり甘えるのもどうかと思うが
380デフォルトの名無しさん:2012/07/25(水) 10:00:43.88
オーバーロードで以下のようになるように作ると、
vector v1(1.0f,2.0f,3.0f,4.0f);
vector v2(10.0f,20.0f,30.0f,40.0f);
v1 = v1*v2;
printf("%f,%f,%f,%f",v1.x,v1.y,v1.z,v1.w);

SSEの組み込み乗算が計算済みにされて、printfの呼び出ししか残ってない。
movaps xmm0, XMMWORD PTR __xmm@2
movaps XMMWORD PTR _v1$[esp+16], xmm0
; Line 44
fld DWORD PTR _v1$[esp+28]
sub esp, 32 ; 00000020H
fstp QWORD PTR [esp+24]
fld DWORD PTR _v1$[esp+56]
fstp QWORD PTR [esp+16]
fld DWORD PTR _v1$[esp+52]
fstp QWORD PTR [esp+8]
fld DWORD PTR _v1$[esp+48]
fstp QWORD PTR [esp]
push OFFSET ??_C@_0M@JJJBFJKB@?$CFf?0?$CFf?0?$CFf?0?$CFf?$AA@
call DWORD PTR __imp__printf
381デフォルトの名無しさん:2012/07/25(水) 12:35:42.31
ボクのパソコンではこうなったんだもん><
382デフォルトの名無しさん:2012/07/25(水) 12:47:30.79
SSE引っ張り出して論点ずらしてるのにワロタ
383デフォルトの名無しさん:2012/07/25(水) 16:36:32.68
最適化でオーバーロード云々関係なく、きちんと書けばインライン展開されるんだよ。
だから新しいオブジェクトを作って破棄なんて無駄なコードは生成されない。
staticを付けて、最初から計算済みにならないようにしても、

_wmain PROC ; COMDAT
; Line 39
push ebp
mov ebp, esp
and esp, -8 ; fffffff8H
; Line 40
mov eax, DWORD PTR ?$S1@?1??wmain@@9@4IA
test al, 1
jne SHORT $LN17@wmain
movaps xmm1, XMMWORD PTR __xmm@0
or eax, 1
mov DWORD PTR ?$S1@?1??wmain@@9@4IA, eax
jmp SHORT $LN5@wmain
$LN17@wmain:
384デフォルトの名無しさん:2012/07/25(水) 16:38:09.41
movaps xmm1, XMMWORD PTR ?v1@?1??wmain@@9@4Uvector@@A
$LN5@wmain:
; Line 41
test al, 2
jne SHORT $LN18@wmain
movaps xmm0, XMMWORD PTR __xmm@1
or eax, 2
mov DWORD PTR ?$S1@?1??wmain@@9@4IA, eax
movaps XMMWORD PTR ?v2@?1??wmain@@9@4Uvector@@A, xmm0
jmp SHORT $LN7@wmain
$LN18@wmain:
movaps xmm0, XMMWORD PTR ?v2@?1??wmain@@9@4Uvector@@A
$LN7@wmain:
; Line 44
sub esp, 32 ; 00000020H
mulps xmm0, xmm1
以下printfの呼び出し部分

これを見れば分かるが、ベクトルの乗算まで余計なcallも作られなければ、必要のないリソースも作られない。
これが最適化。
385デフォルトの名無しさん:2012/07/25(水) 17:40:08.54
儂は68000しか読めん…
386デフォルトの名無しさん:2012/07/25(水) 19:14:10.95
まともな開発じゃgoto同様、禁則項目だね。
basic_stringが、何故、char*に対するoperatorを使わずに、c_strなどという関数を定義しているか考えてみよう。
387デフォルトの名無しさん:2012/07/25(水) 19:14:56.54
> char*に対するoperator

??
388デフォルトの名無しさん:2012/07/25(水) 19:20:42.55
儂はgotoは少しは使うよ。
389デフォルトの名無しさん:2012/07/25(水) 19:20:51.01
教科書を写すだけで、意味も分からないうちは軽々しく定義しちゃダメみたいだな。
390デフォルトの名無しさん:2012/07/25(水) 19:22:18.19
ちょっと前の gcc なんかだとオーバーロードは微妙だった気がするなあ
今は知らん
391デフォルトの名無しさん:2012/07/25(水) 19:27:09.01
この手の恐ろしさは、マルチスレッドで書いてみないと分からんだろう
392デフォルトの名無しさん:2012/07/25(水) 21:52:58.63
複数コアでベクトル演算ユニットを共有しててSSE命令でストールするとかか?
ねえわ
393デフォルトの名無しさん:2012/07/25(水) 22:41:49.81
>>386
演算系で必要なオペレーターは*とか=だけで、
単体のoperatorに設定するようなものは無い。
必要なのは演算対象を明確にした物だけ。

まともにプログラムを組んで検証をせずに、
聞きかじった知識だけで語るからそうやってボロボロに間違うんだよ。

オーバーロードの最適化だって、自分でほんの少しキーをたたけば検証できる話だっただろう。
そんな簡単なことすらしないからいつまでたっても、間違った知識を抱えたままなんだよ。
394デフォルトの名無しさん:2012/07/25(水) 22:59:00.12
いい加減スレチだから他所でやれよカスども
395デフォルトの名無しさん:2012/07/26(木) 00:00:37.86
>>393
ぼくのパソコンではこうなったってのは検証とは言わない。
最適化のされ方なんて環境ひとつでいくらでも変わる。
396デフォルトの名無しさん:2012/07/26(木) 00:06:45.49
ここはOpenGLのスレ、環境で変わるようなコードの話は他でやってよ
397デフォルトの名無しさん:2012/07/26(木) 00:09:25.87
>>395
もちろんコンパイラ次第だ。
反論があるのなら、違う検証結果を出せばいいだけの話。
化石みたいなコンパイラでも探してこない限り結果は見えてるけどやってみれば?
398デフォルトの名無しさん:2012/07/26(木) 00:23:35.42
Javaじゃ完全に害悪扱いだな
大規模開発で爆弾になるから
399デフォルトの名無しさん:2012/07/26(木) 00:24:02.73
いつまでやってんだよ
400デフォルトの名無しさん:2012/07/26(木) 00:26:14.05
オナニーが止まるまで
401デフォルトの名無しさん:2012/07/26(木) 04:31:02.93
C++信者は本当に品がないな
402デフォルトの名無しさん:2012/07/26(木) 04:42:49.40
煽りもガキっぽいし、一人よがりなコードしか書いたのことない学生クンだと思う。
403デフォルトの名無しさん:2012/07/26(木) 05:26:02.57
ARM厨w
404デフォルトの名無しさん:2012/07/26(木) 05:48:15.33
結局、コンパイラ次第とか
どこぞで規格化でもされているのかと思いきや
馬鹿がニッチな俺様コードを普遍的であるかのように語ってたってだけの話か
405デフォルトの名無しさん:2012/07/26(木) 07:09:26.86
結局、オーバーロードでオーバーヘッドが発生するコンパイラは見つからなかっただろう。
まあ検証するような誠実さなんて持ち合わせていない無い怠け者だろうから、探してもいないんだろうけど。
これに懲りたら、聞きかじった知識じゃなく、自分で検証する癖を身につけろ。
406デフォルトの名無しさん:2012/07/26(木) 07:12:38.25
検証結果を出さなかったら、今もオーバーヘッド云々を言い続けてたんだろうなあ。
そう言い続けなくなっただけでも、少しはマシになったと言うことか。
407デフォルトの名無しさん:2012/07/26(木) 08:22:13.33
マシも何もスレチ続けてる時点でどっちも糞
408デフォルトの名無しさん:2012/07/26(木) 08:24:02.38
すぐ学生認定するのは頭の悪い証拠
409デフォルトの名無しさん:2012/07/26(木) 12:18:23.20
410デフォルトの名無しさん:2012/07/26(木) 12:26:08.56
>>409
演算子オーバーロードで遅くなるとしている記事だけが見つかっているわけじゃないね。
つーか、私にはRubyが遅いだとか、後置インクリメント演算子が遅いとか、
そう言った的外れな記事しか見つからないんだけど。
411デフォルトの名無しさん:2012/07/26(木) 12:28:10.97
都合の悪い記事は全部的外れかよw
412デフォルトの名無しさん:2012/07/26(木) 12:31:47.24
いや、腐るほど見つかると言うのなら検索キーワードだけじゃなくて
実際に見つかった記事を提示すればいいじゃん。
それをしないから突っ込まれるって事も判らないの?
413デフォルトの名無しさん:2012/07/26(木) 12:37:07.81
>>412
きっと>409は「演算子」「オーバーロード」「遅くなる」って検索して引っ掛かったものは
全て該当記事だと思いたかったんだろうよ。
414デフォルトの名無しさん:2012/07/26(木) 12:38:13.62
コンパイラに甘え腐ってるから、インクリメントの挙動も分からないままなんだね

http://blog.livedoor.jp/dormolin/archives/51780515.html
415デフォルトの名無しさん:2012/07/26(木) 12:44:15.92
挙動も知らないままコンパイラを盲信すると
やがてこういう馬鹿な質問をするハメになる。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1139144521
416デフォルトの名無しさん:2012/07/26(木) 13:04:55.36
>>414>>415
えーと、その二例のどこが「演算子オーバーロードは遅くなる」例?
つーか、いいからエアコンを28℃に設定して昼寝しろ。
417デフォルトの名無しさん:2012/07/26(木) 13:10:27.36
自分が書いたことをもう忘れたのか?
それとも無かったことにしたいだけか
お前は今、分かってないことを自白したんだよ
418デフォルトの名無しさん:2012/07/26(木) 13:35:08.08
インクリメントの順序の問題は別にオーバーロードで遅くなるのとは関係ない。
どちらにせよ、結局は不必要な処理はコンパイラが撤去しちゃんだけどね。
インラインで展開されるものは、戻り値が必要なければ生成されないんだよ。

無駄な処理を生成するコンパイラがどこにあるのか、
未だに答えていないんだけど、そうやって逃げ回るんだよね。
知ったかをした人間の末路は毎度同じなので、珍しくもないけど。
419デフォルトの名無しさん:2012/07/26(木) 13:39:23.83
インライン展開って保障されないでしょ。
420デフォルトの名無しさん:2012/07/26(木) 13:54:58.20
inline付ければ全部展開されるとでも思ってんじゃね
421デフォルトの名無しさん:2012/07/26(木) 13:56:57.71
逆に、inlineつけないとインライン展開されないと思っていそうな抜策もいそうだけど。
422デフォルトの名無しさん:2012/07/26(木) 14:00:23.40
Javaが如何に優れているかって話だな。
423デフォルトの名無しさん:2012/07/26(木) 14:22:33.01
ふーん、そうなんだー。
424デフォルトの名無しさん:2012/07/26(木) 14:25:17.64
お前らここOpenGLのスレなんだけど?
425デフォルトの名無しさん:2012/07/26(木) 15:20:19.69
VCしかいじって無さそうやな
426デフォルトの名無しさん:2012/07/26(木) 17:49:11.78
ニートタイムに張りついてんのか。
427デフォルトの名無しさん:2012/07/26(木) 18:24:36.89
gccの結果
printfを呼ぶまでに、オーバーロード部分の演算が全て展開されるのは変わらず。

main:
.LFB537:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
cmpb $0, _ZGVZ4mainE2v1(%rip)
je .L5
.L2:
cmpb $0, _ZGVZ4mainE2v2(%rip)
je .L6
.L3:
movaps _ZZ4mainE2v1(%rip), %xmm0
movl $.LC2, %edi
movl $4, %eax
mulps _ZZ4mainE2v2(%rip), %xmm0
movaps %xmm0, _ZZ4mainE2v1(%rip)
movss _ZZ4mainE2v1(%rip), %xmm0
movss _ZZ4mainE2v1+12(%rip), %xmm3
movss _ZZ4mainE2v1+8(%rip), %xmm2
movss _ZZ4mainE2v1+4(%rip), %xmm1
cvtps2pd %xmm0, %xmm0
cvtps2pd %xmm3, %xmm3
cvtps2pd %xmm2, %xmm2
cvtps2pd %xmm1, %xmm1
call printf
428デフォルトの名無しさん:2012/07/26(木) 18:30:49.24
これだけスレ違いだから止めてくれって言ってるのに。
コンパイラ屋ってほんと性格悪いよな
429デフォルトの名無しさん:2012/07/26(木) 18:33:45.94
オーバーロードの中身を書いてないし、どうせ都合のいいコードしか使ってない。
430デフォルトの名無しさん:2012/07/26(木) 18:39:48.64
マジでいつまでこの話やんの?
やめろって何度言われてるかわかってんの?
脳がイカれてんのか?
431デフォルトの名無しさん:2012/07/26(木) 18:40:25.16
機械語なら理解できます><
432デフォルトの名無しさん:2012/07/26(木) 20:00:14.21
インライン展開されまくってコードサイズが大きくなってキャッシュミスが増えて遅くなる可能性は無視でしょうか?
433デフォルトの名無しさん:2012/07/26(木) 20:03:45.20
まだ続けるんだ
434デフォルトの名無しさん:2012/07/26(木) 20:20:14.87
>>432
オーバーヘッドがあるかどうか生成されたコードを見て検証する
遅くなるかどうかベンチマークをとって検証する。

そんな当たり前のことすらやろうとせずに、
聞きかじっただけの可能性云々で思考停止している時点で、それはただの怠け者。
435デフォルトの名無しさん:2012/07/26(木) 20:21:58.93
まだまだ続けるよー!
436デフォルトの名無しさん:2012/07/26(木) 20:25:38.46
>>434
可能性を無視するんですか? 
どうして検証しようとしないのですか?
あなたには期待していたのに失望しました
437デフォルトの名無しさん:2012/07/26(木) 20:32:13.86
結局、オーバーロードでパフォーマンスが落ちるコンパイラは見つからないの?
古いのを探せば「可能性」はあるかもしれないんだから、もう少し必死になれ。
438デフォルトの名無しさん:2012/07/26(木) 20:35:53.63
一体誰と誰が戦っているんだ・・
439デフォルトの名無しさん:2012/07/26(木) 20:41:14.99
↓そこで>>355が現れて、格好良く持論を証明
440デフォルトの名無しさん:2012/07/26(木) 21:00:37.74
スレ違いだっていってんだろ
スレ違いだっていってんだろ
スレ違いだっていってんだろ
スレ違いだっていってんだろ
スレ違いだっていってんだろ
スレ違いだっていってんだろ
スレ違いだっていってんだろ
スレ違いだっていってんだろ

いつまで話続けんだよ他所でやれ
441デフォルトの名無しさん:2012/07/26(木) 21:04:24.28
>>434
ぼくのパソコンでこうなった論は分かったから、質問に答えなよ
442デフォルトの名無しさん:2012/07/26(木) 21:04:45.43
ム板もID表示ほしいな。
キチガイ沸いた時困る。
443デフォルトの名無しさん:2012/07/26(木) 21:08:18.21
>>441
オーバーロードでパフォーマンスが落ちるコンパイラを出して解決したら、検証結果を張るよ。
まあ、次もCPUによって違うとか言い出すんだろうけど。
444デフォルトの名無しさん:2012/07/26(木) 21:11:37.56
>ぼくのパソコンでこうなった論は分かったから、質問に答えなよ
これは素直じゃ無いだけで、

あなた様の言っていることが正しいのは分かりました。
最適化が出来ないコンパイラは見つかりません。
愚かな私めにキャッシュミスについてお教えいただけないでしょうか?

と言っているんだから、教えてやれよ。
445デフォルトの名無しさん:2012/07/26(木) 21:21:58.15
オーバーロードしたコードを貼れよ
446デフォルトの名無しさん:2012/07/26(木) 21:27:23.23
ほれ
struct vector{
union{__m128 vect;struct{float x,y,z,w;};};
vector(){}
vector(float x,float y,float z,float w)
{vect = _mm_set_ps(w,z,y,x);}
inline vector& operator=(const vector& v)
{vect = v.vect;return *this;}
inline vector operator*(const vector& v) const
{vector result;result.vect = _mm_mul_ps(vect,v.vect); return result;}};
447デフォルトの名無しさん:2012/07/26(木) 21:27:28.54
普通、開発はデバッグモードでやるものでしょうに。
448デフォルトの名無しさん:2012/07/26(木) 21:33:44.12
>>446
検証自体がいい加減なことが分かった
ループで百万回ほど回してみ
実測で倍くらいになるから
449デフォルトの名無しさん:2012/07/26(木) 21:35:34.80
>>446
そういう抽象的な答えが返ってくると思ってたよ。
何と比較してとか絶対に答えないんだろうなあ。
450デフォルトの名無しさん:2012/07/26(木) 21:36:21.84
ニート達の夜は明けそうにもないな。
451デフォルトの名無しさん:2012/07/26(木) 21:37:34.19
>>449のアンカは
>>446じゃなくて>>448
452デフォルトの名無しさん:2012/07/26(木) 21:42:45.66
>>448
実測で倍速いコードを張ってみてといっても、
絶対に話をそらして逃げ回るんだろうし。
どうすればいいのさ。
453デフォルトの名無しさん:2012/07/26(木) 21:43:27.58
>>449
ありゃ、関数の書き方が解らないのか
参照渡しだよ
for文の使い方は分かるよな?
454デフォルトの名無しさん:2012/07/26(木) 21:47:23.49
構造体のタグ名にvectorとか付けてる時点で終わっとるな。
455デフォルトの名無しさん:2012/07/26(木) 21:54:34.56
ていうかそんなんより3Dグラフィックスの計算でよく使う
4x4行列の掛け算とか逆行列の計算とか4x4行列によるベクトルの変換とかの速度のほうが重要ですよね
456デフォルトの名無しさん:2012/07/26(木) 21:58:27.14
>>453
事前に予測したとおり、絶対にコードを出さないよね。
そのままごまかして逃げ回るお決まりの行動パターンだろう。
457デフォルトの名無しさん:2012/07/26(木) 22:01:00.75
>>455
もちろん行列の乗算が一番重要だよ。
ベクトル乗算の他にスカラが入るから、ベクトルの乗算のみのようにシンプルには書けないけど。
458デフォルトの名無しさん:2012/07/26(木) 22:06:54.22
>>456
同じ構造体を参照渡しで計算して値を返す関数を書くだけのことが、そんなに難しいのかね?
君が丸写ししている本のタイトルを挙げてもらった方が早そうだな
459デフォルトの名無しさん:2012/07/26(木) 22:09:50.68
とりあえずこれから先も議論する奴は名前付けてくれ
460デフォルトの名無しさん:2012/07/26(木) 22:12:24.36
ちなみに100万回ループさせると、以下のコードになるだよね。
これ以上、どうしろというんだろう?
mov eax, 1000000 ; 000f4240H
npad 1
$LL3@wmain:
dec eax
; Line 35
movaps xmm2, xmm1
mulps xmm0, xmm2
jne SHORT $LL3@wmain
461デフォルトの名無しさん:2012/07/26(木) 22:20:05.06
>>458
関数を書くのはいいけど>>460のコード以上の結果を残すのが不可能なんだよ。
直接アセンブラを書いても、あれ以上どうにもならない。
462デフォルトの名無しさん:2012/07/26(木) 22:21:41.64
毎回の演算結果を棄ててループするとかお前ふざけてるの?
463デフォルトの名無しさん:2012/07/26(木) 22:26:13.47
この話題ここで続けるならコテつけろや、うっとおしいから。

それとも頭悪いやつは日本語も理解できないの?
464デフォルトの名無しさん:2012/07/26(木) 22:36:43.49
>>462
演算結果ならxmm0に入ってるけど、いったい何を言っているんだ?
465デフォルトの名無しさん:2012/07/26(木) 22:40:47.67
>>460
アセンブラの出力しか見ていないようだが、ちゃんと計測したか?
/arch:SSE2で1000msecほど差が出るぞ
466デフォルトの名無しさん:2012/07/26(木) 22:41:52.77
自治スレなくなったからカスを押しつける先がない・・・なければないで面倒なもんだな
467デフォルトの名無しさん:2012/07/26(木) 22:48:52.15
>>465
実行に1秒かからないプログラムにどうやって1秒差を付けるんだよ?
嘘をつくにしても、もう少しわかりにくい値にすればいいのに。
468デフォルトの名無しさん:2012/07/26(木) 22:51:18.81
はいはい、ぼくのパソコンでは1秒かからないんですね
書いたら書いたで嘘扱いw
やっぱり適当なこと書いて自己顕示したいだけのカスでした
469デフォルトの名無しさん:2012/07/26(木) 22:54:05.33
どっちも中途半端な検証結果しか書かないし不毛
もう止めろスレ違いだ
470デフォルトの名無しさん:2012/07/26(木) 22:55:33.84
>>468
信じてあげるから実験したCPUを書いてみて。
ちなみに100MHzのCPUでも1秒かからないので、
SSEに対応していて遙かにロークロックな製品を探してくるといいよ。
あったら素直に驚くから。
471デフォルトの名無しさん:2012/07/26(木) 23:03:08.38
オーバーロードの話がしたいのか、最適化の話がしたいのかよく判らないけれど
どっちも該当するスレがあるので、そちらでやっていただけませんかね。
畑違いのスレじゃないと、お互い誤魔化しきれない感じですか?
平日の昼間から張りついているようなので素性はお察しですけど。
472デフォルトの名無しさん:2012/07/26(木) 23:07:18.58
>>470
もしかして、プログラムの実測がCPUだけで決まると思ってる?w
473デフォルトの名無しさん:2012/07/26(木) 23:09:02.64
>>472
少年漫画的急展開だね。
ネタでやっているのは分かったから、そろそろ終わりにしよう。
474デフォルトの名無しさん:2012/07/26(木) 23:34:36.19
結論は書いていけよ
結局オペレータオーバーロードは遅いの?
475デフォルトの名無しさん:2012/07/26(木) 23:40:28.69
>>474
それを人に訊く前に自分で調べろと言うことでは?
476デフォルトの名無しさん:2012/07/26(木) 23:44:55.47
>>475
わかった、それが結論ならそうする

スレチではあったが興味ある話ではあったからな
もっとも、あんまりちゃんと追いかける気はなかったが
477デフォルトの名無しさん:2012/07/26(木) 23:48:30.00
ここに至って結論が分からないなら、自分で調べても無駄な気がする。
478デフォルトの名無しさん:2012/07/26(木) 23:51:48.42
>>476 は、そうする、とは言うが、実際に自分で調べる気は全くないと思う。

あんまりちゃんと追いかける気がなかったのなら、
そもそも何をどう調べればいいのか自分で検討することもできない。
479デフォルトの名無しさん:2012/07/26(木) 23:55:56.56
折れたと思いきや、お子様のご高説はまだまだ続くようだ。
480デフォルトの名無しさん:2012/07/27(金) 00:07:31.12
必要だと思えば自分で調べるだろ
481デフォルトの名無しさん:2012/07/27(金) 02:55:35.37
C++スレとかに移動してやれ
482デフォルトの名無しさん:2012/07/27(金) 04:54:26.77
ここまで俺の自作自演
483デフォルトの名無しさん:2012/07/27(金) 06:10:30.99
C、C++の最適化について語るスレ 3
http://toro.2ch.net/test/read.cgi/tech/1215242849/
484デフォルトの名無しさん:2012/07/27(金) 20:55:01.93
もう全員出入り禁止
485デフォルトの名無しさん:2012/07/28(土) 13:45:01.47
こうしてOpenGLは衰退するのであった
486デフォルトの名無しさん:2012/07/28(土) 18:21:51.10
スレ違いの話題に乗っ取られてた時点で何を今更
487デフォルトの名無しさん:2012/07/29(日) 13:34:03.90
シェーダアセンブラか懐かしい
488デフォルトの名無しさん:2012/07/30(月) 18:42:06.73
俺のPC(EeePC)では未だに現役だよ!
489デフォルトの名無しさん:2012/07/31(火) 09:26:34.08
GLUTでキャラクターを作り、
キャラクターの操作中にBGMをかけたいのですが
画像を描画する前にBGMがなり、BGMが終わった後に画像が描画されてしまいます。
PlaySound関数はどこに書き込めばいいですか?
ちなみにGLUTを扱うに当たって以下のサイトを参考にしています。
http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html
宜しくお願いします。
490デフォルトの名無しさん:2012/07/31(火) 11:30:21.78
PlaySound() のヘルプ読んでから質問しろ。

SND_ASYNC
491デフォルトの名無しさん:2012/07/31(火) 11:49:33.23
>>490
あぁorz
解決しました。ありがとうございました。
492デフォルトの名無しさん:2012/08/01(水) 22:24:09.42
なんでwglとかQtとかじゃなくglutで本格的にコード組もうとする人多いの?
細かいマルチメディア制御のできない体験用のおもちゃだろアレ。
493デフォルトの名無しさん:2012/08/01(水) 22:25:27.15
サンプルコードに GLUT 使い続けてて、慣れてるからだろう。
494デフォルトの名無しさん:2012/08/01(水) 22:25:44.34
細かいマルチメディア制御ができないってどういう事なん?
495デフォルトの名無しさん:2012/08/01(水) 22:27:14.99
タイトルバー掴まれてもアニメーション止まらないようにしたいんだがどうすればいいんだ?
496デフォルトの名無しさん:2012/08/01(水) 22:43:52.92
glutPostRedisplay();を使う
497デフォルトの名無しさん:2012/08/01(水) 22:52:30.70
>>494
wglとか使えば、WinAPIのウィンドウにOpenGLの描画領域埋め込んでるだけなんで
全てのイベントが拾えるし、HWNDやHDC、イベント連携を必要とするマルチメディア系APIが全て使える。
498デフォルトの名無しさん:2012/08/01(水) 22:57:40.79
ボタンや標準コントロール全て使えるのも便利だな
ゲームでも無けりゃ自分でコントロールなんてわざわざ作ってられんからな。
499デフォルトの名無しさん:2012/08/01(水) 23:04:20.08
GLUTでもできるし。
500デフォルトの名無しさん:2012/08/01(水) 23:13:34.32
EnumWindows使ってハンドル取得とかキャプチャー系のAPI使ってハンドル探すとか
そういう方法しか無いだろ。ハンドル手に入った所でウィンドウのコントロールとして
OpenGLの領域を組み込めるわけでもない。
501デフォルトの名無しさん:2012/08/01(水) 23:27:48.72
入門者向けだとGLUT使った資料が多いだろうし、GLUT入門レベルには充分だがそれ以上のことをするにはこれを使え!とか書いてある日本語の情報が無いからじゃないか
OpenGLならまずQt、みたいな流れを流行らせることが出来ればいいかもしれない
502デフォルトの名無しさん:2012/08/01(水) 23:41:43.80
駄目だね
OPENGLプログラミングは簡単で楽しく出来るって事をGLUTで体験しなければならない
それ以上の事がしたくなったら初めてwglとかに手を出せばいい
503デフォルトの名無しさん:2012/08/01(水) 23:49:01.23
>>496
それだと座標とか更新できなくね?
504デフォルトの名無しさん:2012/08/01(水) 23:59:00.46
たいしたGUIはいらないし、macでも同じコード動かしたいし
505デフォルトの名無しさん:2012/08/02(木) 00:01:17.94
>>502
本格的にやるならglut卒業しろって話だろ
入門時の話はしてない
506デフォルトの名無しさん:2012/08/02(木) 00:08:18.96
glutで十分ならずっとglutでも何も問題ない
glutと同じものを作る意味もないし
507デフォルトの名無しさん:2012/08/02(木) 00:14:18.38
問題あるのに無理やりglutで何とか出来ませんかねって聞いてるから
卒業しろっていわれるんだろ
508デフォルトの名無しさん:2012/08/02(木) 00:24:24.47
そんな個人的なグチをここで言われても
509デフォルトの名無しさん:2012/08/02(木) 01:05:42.83
このスレの流れから出た話だろ
510デフォルトの名無しさん:2012/08/02(木) 03:09:45.00
>>495
windowsでだけど描画を別スレッドにしてる。glutじゃできないかも
511デフォルトの名無しさん:2012/08/02(木) 04:03:02.79
別に画期的なことしてないので万年glutで十分
512デフォルトの名無しさん:2012/08/02(木) 10:05:35.74
ステマはqtスレに帰れ。
513デフォルトの名無しさん:2012/08/02(木) 10:22:58.27
これほど酷いステマの使われ方を見たのは初めてだ
514デフォルトの名無しさん:2012/08/02(木) 17:32:15.27
そうだよな、これはアンチQt派によるネガキャン
515デフォルトの名無しさん:2012/08/02(木) 18:29:32.28
たかがマ勢がいきがっておるのぅ...
516デフォルトの名無しさん:2012/08/02(木) 21:09:20.44
だが四天王の中では最弱
517デフォルトの名無しさん:2012/08/02(木) 22:48:22.31
WindowsならC# + OpenTKで簡単に標準のGUIアプリケーションと組み合わせられるな。
Macだと元々CocoaアプリにはNSOpenGLViewがあるし。
518デフォルトの名無しさん:2012/08/02(木) 23:14:49.71
でもマルチプラットフォームを考えるとglutかQtですかね
519デフォルトの名無しさん:2012/08/03(金) 01:57:19.56
やっぱり描画は別スレッドにするのが良いよなあ
ttp://doc.qt.nokia.com/qq/qq06-glimpsing.html#writingmultithreadedglapplications

Qtにはglutみたいな文字列描画機能があるけど
描画専用スレッドからは使えないのが残念だな
520デフォルトの名無しさん:2012/08/03(金) 04:16:48.97
GLUTは単一スレッドでマルチウィンドウ使えるし、研究系とか自社内ツールとかなら十分
Qtに合ってる内容だとかチーム全体がQt好きとかなら選択すればいいけど、なんでもかんでも気軽に導入ってわけにもいかんでしょ
521デフォルトの名無しさん:2012/08/04(土) 02:17:25.45
ttp://pouet.net/groups.php?which=1317&order=release

ASDのメガデモはほとんどGLUTで作られている。
522デフォルトの名無しさん:2012/08/04(土) 02:50:13.52
GUI必要ないからね
523デフォルトの名無しさん:2012/08/04(土) 19:53:10.75
QtでOpenGL使うほうが使い捨てでも楽だろ
ポトペタしたら描画コード書くだけだぞ
524デフォルトの名無しさん:2012/08/04(土) 20:01:18.01
GUIしたいだけならC#でOpenGLすりゃいいのに
525デフォルトの名無しさん:2012/08/04(土) 20:50:34.66
C#で組むメリットが判らんQtに比べ何がいいんだ?
MSの奴隷専用だろ
526デフォルトの名無しさん:2012/08/04(土) 20:52:02.91
なぜMSが関係あるんだ?
527デフォルトの名無しさん:2012/08/04(土) 21:07:36.28
Qtうぜー。描画以外のとこなんて何でも好きにすりゃいいだろ。
528デフォルトの名無しさん:2012/08/04(土) 21:17:23.42
>>526
MS以外の環境で開発されてないだろ
Linuxでもmonoで動くけどWindowsの輸入品ばかりで
Linux上で新規開発されたソースなんて配布されてない
529デフォルトの名無しさん:2012/08/04(土) 21:19:47.50
だからメタアルゴリズムに精を出してマを駆逐しろと言っておろうに・・・
530デフォルトの名無しさん:2012/08/04(土) 21:23:45.93
Windowsの輸入品?
531デフォルトの名無しさん:2012/08/04(土) 21:26:48.57
QtにWindowsの輸入はありえないからね
532デフォルトの名無しさん:2012/08/04(土) 21:29:39.07
C#でOpenGL使えるのか?
System.WIndowsなしで
533デフォルトの名無しさん:2012/08/04(土) 21:32:34.01
なぜなしなんだ?
534デフォルトの名無しさん:2012/08/04(土) 21:33:30.18
535デフォルトの名無しさん:2012/08/04(土) 21:35:36.84
OpenGL の外の話題は余所でやれよ
536デフォルトの名無しさん:2012/08/04(土) 21:35:41.10
なぜこたえられないのか?
537デフォルトの名無しさん:2012/08/04(土) 21:37:20.44
>>530
Visual Studioありきだからな
他のOSでC#をうまく使える環境がない
538デフォルトの名無しさん:2012/08/04(土) 21:42:58.05
C#使う奴にDirectXよりOpenGLがいいってやつが居るのか?
539デフォルトの名無しさん:2012/08/04(土) 21:44:13.46
それがQt最高C#はカスという理屈ですか?
540デフォルトの名無しさん:2012/08/04(土) 21:45:21.96
なんでGUIツールキットとプログラミング言語を比べるバカが現れるのか
541デフォルトの名無しさん:2012/08/04(土) 21:49:09.94
C#でglut最高だNE!
542デフォルトの名無しさん:2012/08/04(土) 22:10:31.09
楽するためにGlut使う。
ただそれだけだ。
543デフォルトの名無しさん:2012/08/04(土) 22:11:45.70
glutはファイル選択ダイアログが使えればなあ
544デフォルトの名無しさん:2012/08/04(土) 22:16:13.79
glutはどうしてぐるっとっていうの?
545デフォルトの名無しさん:2012/08/04(土) 22:28:32.59
>>543
windowsならGetOpenFileNameで
546デフォルトの名無しさん:2012/08/04(土) 22:46:42.57
ぐらぐらしているから
547デフォルトの名無しさん:2012/08/05(日) 05:20:23.65
普通のglutのバグでどうにもならなくなってからfreeglutを使ってる。
当たり前だが、ちゃんと動くのは素晴らしい。
548デフォルトの名無しさん:2012/08/05(日) 06:06:11.24
glutのバグってどういうバグ?
549デフォルトの名無しさん:2012/08/05(日) 10:55:50.13
今GLUTって言ったらfreeglutが普通に使われてるんじゃないの
550デフォルトの名無しさん:2012/08/05(日) 11:45:39.30
普通って?
551デフォルトの名無しさん:2012/08/05(日) 11:53:07.78
SDLでいいんじゃないの?????
552デフォルトの名無しさん:2012/08/05(日) 12:11:11.85
普通のってのはNate Robins氏が公開しているglutの事。
64bit環境用にビルドしたDLLを使ったらglutTimerFuncが動作しなかった。
553デフォルトの名無しさん:2012/08/05(日) 14:01:00.27
本家は最終更新日が10年以上前だからなー
554デフォルトの名無しさん:2012/08/05(日) 14:31:26.00
>>552
やってみたけど64bit 32bit関係なしにsrcからビルドすると正しく動かないみたい
binの配布の方は動くんだけど、ソースが違うのかな(コンパイラのせいかも)
win32_util.cのgettimeofdayあたりが原因っぽい
これ使ってるプログラムも保守してるので将来64bit化で嵌らずすんで助かったかも。thx info
555デフォルトの名無しさん:2012/08/05(日) 15:40:14.21
>>554
流石に配布されている32bitのほうはビルドせずに使ってたから、それもsrcからビルドすると動かないの気付かんかった。
OpenGL勉強中の素人が嵌った点でもお役に立てたようでなにより。
556デフォルトの名無しさん:2012/08/06(月) 08:39:45.06
C#でもOpenGL使うだろ。このスレ的に言って
557デフォルトの名無しさん:2012/08/06(月) 13:46:49.63
だから敵対ベンダーの話はよそでやれ
558デフォルトの名無しさん:2012/08/06(月) 19:29:39.02
C#とOpenGL、悪くない選択だと思うが?
559デフォルトの名無しさん:2012/08/06(月) 19:59:16.46
どやってC#でやるん?
一旦CLI使って関数をエクスポートしてC#から利用?
560デフォルトの名無しさん:2012/08/06(月) 20:08:22.82
ググりゃ一杯でてくんだろ
561デフォルトの名無しさん:2012/08/06(月) 20:14:40.82
っテンプレ
562デフォルトの名無しさん:2012/08/06(月) 20:30:49.40
OpenGLって別スレッドのオフスクリーンで描画して
BitBlt転送で表示とか出来んのかのぅ
563デフォルトの名無しさん:2012/08/06(月) 21:34:58.32
>>562
OpenGL用スレッドを作って
フレームバッファオブジェクトにレンダリングして、その内容をGPUのメモリからメインメモリへ転送する事はできる。
後はそのメモリの内容を表示するとかすればいいんだけど何故そんな事したいの?
564デフォルトの名無しさん:2012/08/06(月) 21:43:48.04
フレームバッファオブジェクトねぇ
ありがと
565デフォルトの名無しさん:2012/08/06(月) 22:45:32.04
死ねよお前w
566デフォルトの名無しさん:2012/08/06(月) 23:19:27.10
何が不満なんだ・・・
567デフォルトの名無しさん:2012/08/07(火) 00:28:37.15
欲求不満なのね
568 忍法帖【Lv=40,xxxPT】 :2012/08/07(火) 02:15:14.98
おまいらはOpenGL4.3とかOpenGLES3.0については何か語らないの?
569デフォルトの名無しさん:2012/08/07(火) 02:30:47.68
OpenGL 4.3とES 3.0出たな。
ES 3.0はやっとかって感じ。

詳細は読んでいないけど、しかしcompute shaderとはな。同じKhronosなのにOpenCLとかぶるんじゃないか。
570デフォルトの名無しさん:2012/08/07(火) 07:12:35.56
なんで、いつもDirectXの後追いなんだろ。

たまにはOpenGLの方から新技術を出して、DirectXに真似させればいいのに。
571デフォルトの名無しさん:2012/08/07(火) 08:19:28.87
ComputeShaderは確かにOpenCLと被るけど、ポストプロセス処理するのにわざわざOpenCLを別に使わないといけないのはめんどくせー!というのに応えるものっぽい
確かに使いやすそうだと思う

4.3はもはやそれほど機能追加無いかと思ってたけど意外に新機能多いね
572デフォルトの名無しさん:2012/08/07(火) 14:12:25.42
Faster Zombies!
ttp://blogs.valvesoftware.com/linux/faster-zombies/

Windows7 Direct3D - 270.6 FPS
Windows7 OpenGL - 303.4 FPS
Linux(Ubuntu) OpenGL - 315 FPS
573デフォルトの名無しさん:2012/08/07(火) 17:00:24.38
NvidiaはOpenGLに力入れてるからなぁ
GLUTの作者がNvidiaにいるらしいぞ
574デフォルトの名無しさん:2012/08/07(火) 20:42:21.66
954 名前:デフォルトの名無しさん [sage]: 2012/08/07(火) 11:20:40.11
OpenGLスレにわざわざ出張してステマする奴らに言われたくないだろうな。
575デフォルトの名無しさん:2012/08/07(火) 21:37:28.69
じゃあQuadro安くしてくれよ!!
576デフォルトの名無しさん:2012/08/07(火) 22:25:29.31
初心者で申し訳ないのですが,リファレンスなどを見ても発見できなかったため
アドバイスいただけないでしょうか.
現在,光源が30程度の環境のレンダリングと
その高速化を行いたいと考えており,これにOpenGLを用いようと考えています.
多くの資料が光源数は最大8個と記述されていますが,一部のサイトで
環境によっては,8個以上の光源も利用できると記述されています.
http://kur.dyndns.org/java/chapter3.html
下記のサイトを見ると,GPUによっては16個可能なようですが,どのような原因で
これが可能なのか,現在の新しいGPUについては記載されていません.
http://delphigl.de/glcapsviewer/statistics_openglcap.php?listreportsbycap=GL_MAX_LIGHTS

どのような環境でそのような設定が可能か,ご存知の方はおられないでしょうか.
研究目的なので,高性能なハードウェアは用意できる環境です.
よろしくお願い致します.
577デフォルトの名無しさん:2012/08/07(火) 22:43:00.71
シェーダーを書けばもっと大量に増やせる
578デフォルトの名無しさん:2012/08/07(火) 22:44:20.38
>>576
大抵8なんじゃないかな
それに16じゃ30以下だから足りないんじゃね?
4回合成が2回になって高速化みたいな話かななら
素直にFragmentShader使うばいいかと
579デフォルトの名無しさん:2012/08/07(火) 22:44:35.40
8個って1.1辺りの制限か?
580デフォルトの名無しさん:2012/08/07(火) 22:57:13.34
実はオフラインのライトマップで十分とかいうオチはないよな
581デフォルトの名無しさん:2012/08/08(水) 00:01:58.47
様々なご回答をいただきありがとうございます.
理解が及ばない点があり,申し訳ないのですがいくつか質問させて下さい.

>>577,578
シェーダーというのはGLSLや.Cgでしょうか.
これまで,OpenGLのみしか扱っていなかったので,シェーダー言語についての知識がないのですが,
これらの,拡張言語と組み合わせることで,複数光源が可能になるという理解でよいでしょうか.
また,この場合は,複数回のレンダリングではなく,一度に30個の光源を定義可能ということでしょうか.

>>579
現在のバージョンでは,光源数に制約はないのでしょうか.
バージョンごとの差異がよくわからず,以前利用したことのあった2.x系を利用しています.

>>580
申し訳ないです.ライトマップについての理解が乏しいのですが
テクスチャマッピングのお話でよいでしょうか.
今回想定しているモデルでは,30個の光源に設定した個別の明るさや色を
ある程度忠実に再現したいと考えておりまして
この点につきまして,テクスチャマッピングでは困難であると考えていますが
理解が誤っているでしょうか.
582デフォルトの名無しさん:2012/08/08(水) 02:51:23.94
パラメタ制御したいならどのみちシェーダーだね
583デフォルトの名無しさん:2012/08/08(水) 04:09:32.77
>>581
あーだこーだ言うよりも
ttp://www.opengl.org/registry/doc/glspec43.core.20120806.pdf
ttp://www.opengl.org/registry/doc/GLSLangSpec.4.30.6.pdf
この二つのpdfファイルを読みさえすれば何でもできるようになるぜ。
584デフォルトの名無しさん:2012/08/08(水) 04:31:17.25
日本語でおk
585デフォルトの名無しさん:2012/08/08(水) 06:04:08.88
>>581
30個のライトを同時にレンダリングできる。いまやOpenGLを扱うならシェーダーは必須
研究職でプログラミングは素人でお金が沢山あるなら、ぜひ高性能なプログラマの雇用を
586デフォルトの名無しさん:2012/08/08(水) 09:31:45.64
自前でアルファブレンドを行いたいのですが
点を打つ前の色を取得することは可能ですか?
587デフォルトの名無しさん:2012/08/08(水) 09:46:32.61
>>586
フラグメントシェーダ
588デフォルトの名無しさん:2012/08/08(水) 10:38:17.35
>>586
フレームバッファを直接参照することはできないので
ブレンド前画像をテクスチャにしとく
589デフォルトの名無しさん:2012/08/08(水) 12:51:22.97
g_FragColor = α*Color + (1-α)*g_FragColor
590デフォルトの名無しさん:2012/08/08(水) 16:26:28.21
参照できるのか出来ないのか
591デフォルトの名無しさん:2012/08/08(水) 19:20:10.25
前スレの32あたりでも話題になってそんときはできないっていう話になってる
ブレンドしたい画像を独立にテクスチャにレンダリングして最後に合成描画が簡単なような
592デフォルトの名無しさん:2012/08/08(水) 23:11:08.36
詳しい事は知らんが、OpenGL4.3でパイプライン上ではフラグメントシェーダの後にコンピュートシェーダが追加されて
アルファブレンディングがプログラマブルになったらしい。

詳しくは
>>583
を読んでくれ
593デフォルトの名無しさん:2012/08/09(木) 23:11:51.59
おまいらPOV-rayは使わないの
594デフォルトの名無しさん:2012/08/10(金) 00:04:37.85
リアルタイムレンダリングできるのなら使うが?
595デフォルトの名無しさん:2012/08/10(金) 00:28:24.47
え?今時のハードならレイトレース程度なら余裕じゃね?
596デフォルトの名無しさん:2012/08/10(金) 08:57:21.40
>>592
コンピュートシェーダはフラグメントシェーダの後じゃなくて、レンダリングパイプラインに組み込まれずに単体で動くもの
通常の描画をせずにシェーダだけ動かしたいという時に使うものなので、ブレンディングがプログラマブルになったりはしてないよ
コンピュートシェーダでブレンドするにしても結局2枚以上のテクスチャに一旦描画してそれらをシェーダでブレンドするという形になるので、
フラグメントシェーダでやるのとかわらない。というかフラグメントシェーダでやった方が楽だろうな
597デフォルトの名無しさん:2012/08/10(金) 10:00:36.71
コンピュートシェーダーってVertex Transform Feedbackの代わりに使える?
598デフォルトの名無しさん:2012/08/11(土) 16:21:49.67
>>595
レイトレじゃリアルにならんだろ。
パストレとかその系統じゃないと。で、それらだとまだまだ計算速度足りない。
599デフォルトの名無しさん:2012/08/11(土) 16:37:39.66
>>598

>>595 の言うレイトレースって、たぶん
パストレとかその系統も含めた大義的な意味だと思うぞ。

要するに、ピクセル毎に何らかの光線を追跡して絵を作る工程全般のことかと。
600デフォルトの名無しさん:2012/08/11(土) 17:21:18.89
「ピクセル毎に何らかの光線を追跡して絵を作る工程全般」の リアルタイムレンダリング が余裕

って言ってるとしたら相当おかしいだろ
601デフォルトの名無しさん:2012/08/11(土) 17:32:53.94
>>600
求める画素数と FPS による。
さすがにフルHDで60FPSを求めると、リアルタイムレンダリングが余裕とは思えんが。
602デフォルトの名無しさん:2012/08/11(土) 17:34:21.26
レイトレースがリアルタイムでできる訳ないだろ
603デフォルトの名無しさん:2012/08/11(土) 17:36:57.17
"real-time raytracing" でググるといくつか出てくる
604デフォルトの名無しさん:2012/08/11(土) 17:42:33.16
すげぇな
水面とかもリアルタイムレイトレースでできるのか
おそれいった
605デフォルトの名無しさん:2012/08/11(土) 17:42:50.92
しかし、Haskell でもここまで real-time raytracing できるとはすごいな。

repa という Haskell のライブラリが C で書かれた外部ライブラリの単なるラッパーではなく、
純粋に 100% Haskell で書かれた配列表現ライブラリであるだけに、余計に驚いた。
606デフォルトの名無しさん:2012/08/11(土) 18:40:16.32
>>595未来人説
607デフォルトの名無しさん:2012/08/11(土) 22:12:10.87
ttp://www.youtube.com/watch?v=7fzkHGch12c

2008頃のレイトレ。
秒間1フレぐらいだったと思う。
608デフォルトの名無しさん:2012/08/11(土) 22:20:03.33
CGなんて騙してなんぼなんだから
バカ正直なレイトレースなんて絶対流行らないだろ
物理的に間違ってても綺麗だったらおkな世界なんだし
609デフォルトの名無しさん:2012/08/11(土) 22:29:56.81
その綺麗な絵を作る目的でレイトレーシングを使う場合もある。

例えば水面下のコースティクスや、透明度が複雑に変化する媒体を通る光などは、
素直にレイトレーシングを試みた方が簡単に綺麗な絵ができる。
(この場合、フォトンマップの功績が大きいが)

これらをアニメーションさせるなら、なおさらレイトレーシングの方が騙しやすい。
Zバッファを用いた大量のポリゴンなどで表現しようとすると、
確かに処理速度は段違いに速いが、なかなか騙すが難しい。
610デフォルトの名無しさん:2012/08/16(木) 11:13:23.15
GLUIってC++だからDLLにできない(しにくい)のにLGPLってふざけてるよな
611デフォルトの名無しさん:2012/08/16(木) 23:02:06.36
某同人STGはネタでレイトレーシングモード搭載しているな
MMX/SSEメインでOpenGL関係ないけど
612デフォルトの名無しさん:2012/08/20(月) 00:01:10.43
>>604
水面だからこそリアルタイムにできる。鏡面反射・透過だからな。
拡散面だとあらゆる方向にレイを飛ばしまくらないと計算できないし。
613デフォルトの名無しさん:2012/08/21(火) 01:34:31.75
GIなら毎フレーム再計算しなくても効果あると思うがな
特に拡散面であれば

オフラインで十分と言えばそれまでだが

Parthenonがライブラリとして使えればいいのに
614デフォルトの名無しさん:2012/08/22(水) 02:49:53.52
ディスプレイリストってどういうとき使うの?
615デフォルトの名無しさん:2012/08/22(水) 07:25:50.77
必要になったとき。
616デフォルトの名無しさん:2012/08/22(水) 19:31:16.78
もうねーよ
617デフォルトの名無しさん:2012/08/22(水) 23:08:58.10
いつまでCompatibilityProfileが使えるか賭けよう
618デフォルトの名無しさん:2012/08/22(水) 23:25:39.48
OpenGLなどリアルタイムグラフィックスで現実のカメラというか距離感を模倣する方法ってありますか?

例えばOpenGLなどの標準の透視投影変換では、視点に対して正面を向いている長方形のそれぞれの平行な線の組は画面内のどこまで行っても平行ですよね。
しかし現実では視界の端のほうが距離が遠くなるので平行な線の幅が狭まって見えるはずです。

ぱっと想像した方法としては、画面をいくつかのグリッドに区切って、それぞれ対応する方向を「正面」に見てレンダリングした画像をつなぎ合わせる、があります。

何かスマートな方法はありますか?
よろしくお願いします。
619デフォルトの名無しさん:2012/08/22(水) 23:33:04.83
頂点シェーダで距離に応じて座標を調整すれば?
620デフォルトの名無しさん:2012/08/23(木) 00:01:14.64
>>618
別にグリッドに区切らなくても一度レンダリングしてからそれを湾曲した面にテクスチャとして張ればよさそう

頂点シェーダーだと左端から右端への直線は正面に頂点が無いとまっすぐになっちゃう
621デフォルトの名無しさん:2012/08/23(木) 00:09:26.98
確かに頂点シェーダーもありますが、事前分割が必要という問題点はありますね。

湾曲面に張りつけですか。確かにそれでいけそうな気もしますね。
622デフォルトの名無しさん:2012/08/23(木) 01:40:01.87
ジオメトリシェーダで分割しまくれ.
623デフォルトの名無しさん:2012/08/23(木) 02:19:59.04
前に仕事で実装したときは
普通にピクセルシェーダで座標オフセットしてたな。
曰くポスエフェ。
624デフォルトの名無しさん:2012/08/23(木) 08:22:14.74
魚眼レンズか
625デフォルトの名無しさん:2012/08/23(木) 12:47:12.67
>>618
> しかし現実では視界の端のほうが距離が遠くなるので平行な線の幅が狭まって見えるはずです。

それを言ったら、現実のカメラにはレンズによる歪みがある。

端の方が距離が遠くなることで起こる歪みよりも、
レンズによる歪みの方がもっと顕著だと思うが。
626デフォルトの名無しさん:2012/08/23(木) 15:41:21.17
>>618
透視変換の時に、z 値で割るのではなく頂点の距離で割る。
627デフォルトの名無しさん:2012/08/23(木) 16:44:03.49
>>626
だからそれじゃダメだからポストエフェクトでやればって話になってるのだが
628デフォルトの名無しさん:2012/08/24(金) 12:24:23.74
フラミンゴ2羽犠牲「申し訳ない」 旭川市長陳謝 2012/8/23 19:43
http://www.nikkei.com/article/DGXNASDG2303P_T20C12A8CC1000/

 北海道旭川市の西川将人市長は23日の記者会見で、市が運営する旭山動物園から逃げた
ヨーロッパフラミンゴの捕獲作業で、フラミンゴをおびき寄せるために用意したおとり1羽が死に、
1羽が行方不明になったことを陳謝した。

 市長は「フラミンゴは1羽25万〜30万円。市民に損害を与えて申し訳ない。
犠牲になったフラミンゴにも申し訳ないと思っている」と述べた。

 2羽のフラミンゴはキタキツネに襲われたとみられ、動物園には電話で苦情が約50件寄せられた。
市長は「捕獲して戻すことが重要な役割だ」として捕獲作業を継続する方針を示した。
同時に「寒くなれば南に飛んでしまう可能性があるので、なるべく早く連れ戻したい」と述べた。

 紋別市・コムケ湖で今月17〜18日に行われた動物園による捕獲作業では、逃げたフラミンゴの捕獲に失敗し、
おとりで用意した4羽のうち2羽を失った。園は既に、おとりを使った捕獲の中止を決めている。〔共同〕
629デフォルトの名無しさん:2012/08/24(金) 16:59:02.54
本を参考にしながらopenGLを勉強しようと思っていますが
glewのインストールがうまくいきません。

本のサンプルのビルド自体はできるのですが
「コンピュータにglew32.dllがないためプログラムを開始できません。」
とシステムエラーをはいてしまいます。

本を参考にしながら
Program Files(x86)\Micro...10.0\VC\include にglew.h
Program Files(x86)\Micro...10.0\VC\lib にglew32.lib,glew32s.lib
windows\system32 にglew32.dll
を入れてます。
同じやり方でglutもインストールしたのですがこちらは問題ないみたいです。

「追加の依存ファイル」にglew32.lib、
環境変数のpathには %SystemRoot%\system32;
を確認しています。
他に確認する項目があれば教えてもらえると助かります。

環境は
windows7 64bit
VC++ 10.0
参考にしている本は「openGL+GLSLによる3D-CGアニメーション」です
よろしくお願いします
630デフォルトの名無しさん:2012/08/24(金) 17:41:50.78
glew.dllを放り込む場所が違うんでない?
system32じゃなくて、SystemWow6432(失念)とかそんな名前のフォルダに入れないとダメとか?
631デフォルトの名無しさん:2012/08/24(金) 17:44:38.83
SysWOW64か
632デフォルトの名無しさん:2012/08/24(金) 17:49:09.08
>>629
pathに%SystemRoot%\system32があるならそこにglew32.dllを入れる
たいていはc:\Windows\System32だけど
633629:2012/08/24(金) 17:50:20.70
>>630
おー、ありがとうございます。エラーを吐かなくなりました。
windows¥SysWOW64
にglew32.dllを入れるのが正解みたいです。
助かりました。
634629:2012/08/24(金) 17:52:12.52
>>631-632
ありがとうございます。
system32だとなぜか認識してくれないみたいでした。glutは認識してるんですが。
635デフォルトの名無しさん:2012/08/24(金) 17:58:47.69
>>634
理由は64bitWindowsでは32bitアプリが参照するディレクトリはSysWow64で、
64bitアプリはSystem32になるからです。
64bitで開発しないならDLLは基本的に32bit用を使って、インストールするディレクトリ
はSysWow64に。
636デフォルトの名無しさん:2012/08/24(金) 18:50:30.60
System32 と SysWow64 って、名前が紛らわしいよな
637デフォルトの名無しさん:2012/08/24(金) 19:16:27.67
スタティックリンクすりゃdllいらず。
638デフォルトの名無しさん:2012/08/24(金) 19:19:10.66
dllは実行ファイルと同じ場所に置く方が安心じゃないか
639デフォルトの名無しさん:2012/08/24(金) 19:21:57.23
>>638
同じDLLを使う実行ファイルが複数あったら、
それぞれのフォルダにその同じDLLをコピーするのか?
640デフォルトの名無しさん:2012/08/24(金) 19:25:07.39
>>638
配布するならそれが正しいだろうね。
開発時ならvcxprojと同じ階層とかビルド時にexeができる所とかに置くのもありかな。
641デフォルトの名無しさん:2012/08/24(金) 19:25:49.03
普通は/usr/local/bin的なディレクトリを作ってそこにまとめて置いといてパス通すよな
642デフォルトの名無しさん:2012/08/24(金) 19:29:39.49
>>637
スタティックリンクだと自分のコードに問題なくても、リンクしたlibに問題あると全部ビルドし直しになるからなぁ。
643デフォルトの名無しさん:2012/08/24(金) 19:34:27.39
サイドバイサイドとかいう糞仕様には誰も触れないのね
644629:2012/08/24(金) 20:02:33.73
>>635
ああ、そういう仕組みなんですか。
ありがとうございます
645デフォルトの名無しさん:2012/08/25(土) 13:49:45.66
GTX 580 から GTX 680 に変えたら、glGetTexImage が激しく遅くなってた。
GTX 280 から GTX 480 のときは、glReadPixels が3倍ほど遅くされたが、
今度はこれかよ。
646デフォルトの名無しさん:2012/08/28(火) 01:02:20.41
ttp://www.youtube.com/watch?v=W2kAhUFccSg&feature=plcp

androidのopengl esで、↑のようなグリッド(格子線)の上を飛ぶものを作りたいんですけど、
100*100格子程度でもをDrawArrays のGL10.GL_LINESでやると線が乱れたり点滅してしまいます
綺麗に表示したり、どこまでも広がるグリッドを実装するにはどうすればいいんですか?
647デフォルトの名無しさん:2012/08/28(火) 01:07:35.28
上げられてもいないコードの誤りを指摘しろと。
648646  一つ目のコード:2012/08/28(火) 01:39:39.28
private GLSurfaceView glSurfaceView = null;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

glSurfaceView = new GLSurfaceView(this);
glSurfaceView.setEGLConfigChooser(true);
glSurfaceView.setRenderer(new GLRenderSample1());

setContentView(glSurfaceView);
}

class GLRenderSample1 implements Renderer {
float aspect = 0.0f;
float zPosition = 110f;
int size = 100; //格子サイズ

public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}

public void onSurfaceChanged(GL10 gl, int width, int height) {
aspect = (float) width / (float) height;
gl.glViewport(0, 0, width, height);
}

public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glColor4f(1.0f, 0, 0, 1.0f);
           
      ここでfloat配列 vertices に頂点座標を入れる
649一つ目の続き:2012/08/28(火) 01:40:47.20
{

FloatBuffer fb = ByteBuffer.allocateDirect(vertices.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
fb.put(vertices);
fb.position(0);

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fb);
}

//! カメラ転送
{
//! 呼び出さなかった場合の動作を考える
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();


//! 転送順番に注意する
GLU.gluPerspective(gl, 90.0f, aspect, 0.001f, 100.0f);
// GLU.gluLookAt(gl, zPosition / 2, -zPosition, zPosition, 0, 0, 0.0f, 0.0f, 1.0f, 0.0f);
GLU.gluLookAt(gl, 0, 20, zp, 0, 0, 0.0f, 0.0f, 1.0f, 0.0f);

//! 標的に近づける
zp -= 1f;
}


//! 描画
gl.glDrawArrays(GL10.GL_LINES, 0, (8*size)+4);

}
}
650二つ目:2012/08/28(火) 01:46:42.60
class GLRenderSample2 implements Renderer {

float aspect = 0.0f;
float zp = 600f;
int posBufferObject = 0;
int size = 1000;


public void onSurfaceCreated(GL10 gl, EGLConfig arg1) {


}


public void onSurfaceChanged(GL10 gl, int w, int h) {
aspect = (float) w / (float) h;
gl.glViewport(0, 0, w, h);





ここでfloat配列 vertices に頂点座標を入れる



ByteBuffer bb = ByteBuffer.allocateDirect(vertices.length * 4);
bb.order(ByteOrder.nativeOrder());
FloatBuffer posBuffer = bb.asFloatBuffer();
posBuffer.put(vertices);
posBuffer.position(0);
651二つ目続き:2012/08/28(火) 01:48:22.26
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
//! 頂点オブジェクト作成
{
GL11 gl11 = (GL11) gl;
int[] buffers = new int[1];
gl11.glGenBuffers(1, buffers, 0);
posBufferObject = buffers[0];
gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, posBufferObject);
gl11.glBufferData(GL11.GL_ARRAY_BUFFER, posBuffer.capacity() * 4, posBuffer, GL11.GL_STATIC_DRAW);
gl11.glVertexPointer(3, GL10.GL_FLOAT, 0, 0);
gl11.glTranslatef(0, 0, 0.1f);
gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, 0);
}
}

public void onDrawFrame(GL10 gl) {
gl.glColor4f(1.0f, 0, 0, 0.2f);
//! カメラ転送
{
//! 呼び出さなかった場合の動作を考える
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();

//! 転送順番に注意する
GLU.gluPerspective(gl, 90.0f, aspect, 0.01f, 1000.0f);
GLU.gluLookAt(gl, 0, 23.0f, zp, 0, 0, 0.0f, 0.0f, 1.0f, 0.0f);

zp -= 5f;
}
gl.glDrawArrays(GL10.GL_LINES, 0, (8*size)+4);
}
}
652646:2012/08/28(火) 01:57:12.40

二つ目はonSurfaceChanged で  VertexBufferObject へ転送しています。
一つ目のコードの変数zPosition と zp は同じものです。ここにコピペするとき間違えました。
653デフォルトの名無しさん:2012/08/28(火) 01:57:15.52
そのカオスなインデントはなんなの
654デフォルトの名無しさん:2012/08/28(火) 02:01:19.38
>>653
すいません。Eclipse上ではインデントされてます。
655デフォルトの名無しさん:2012/08/29(水) 00:39:58.06
double bufferingしてるかどうか。
GLU.gluPerspective(gl, 90.0f, aspect, 0.001f, 100.0f);
でnearの距離が近すぎるような気がする。
nearの値が小さ過ぎるとまずい。

glBufferData, glDrawArrays, 配列の初期化で
データが正しく設定されているか確認する。

Depthテストを有効してないのなら, ラインの描画だけなら
Depth bufferをクリアしなくてもいいけど・・・。
656デフォルトの名無しさん:2012/08/29(水) 23:41:53.79
>>655
点滅する事も無くちゃんと動くようになりました。
onSurfaceChangedの中で配列の生成、初期化をしてるのが駄目だったみたい。データは問題なかった。
アルファブレンドを有効にしたら、綺麗になりました。
遠くの方の線が重なって塗り潰したようになる症状も大分緩和されたけど、
もっと綺麗になる様にしたいのでdouble buffering を調べてみます。
657デフォルトの名無しさん:2012/09/02(日) 07:08:26.81
ドライバの設定で anti alias を有効にすると綺麗になるよ。
black hole 風にするなら、blend func を (ONE, ONE) に。
projection matrix に gluLookAt してるのがなんとなく気持ちわるい。
658デフォルトの名無しさん:2012/09/02(日) 20:51:11.05
よくOpenGLは右手系って説明を見ますが
少なくともGLSLレベルから見たら右手左手関係ないって理解であってますでしょうか。
659デフォルトの名無しさん:2012/09/02(日) 21:01:14.33
行列計算全部自前でやるならGLSLどころか互換プロファイルでも左手系を採用するのは可能じゃね
それに正規化デバイス座標って左手系じゃなかったっけ
660デフォルトの名無しさん:2012/09/02(日) 21:10:29.60
これまで適当にしか使ったことがなくて
今回新たにES2.0ベースでコードを書いてたのですが
デフォルトだとデプステストがGL_LESSらしく左手系に見えて混乱してます。
カメラのユーティリティもないので実装のためにOpenGLの参考資料とか見だすとますます・・・
661デフォルトの名無しさん:2012/09/02(日) 21:33:23.42
projection matrixかlook at matrixの実装が本家と違うんじゃない?
662デフォルトの名無しさん:2012/09/02(日) 21:36:55.14
そう思ってカメラを外して単純に頂点をそのままgl_Positionに渡してたら
むしろ左手系としてみたほうが素直に見えてきたんで・・・
663デフォルトの名無しさん:2012/09/02(日) 21:43:04.13
さらにテストしたかったのがキューブマッピングで
テクスチャのバイト並びからテクスチャ座標系まで考えると
わけが分からなくなってしまってしまいました。
664デフォルトの名無しさん:2012/09/02(日) 21:48:56.61
projection matrix含めての右手座標系なんじゃない?

ただあくまでそれはユーザーによる頂点の与え方が右手系になるためであって、projection * modelview * vertices後の空間は奥のほうがz値が大きいんじゃなかったっけ。
665デフォルトの名無しさん:2012/09/02(日) 21:57:48.00
明確に設定していないデフォルト値は信用しない方が無難。
666デフォルトの名無しさん:2012/09/02(日) 22:09:29.47
結局ただの数値だってことで理解してきたんですが
・正規化デバイス座標は実際に描画に影響するからこの座標系でx,y,zが-1〜1でなければならない
・普通のウインドウ座標ではこのときのx,yは(-1,-1)が左下(1,1)が右上(これはOpenGLの管轄外?)
・glDepthFuncの初期値はGL_LESS(OpenGL仕様では確認しました)

この事実を考えると、ウインドウで見たときに手前がかかれて欲しいと考えると
正のX軸方向は右
正のY軸方向は上
正のZ軸方向は奥
となって左手系に見えてしまいます。
667デフォルトの名無しさん:2012/09/02(日) 22:17:09.73
>>666
その認識の元で、色々なオブジェクトを色々座標変換してレンダリングしてみるのが良い。

指定したパラメータで意図したようにレンダリングされていれば、それで全く問題ない。

もしおかしな結果になったら、何故なのかを考えれば良いし、
その結果と疑問をここで質問すれば良い。
668デフォルトの名無しさん:2012/09/02(日) 22:47:38.86
>>666
どういう実装になっているかはわからんけど、標準と似たような実装と仮定して

left -1、right 1、top 1、bottom -1、near面1、far面100のprojection matrix、
視点(0, 0, 3)、注視点(0, 0, 0)、上向きベクトル(0, 1, 0)のLookAt変換で

zが0の左下(-1, -1) - 右上(1, 1)の青色の矩形と、zが-1で赤色の矩形、どっちが前に見える?
もちろんDepthFuncはデフォルトで。

青色が手前なら間違ってないと思うけど。
669デフォルトの名無しさん:2012/09/02(日) 22:55:02.35
>>668
ES2.0が前提の話なのに、
>LookAt変換
アホか?
固定機能しか使ったことが無いのなら黙っていれば良いのに。
670デフォルトの名無しさん:2012/09/02(日) 23:01:08.87
>>669
だから「標準と似たような実装」っていってるだろうが。アホはお前だ。
671デフォルトの名無しさん:2012/09/02(日) 23:10:02.87
なんでこの手のスレはいつも
質問者そっちのけで
回答者同士が争うんだろうなw
672デフォルトの名無しさん:2012/09/02(日) 23:21:14.69
OpenGLの仕様に
7. OpenGL does not force left- or right-handedness on any of its coordinates systems.
ってあるのは知ってたんですけど手抜いて日本語サイト中心に検索してると
あまりこの手の話に説得力あるサイトがないんですよね。
とくにキューブマップでさらにXYZからテクスチャひっぱるとカオスになってしまって。
673デフォルトの名無しさん:2012/09/03(月) 00:04:33.57
>>668
勉強のためにやってみましたが青色が手前でした。
実際には3Dでやってたときは>>1にあるサイトのcameraMatrixを使ってましたが
perspectiveMatrixを使ってみました。
これも結局シェーダーで自前でいじるのであれですが
一般的な動作の参考になりました。ありがとうございます。
674デフォルトの名無しさん:2012/09/05(水) 20:38:10.34
glShaderSourceでソースを指定するときって
SJISかUnicodeとかの指定ありますか?
仕様書には何も書いてない気がするのですが・・・
675デフォルトの名無しさん:2012/09/05(水) 20:41:51.37
日本語を使う必要なんて無いんだから気にするな
676デフォルトの名無しさん:2012/09/05(水) 20:46:41.22
>>674
「GLSL "character set"」でググったら、トップにこなにPDFがあった。
http://www.opengl.org/sdk/docs/tutorials/TyphoonLabs/Chapter_2.pdf

The character set used GLSL is a subset of ASCII, ・・・

だってさ
677デフォルトの名無しさん:2012/09/05(水) 20:48:55.46
GLSL 3.2くらいからUTF-8になった…はず
678デフォルトの名無しさん:2012/09/05(水) 21:31:55.75
Unicodeて
679デフォルトの名無しさん:2012/09/06(木) 10:10:36.34
glutで手っ取り早くパラメータGUIみたいなの作る方法ありますかね・・・?
rendermonkyのパラメータいじるあれっぽいやつ
680デフォルトの名無しさん:2012/09/06(木) 12:07:08.74
無いよ。
681デフォルトの名無しさん:2012/09/06(木) 17:13:10.55
GLUTのサンプルに面白いのがあった気がするけど忘れた
682デフォルトの名無しさん:2012/09/06(木) 19:49:33.97
あぁん・・ひどぅい・・・

仕方ないね
CLIとかで頑張るか
683デフォルトの名無しさん:2012/09/06(木) 20:01:52.26
じゃあ作ってみようか、という流れにはならないか
684デフォルトの名無しさん:2012/09/06(木) 21:25:46.70
質問
http://codepad.org/4ViSsdia
上記はglutを使って線を通常のopenGLで、立方体をglDrawElementを使って描写したものだけど
どうやらアクセス違反で例外が呼ばれている模様
つまり通常のglVertexなどとglDrawElementって併用できなかったりします?
685デフォルトの名無しさん:2012/09/06(木) 21:48:31.49
glVertexPointer(3,GL_FLOAT,6,0);
glNormalPointer(GL_FLOAT,6,3);
686デフォルトの名無しさん:2012/09/06(木) 22:31:35.71
ああ・・・そういうことでしたか
お恥ずかしい

こんなオチですいません
687デフォルトの名無しさん:2012/09/07(金) 00:35:56.83
いや、ストライドはバイト単位であってる気がしますね
ポインタがおかしいのかな
688684:2012/09/07(金) 09:30:47.94
https://docs.google.com/document/pub?id=1DyW4bu-ni8cr28lnltu6_r-bhve44BdIwqb2ZjwpcrI
やはりここを見てもバイトサイズ指定で問題無いように思えます
別のところに問題があるとするとやはりGPUメモリ上にあるデータとCPUから指定するデータを
行ったり来たりできないということなんでしょうか
689デフォルトの名無しさん:2012/09/07(金) 10:38:08.54
>>684
そのままで動いたけど WINDOWS7 + NVIDIA
690デフォルトの名無しさん:2012/09/07(金) 19:56:41.82
>>689
ホントですか?ウィンドウをリサイズさせてもちゃんと描写されてます?

ということはグラボ依存性か・・・?うああ
691デフォルトの名無しさん:2012/09/07(金) 20:15:03.65
>>690
>ホントですか?ウィンドウをリサイズさせてもちゃんと描写されてます?
リサイズするとき落ちるなんて初耳だが。
つか試してやったのにホントですか?とか言うならもう知らねーよ
692デフォルトの名無しさん:2012/09/07(金) 20:21:33.41
>>691
単に驚いたときの常套句だろ
それくらい汲んでやれよ
693デフォルトの名無しさん:2012/09/07(金) 20:32:12.68
>>691
すいません、正確に申しますと僕の方でも最初の一回は描写されるんですよ
なので本当にループが回っているかどうかの確認方法の一つとしてウィンドウのりサイズを
お願いしたかったのです。
情報出すのが遅れて申し訳なかったですが、出来ればリサイズしてみてループが回っているかどうか
確認していただけるとありがたいです。
ループが回っている場合ウィンドウのサイズに合わせて中央の箱のサイズも変わりますが
そうでない場合、ウィンドウの縁の部分が断続的に並んでしまう絵になってしまいます
694デフォルトの名無しさん:2012/09/07(金) 20:48:37.27
>>693
アクセス違反で例外が起きるんじゃなかったの?

うちの環境ではウィンドウのサイズに合わせて中央の箱のサイズも変わります
箱つっても真っ黒な四角だけどね

そろそろ動かないPC環境とか書きませんか?
695デフォルトの名無しさん:2012/09/07(金) 20:53:01.45
>>694
はい、確認ありがとうございます

環境忘れていました
windows7 64bit home premium
AMD Radeon HD7700

AMD特有・・・?
696デフォルトの名無しさん:2012/09/07(金) 21:15:17.95
>>695
私のノートPCのRadeonでは動いたよ

resizeしたときdisplay()呼ばれてる?
cubeの部分を全部削除して一本の線だけにすると正しく動く?
なにが原因かもう少し探ってみれば
697デフォルトの名無しさん:2012/09/07(金) 22:22:16.86
もうちょっと探ってみますがわかっていることは

最初の1ループだけは何事も無く描写される
次のループからはダメ

キューブ、もしくは線のみにした場合予想通りの動きをしてくれる

もしかするとプロジェクト設定が何か悪さをしているのかもしれませんが
しかしvs2008空のコンソールデフォルトでこうなってしまっています
ちょっとエラーメッセージなども探ってみます(真っ先に探るべきでしたが)
698デフォルトの名無しさん:2012/09/08(土) 01:54:21.75
glNormalPointer で指定しているのは何?
対応するVBOがないぞ。
699デフォルトの名無しさん:2012/09/08(土) 03:09:02.93
>>697
glGetErrorとgluErrorStringでエラーチェックくらいしようよ
700デフォルトの名無しさん:2012/09/08(土) 05:54:01.58
glGetErrorはヌル、glew再インストールしてみましたが変わらず、でした
あとはドライバ更新くらいでしょうか
701デフォルトの名無しさん:2012/09/08(土) 06:30:01.00
シングルバッファのプログラムなんだし、
display()の適当なところにglFinish()でもいれてデバッガで追ってみれば?
(あと描画の度にVBO更新してるけど、最初に1回やればいいんじゃね。まぁそれが原因とも思えないけど)

>>693
>ウィンドウの縁の部分が断続的に並んでしまう絵になってしまいます
ってのは描画が更新されないときに昔よく見た現象なような気がするんで。
少なくともdisplay()に入っていればglClearくらいはされないとおかしいような。
702デフォルトの名無しさん:2012/09/08(土) 07:10:44.06
glVertexPointerの4つ目の引数で
sizeof_GLfloat*6,0
を指定してるのはなんでなん?
それで24個の頂点の描画をしたら1個足りなくならん?
703デフォルトの名無しさん:2012/09/08(土) 07:11:31.83
デバッガで追ってみてひとつわかりました
2回目のglBufferDataで例外が発生してループを抜けているようです
ということはバッファを上書きするときに何か悪さをしているのかと思い
glBufferDataは一回だけ呼び出し、glBufferSubDataで更新をかけて見ましたが変わらず、です
さらに初回のみバッファに書き込み、以降バッファを更新しないようにしてみましたが
今度は立方体を書く直前のglColor4fで、それも外してみるとglDrawElementで例外が発生しています
(いずれも2回目のループで)
もう訳がわかりません・・・
704702:2012/09/08(土) 07:13:13.02
見間違えてた。
引数は3つしかなかったね。
そこはstrideか…。
705デフォルトの名無しさん:2012/09/08(土) 07:16:49.72
4つありますが4つ目は0でバッファ先頭のはずですよね
706デフォルトの名無しさん:2012/09/08(土) 07:25:06.27
例外?が発生したらループ(=glutMainLoopのこと?)を抜ける、のにプログラムは終了しないの?
707デフォルトの名無しさん:2012/09/08(土) 07:31:06.78
32bit版では、display関数の最初にブレークポイントを貼って実行を続けると
例外が発生→display関数の最初のブレークポイント
に戻ってきます
64bit版も作っていて、それではプログラムが終了します
708デフォルトの名無しさん:2012/09/08(土) 07:39:42.33
情報を小出しにしすぎ。
何故やったことを全部書かないのか。
709デフォルトの名無しさん:2012/09/08(土) 07:44:36.66
>>707
64bit版だと終了するって、
リサイズすると終了?
何も描画せずに終了?
710デフォルトの名無しさん:2012/09/08(土) 07:53:20.46
1ループ目は回りますが
2ループ目で ***.exeは動作を停止しましたとなりますね
つまり見た目には何も描写しないで終了しています
711デフォルトの名無しさん:2012/09/08(土) 12:05:04.24
glEnableClientState(GL_INDEX_ARRAY); が原因だったりしない?
glIndexPointer 呼んでないし
712デフォルトの名無しさん:2012/09/08(土) 13:17:08.04
試しに
glEnableClientState,glDisableClienatStateをコメントアウト
→32bit;変化なし、64bit:終了しなくなったが、例外は発生している、描写はリサイズを止めると更新
glIndexPointerを読んでみる
→32bit;変化なし, 64bit:上に同じ
いずれも箱は表示されて、線は表示されません
713デフォルトの名無しさん:2012/09/08(土) 13:21:44.21
同じく、glEnableClientState(GL_INDEX_ARRAY); はいらないと思う
714デフォルトの名無しさん:2012/09/08(土) 13:31:51.40
glEnable(GL_LIGHTING)
なのに
glColor4f(1.0,0.0,0.0,1.0);
715デフォルトの名無しさん:2012/09/08(土) 13:32:57.47
ではちょっと横道にそれて基本的な質問をさせて頂きますと

上記コードで
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,m_indexBufferID);
を呼び出せばglEnableClientStateせずともglDrawElementsでインデックスとして参照してもらえるということでしょうか
するとglEnableClientStateが必要なのは、たとえばglBindBuffer(GL_ARRAY_BUFFER,m_indexBufferID)などした場合
glIndexPointerと一緒に、ということでしょうか?
716デフォルトの名無しさん:2012/09/08(土) 13:48:21.02
>glEnableClientStateせずともglDrawElementsでインデックスとして参照

そう。

>glEnableClientStateが必要なのは、たとえば

http://www.cs.rit.edu/~ncs/Courses/570/UserGuide/OpenGLonWin-15.html
glIndexPointer() specifies the location and data format of an array of color indexes
717デフォルトの名無しさん:2012/09/08(土) 14:00:22.75
なるほど

元の問題ですが、とりあえず僕の環境以外で起こっていないということで、
僕の環境を見なおしてみます

もちろん上のコードが動いたとか動かなかったなどのレス、
あるいは上記コードそのものに対してのレスは歓迎しますがopenGLそのものの問題ではないような気がしてきましたので

お付き合いくださいありがとうございました。
なんかすっきりしない結果ですいません
718デフォルトの名無しさん:2012/09/08(土) 14:03:43.56
再現する全ソース貼るのが礼儀
719デフォルトの名無しさん:2012/09/08(土) 15:30:39.89
すいません
最終的なコードは以下になります
http://codepad.org/4nyn5wkx
最初のコードとの違いは
init関数内でバッファ操作を完結
glEnableClientState(GL_INDEX_ARRAY)および同glDisable~を削除
最終的な症状は>>712です(すべてのopenGLエラーチェックではNo Error)
なお、glewの動的リンクに切り替えられますが、結果は変わりませんでした
720デフォルトの名無しさん:2012/09/08(土) 15:41:31.36
読めないくせに人にコード要求する奴っているよね
721デフォルトの名無しさん:2012/09/08(土) 16:04:45.43
念のため、GLfloat geom[] をグローバル変数にした方がいい気がする。

722デフォルトの名無しさん:2012/09/08(土) 18:18:47.32
geom(とindicies)をグローバルに(ついでにconstに)してみましたが変わりませんでした
723デフォルトの名無しさん:2012/09/08(土) 18:36:31.97
誰か他に動かない人いないのかねぇ。別のPCでやってみれば?
724デフォルトの名無しさん:2012/09/09(日) 01:35:00.62
人生あきらめも大切だよ
725デフォルトの名無しさん:2012/09/09(日) 02:00:50.72
グラボ壊れてんじゃないの?
726デフォルトの名無しさん:2012/09/09(日) 04:09:33.22
>>725
割と大事な視点ですね

過去に痛い目見た奴は、ついでに電源ユニットも買い替える傾向にありますね

割とアレっすよね
727デフォルトの名無しさん:2012/09/09(日) 05:43:38.42
>>719 動かなかったというか
printfとかあやしいし未使用変数とかあるし動かす気あんのか
あと正直コード読む気にならないので何が表示されるかぐらい書いてくれ

法線よりも色が欲しいような気はする

>>721
glBufferSubDataは呼び出し時にコピーを行うようなので
geomのスコープは問題にはならないはず.インデントきもいけど
728デフォルトの名無しさん:2012/09/09(日) 05:50:53.19
アレとは
729デフォルトの名無しさん:2012/09/09(日) 07:01:21.19
>>727
何が表示されるかは書いてあるぞ。
それと、確かにコードはきれいとは言わないが試行錯誤の結果にケチつけるのは粋じゃないねぇ。
その程度コードも読めないで文句ばっか言ってんなよ。
730デフォルトの名無しさん:2012/09/09(日) 10:21:08.74
>>719
2回目のdisplayで不正なメモリアクセスが発生して停止しました。
Win7 64bit
Radeon HD5700(8.982.0.0)

色々とソースを変更して、とりあえず動作するようにしてみました。
・インデックスの型をGL_UNSIGNED_SHORTに変更
・glBufferSubDataをglBufferData(,,GL_STAIC_DRAW)
原因はよくわかりません。
UNSIGNED_BYTEのインデックス描画に問題がありそうですが。
GL_ELEMENT_ARRAY_BUFFERを使用せず
glDrawElementsに直接index配列を渡すとUNSIGNED_BYTEでも正常に動作するようです。
731デフォルトの名無しさん:2012/09/09(日) 10:59:30.75
>>730
うおおおおおおありがとうございます!
UNSIGNED_SHORTで動く、直接indexを渡すと動くということは
GPUが扱うメモリ側のバイト詰めの問題だったのでしょうか
こちらでも吟味してみて新しく何かがわかったら報告致します
改めてありがとうございました!
732デフォルトの名無しさん:2012/09/09(日) 14:09:26.32
>>666
正のX軸方向は右手中指
正のY軸方向は右手人差し指
正のZ軸方向は右手親指
となって右手系
733デフォルトの名無しさん:2012/09/09(日) 14:15:40.18
>>732
ギャグなのか、マジなのか・・・
734デフォルトの名無しさん:2012/09/09(日) 14:29:19.48
左手中指が正X
左手人指が正Y
左手親指が正Z
で右手系の方が個人的にパッと手で作りやすい
735デフォルトの名無しさん:2012/09/09(日) 14:37:50.96
左手で右手系とか紛らわしい
736デフォルトの名無しさん:2012/09/09(日) 15:06:30.83
まだ手で覚えてるの?小学生の算数じゃねえんだから
737デフォルトの名無しさん:2012/09/09(日) 15:50:52.31
ペンやマウス持ってると左手のが使いやすいけどな。
738デフォルトの名無しさん:2012/09/09(日) 15:54:32.11
右手系とか覚えてなくてもゲーム作ってたよ。
739デフォルトの名無しさん:2012/09/09(日) 16:02:49.10
>>736
高校生でもフラミンゴの左手の法則で使うぜ
740デフォルトの名無しさん:2012/09/09(日) 16:15:20.34
フラミンゴが優雅に立っている様を表現する
741デフォルトの名無しさん:2012/09/09(日) 16:44:59.60
そのフラミンゴの左手をうまく描写するんだな!
左手ってどうなってんだろ
742デフォルトの名無しさん:2012/09/09(日) 20:22:00.84
座標系も理解せずにOpenGLを語る
743デフォルトの名無しさん:2012/09/10(月) 10:48:02.33
フラミンゴ2羽犠牲「申し訳ない」 旭川市長陳謝 2012/8/23 19:4
http://www.nikkei.com/article/DGXNASDG2303P_T20C12A8CC1000/

 北海道旭川市の西川将人市長は23日の記者会見で、市が運営する旭山動物園から逃げた
ヨーロッパフラミンゴの捕獲作業で、フラミンゴをおびき寄せるために用意したおとり1羽が死に、
1羽が行方不明になったことを陳謝した。

 市長は「フラミンゴは1羽25万〜30万円。市民に損害を与えて申し訳ない。
犠牲になったフラミンゴにも申し訳ないと思っている」と述べた。

 2羽のフラミンゴはキタキツネに襲われたとみられ、動物園には電話で苦情が約50件寄せられた。
市長は「捕獲して戻すことが重要な役割だ」として捕獲作業を継続する方針を示した。
同時に「寒くなれば南に飛んでしまう可能性があるので、なるべく早く連れ戻したい」と述べた。

 紋別市・コムケ湖で今月17〜18日に行われた動物園による捕獲作業では、逃げたフラミンゴの捕獲に失敗し、
おとりで用意した4羽のうち2羽を失った。園は既に、おとりを使った捕獲の中止を決めている。〔共同〕
744デフォルトの名無しさん:2012/09/10(月) 13:31:16.39
サブメッシュで質問があります。
サイコロの6面をマテリアル(シェーダー)を変えながら6回描画した場合、
シェーダーを6回取り替えることになりますが、OpenGLのVertexArrayオブジェクトも6回変えなければならず
単にメッシュを6回レンダリングするのとパフォーマンスに差がない気がします。
ツールなどで見かける「サブメッシュ」にはどういう利点があるのでしょうか?


745デフォルトの名無しさん:2012/09/10(月) 13:50:34.38
>>744
ツールによって用語が違うだろうからそれだけでは分からないが、
多分、パフォーマンスを改善するためにそういう仕組みがあるのではなく、
サブメッシュを複数持つ論理的な単位のために存在するのだろう。
モデリングするときには一体のものとして作業したいが、部分によって
マテリアルが違う、というようなときに便利だろう。
746デフォルトの名無しさん:2012/09/10(月) 16:06:53.30
>>732-735
理解した。
ありがとう。
747デフォルトの名無しさん:2012/09/10(月) 19:52:36.07
小学生の時のほうが頭だけで考えれた
おっさんになったら手をひねり出す
小学生の時にOpenGLを教えたほうがいい
748デフォルトの名無しさん:2012/09/11(火) 00:53:12.73
オープンGLとダイレクトXのクロスライブらりーででベレップしたい
749デフォルトの名無しさん:2012/09/11(火) 02:10:29.21
>>748
どうせシェーダで詰むよ
750デフォルトの名無しさん:2012/09/11(火) 10:35:44.39
Cgなら両方で使える、はずだよ。
751デフォルトの名無しさん:2012/09/11(火) 11:23:48.92
シェーダは適当なプリプロセッサをかまして変換したらいい。
GLSL と HLSL はそんなに変わらないから。
752デフォルトの名無しさん:2012/09/11(火) 11:28:41.98
でベレップ ってなに?
753デフォルトの名無しさん:2012/09/11(火) 12:38:19.55
develop のことだろ

この程度の推論もできんのか
754デフォルトの名無しさん:2012/09/11(火) 13:14:58.87
755デフォルトの名無しさん:2012/09/11(火) 14:06:33.29
ライブらりー ってなに?
756デフォルトの名無しさん:2012/09/12(水) 07:22:33.28
OpenGL++のことだよ
757デフォルトの名無しさん:2012/09/22(土) 14:35:37.10
wxGLCanvasの質問はここでいい?
758デフォルトの名無しさん:2012/09/22(土) 15:32:40.75
GL部分の話ならいんじゃね、どうせそんな賑わってないんだし
環境固有の問題が絡むと反応できんがw
759デフォルトの名無しさん:2012/09/22(土) 16:10:29.68
Android端末って恐ろしい程CPUもGPUも遅い
よくこれでまともに動く3Dソフトが作れるもんだな外人は…
760デフォルトの名無しさん:2012/09/22(土) 16:42:51.95
遅いっていっても2.3端末以降とかで縛れば、一昔前のPC並に叩けてびっくりするけどなあ
JAVAから叩くのは早々に諦めたが

もちろん俺もマーケットに並んでる3Dゲームには惚けるしかないけどw
数学バカが集結してGPU別に最適化やってそうなイメージ
761デフォルトの名無しさん:2012/09/22(土) 16:57:43.43
http://user.xmission.com/~nate/glut.html
ここの glut32.lib を link しています。
winmm.lib に依存するコードは書いていないのに、

LINK : fatal error LNK1104: ファイル 'winmm.lib' を開くことができません。

というエラーが出るのですが、なぜでしょう?
環境は VC++ 2008 Express Edition です。
762761:2012/09/22(土) 17:09:15.63
事故解決しました。
763デフォルトの名無しさん:2012/09/22(土) 17:19:50.70
>>759
既にGPU性能は春モデルはPS1以上、夏モデルはPS2を凌駕している。
Javaで組むのは論外として、きちんとndkやneonでの最適化はやっているのか?
764デフォルトの名無しさん:2012/09/22(土) 17:29:22.21
ES2.0対応機種くらいなら、NDKを使ってればそれなりに速いと思うけど。
NEON使わなくとも。
765デフォルトの名無しさん:2012/09/22(土) 17:53:34.80
まあ今はPCで適当に書いても劇速だからなぁ。
PS1レベルから処理コスト考えてるような人じゃないと遅いと感じるのかもね。
766デフォルトの名無しさん:2012/09/22(土) 20:37:55.11
PS1はAndroidスマホで動いている
しかもソニー公式
767デフォルトの名無しさん:2012/09/22(土) 21:52:01.64
で?
768デフォルトの名無しさん:2012/09/22(土) 23:00:07.87
ソニーの公式エミュってPS1の仕様通りに内部固定少数点でポリゴン割れるのかな
いやちょっと気になっただけだが
769デフォルトの名無しさん:2012/09/23(日) 12:38:31.31
AndroidのGLSLは、少し大きなサイズのシェーダを実行すると、
不安定になってOSごと巻き込んで落ちるのは勘弁してほしい。
これだとほとんどお決まりの処理しか書けないんだよね。
770デフォルトの名無しさん:2012/09/23(日) 15:00:24.58
>>763
PCのGPUと比較すると100倍くらい差があるからね・・
リアルタイムレイトースがGLSLでさくさく動く時代だし
771デフォルトの名無しさん:2012/09/23(日) 15:18:51.17
>>770
具体的にどのGPUと比較して100倍なのか、前提条件を明確にしろ。
どうせ脳内ソースの妄想だろう。
772デフォルトの名無しさん:2012/09/23(日) 19:14:41.60
Tegra3 12 GFLOPS
HD7870 2.56 TFLOPS
HD7970 3.79 TFLOPS

ハイエンド同士だと100倍どころか300倍違う
773デフォルトの名無しさん:2012/09/23(日) 19:16:14.29
ハイエンドじゃなくて一般的な性能の奴で比べろよ
ほとんどの人が持ってないんじゃ意味ないだろう
774デフォルトの名無しさん:2012/09/23(日) 19:49:07.73
SandyBridge内蔵GPUでおよそ100GFLOPS
775デフォルトの名無しさん:2012/09/23(日) 19:59:09.77
なにこのきもいの。
なにが気にくわなくて難癖つけてんのか分からんw
776デフォルトの名無しさん:2012/09/23(日) 20:26:08.63
なるほど、GPU性能とは小数の計算速度のことなのか。
777デフォルトの名無しさん:2012/09/23(日) 20:46:29.09
Corei7-3.4G RADEON HD7700とMSM8660 1.5GHzで組んでるけど、
解像度と統一して、依存部分や拡張命令をそれぞれに対応させている以外は、
ほぼ同じソースでFPSは20倍程度の差。
CPUの圧倒的な差を思えば健闘していると思うけどね。
778デフォルトの名無しさん:2012/09/23(日) 21:00:14.80
その話、ソースに依存してくるんじゃないですかね・・・?
779デフォルトの名無しさん:2012/09/23(日) 21:15:08.76
他人の情報など当てにせず、自分で確かめればすむことだ。
結局、性能差なんて自分の組んだプログラム次第なんだから。
780デフォルトの名無しさん:2012/09/23(日) 21:57:28.30
PCのFPSなんて、今では演算周りの処理能力以前にディスプレイが最大の制約要因だろうに・・・
781デフォルトの名無しさん:2012/09/23(日) 22:38:05.18
性能測定にディスプレイの表示能力なんて何の関係もないのに、
この馬鹿は何を言っているんだろう?
782デフォルトの名無しさん:2012/09/23(日) 22:53:01.08
馬鹿なんだろう。
783デフォルトの名無しさん:2012/09/24(月) 00:28:41.96
馬鹿には無理
784デフォルトの名無しさん:2012/09/24(月) 02:52:31.39
流れを切るようで申し訳ないですが質問です。

勉強のため、OpenGL ES 2.0をいじっています。
やろうとしていることは
MikuMikuDance(MMD)で使用されるモデル(PMD)とモーションファイル(VMD)を
使用してアニメーションさせるというものです。
ここで質問なのですが、ボーンの情報(回転・移動)をシェーダに渡す際に
テクスチャを使用するのは一般的なものなのでしょうか。

スキニングをシェーダでやりたいと思っていまして
各ボーンの行列をuniform変数として渡すにはボーン数があまりにも多く
どうにかできないものかとググっていたところ下記のサイトがヒットしました。

OpenGLでGPUスキニング【頂点テクスチャ編】
ttp://nullorempry.jimdo.com/2012/07/02/opengl%E3%81%A7gpu%E3%82%B9%E3%82%AD%E3%83%8B%E3%83%B3%E3%82%B0-%E9%A0%82%E7%82%B9%E3%83%86%E3%82%AF%E3%82%B9%E3%83%81%E3%83%A3%E7%B7%A8/

このようなやり方は邪道だったりしないのかと思った次第です。
よろしくお願いします。
785デフォルトの名無しさん:2012/09/24(月) 03:13:38.03
GPUに大量データ渡すならテクスチャ転送になるというのはもう普通なんじゃないかな
テクスチャと命名したときと状況が違いすぎる
786デフォルトの名無しさん:2012/09/24(月) 07:43:02.60
>>785
なるほど。
本来とは違う使い方ではあるけれども
大きなデータはテクスチャを使うのが
今となっては普通なんですね。
もやもやが解消されました。
ありがとうございました。
787デフォルトの名無しさん:2012/09/26(水) 00:28:36.45
GLES2.0の初心者ですがすれ違いでしたらすいません。
現在勉強中でやっとシェーダ上でのスキニングとシャドウマップができたところです。
シャドウマップをやっていて気付いたのですが、シェーダ上でボーン処理をすると
シャドウマップ作成などのプリプロセス?でも頂点シェーダを通ってしまいます。

今後ポストエフェクト用にパス数を増やしていきたいのですが
DirectXのマルチレンダーターゲットの様な頂点シェーダは1回で済むみたいな
やり方ってありますでしょうか。

2パスでの描画でしたが予想以上に遅かった
(約5000頂点のモデル1個と地面を描くだけで60fpsをきってしまいました)ので原因が気になってしまいました。

今はVBO使ってなかったのでそっちでどのくらいマシになるかやってます。
788デフォルトの名無しさん:2012/09/26(水) 00:58:46.15
すいません787ですが
環境はAndroid2.3でNDK+GLES2.0で組んでます
789デフォルトの名無しさん:2012/09/26(水) 17:09:01.72
(Windows で)右上の閉じるボタンでウィンドウを閉じたとき
なんらかのコールバック関数を呼ばせることは出来ますか?

閉じるボタン以外(ESCキーを拾うなど)の方法で次のコードで終了させると
glutDestroyWindow(glutGetWindow());
myfreeresourcefunction(); // 自前のリソース開放部分
exit(0);
リソースの開放が可能ですが
右上の閉じるボタンを押したときは glutMainLoop() の方が
いきなり終了するようでリソースの解放が出来ないのです
790デフォルトの名無しさん:2012/09/26(水) 17:19:52.31
glutCreateWindowWithExit
GLUT_BUILDING_LIB
791デフォルトの名無しさん:2012/09/26(水) 17:25:52.48
GLUT より GLFW
http://www.glfw.org/
792デフォルトの名無しさん:2012/09/26(水) 17:32:08.21
793デフォルトの名無しさん:2012/09/26(水) 17:47:48.01
>>790-792
>>792 さんの方法で出来ました
本当にありがとうございました
794デフォルトの名無しさん:2012/09/26(水) 20:05:31.13
789 です
とりあえずうまく行っていたように見えたのですが
atexit() を実行したあとに例外を投げると落ちます
同じコードで atexit() が無い時は例外は捕捉出来ました
また atexit() を実行する前に例外を投げたときも正常です
atexit() で exit() の動きが変わることで
例外が投げられると(catch も出来ずに)落ちるようなのですが
何が原因なんでしょう?
795デフォルトの名無しさん:2012/09/26(水) 20:07:02.86
既に OpenGL と関係無さそうな話題ではありますが
glutMainLoop() の問題っぽいのですみません
796デフォルトの名無しさん:2012/09/26(水) 20:39:04.64
リソースが二回以上開放されている
に一議員票
797デフォルトの名無しさん:2012/09/26(水) 20:41:59.20
馬鹿には無理
798デフォルトの名無しさん:2012/09/26(水) 21:05:29.89
>>796
それかも知れません
ちょっと調べて来ます

>>797
判らないなら黙っててください
うざいだけです
799デフォルトの名無しさん:2012/09/26(水) 21:07:34.76
>>798
その一言が余計なんだよ

黙って無視すること
800デフォルトの名無しさん:2012/09/26(水) 21:34:35.99
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< オマエモナー
  (     )  \_____
  │ │ │
  (__)_)
801デフォルトの名無しさん:2012/09/26(水) 21:47:39.08
>>800
俺のはいいんだよ、ためになるアドバイスだから

>>798 のは余計な一言だよ
802デフォルトの名無しさん:2012/09/26(水) 23:14:57.80
789 です
原因は良く判らないのですが
catch(){ の中に exit(1); }
を書いたら UAE 出さずに終了するようになりました
本当にありがとうございました
803デフォルトの名無しさん:2012/09/27(木) 00:51:23.72
馬鹿には無理
804デフォルトの名無しさん:2012/09/27(木) 03:54:58.35
原因分からないのに満足するとか....
805デフォルトの名無しさん:2012/09/27(木) 07:11:17.77
満足してるかどうかは >>802 からは分からんな
とりあえず妥協してるのかもしれん

ただ、このままでは危険なコードである事は間違いないな

何か知らんけど、最後に +1 したらバグらなくなった、
という類いのコードを放置するのが一番怖い
806デフォルトの名無しさん:2012/09/27(木) 10:15:00.49
789 です
atexit() を使うようにしてから
catch(){ の中に exit(1); }
を書くまでのコードについて
まだ条件は絞り込めていないのですが
例外と無関係に落ちているケースがあることが判明しました
場所は main の最後の return で落ちているようです
main の return で終了するときは
atexit() のコールバックは呼ばれないのでしょうか?
どんどん深みにはまっています
807デフォルトの名無しさん:2012/09/27(木) 10:20:39.75
ソースコード全部書くか
エラーが出る最小化して書こうよ(´・ω・`)
808デフォルトの名無しさん:2012/09/27(木) 10:23:42.29
glutのglutMainLoopつかっててmainのreturnに行く時ってどういう時よ

atexitが呼ばれてるかどうかはatexit先にprintfでも入れておけばわかるんじゃないの
809デフォルトの名無しさん:2012/09/27(木) 10:43:41.54
freeglut使え。
glutMainLoopから抜け出る機能がある。
そしてまたglutMainLoopに入る事もできる。
atexit()ではそれができない。
810デフォルトの名無しさん:2012/09/27(木) 10:46:12.17
>>808
>glutのglutMainLoopつかっててmainのreturnに行く時ってどういう時よ

Idle のコールバックの中で例外をわざと出してみています
main で例外を catch して exit() しなければ return に行くと思っています

>atexitが呼ばれてるかどうかはatexit先にprintfでも入れておけばわかるんじゃないの

これは試しました
呼ばれています
811デフォルトの名無しさん:2012/09/27(木) 10:47:43.14

ちょっと違いますね
例外を出したときだけ呼ばれている感じですが
今自分が混乱しているので
頭の中が整理出来たらまた来ます
812デフォルトの名無しさん:2012/09/27(木) 10:50:01.86
要は終了するときにリソースを開放したいだけなんでしょ
リソースクラスのデストラクタに解放コード入れておけばいいんじゃないの?
813デフォルトの名無しさん:2012/09/27(木) 10:54:00.86
元々そうしてたのですが atexit() してない状態で
ウィンドウの右上閉じるボタンをクリックで終了すると
デストラクタが呼ばれなかったという・・・
814デフォルトの名無しさん:2012/09/27(木) 11:21:02.85
>>807
そうします
しばらくおまちください

>>809
それも検討してみます
とりあえず今作ってしまったものについて原因を知りたいだけです

>>808

●自分で例外を出したときは
main で catch されて glutMainLoop() を抜けて main に戻り
return または exit() するときにリソースのデストラクタが呼ばれています
ただし return の場合は直後に UAE が出ます
exit() の場合は黙って終了します

●右上閉じるボタンで終了したときは
main に戻らず glutMainLoop() 内で exit() されている
→ atexit() で自分で開放することはできる
main 内で生成したリソースのデストラクタは呼ばれていない

です

main 内では
Hoge *hoge = new Hoge();
ではなく
Hoge hoge;
で生成しています
815デフォルトの名無しさん:2012/09/27(木) 11:34:16.86
>>814
exit()するとローカル変数のデストラクタは呼ばれない。
グローバル変数もしくはstaticな変数なら呼ばれる
816デフォルトの名無しさん:2012/09/27(木) 12:05:44.62
mainのreturnで終了して解放、その後、atexitでまた解放みたいなことになってるとみた。
SAFE_RELEASEくらいしろよ。
817デフォルトの名無しさん:2012/09/27(木) 13:55:02.64
delete したポインタとかは NULL にして
二回開放は防止してるつもりなんですけど・・・
818デフォルトの名無しさん:2012/09/27(木) 14:02:34.84
mainのreturnで解放されるリソースの一部を、
atexit()の方で使ってるんじゃないかな。
819デフォルトの名無しさん:2012/09/27(木) 14:15:17.32
789 です
>>818
たぶんそれですね
とりあえず atexit() の中の方で
危険そうな部分を回避したら
catch 側の exit() 取り除いても
終了時の UAE は出なくなりました
具体的に適切なコードに直す方法は
これから考えます
本当にありがとうございました
820デフォルトの名無しさん:2012/09/27(木) 14:20:27.69
>>819 は glutMainLoop() から生還する必殺技を手に入れた!
821デフォルトの名無しさん:2012/09/27(木) 14:23:11.42
要するにmainのreturnの直前でatexit()の設定をキャンセル出来れば良いんだな。
822デフォルトの名無しさん:2012/09/27(木) 14:49:10.46
>>822
atexitはキャンセル出来ないんだよね
823デフォルトの名無しさん:2012/09/27(木) 14:50:41.79
exitってまともなソフトなら普通使わないよな・・
824デフォルトの名無しさん:2012/09/27(木) 14:59:08.43
みなさん色々ありがとうございます
>>802 の時点でとりあえず動いていた
(動いているように見えた)ので
危うく妥協してしまうところだったのですが
>>804-805 さんたちのおかげで考えを改め
望み通りまともなコードにまで改善することが
出来ました
本当にありがとうございました
825デフォルトの名無しさん:2012/09/27(木) 15:26:57.66
このサイトの日本語がめちゃめちゃ判り難いのですが
英語の原文のサイトってありますか?
http://opengl.jp/oglfaq/glut.htm#glot0070
826デフォルトの名無しさん:2012/09/27(木) 16:03:40.56
>>823
glut のことですか?
827デフォルトの名無しさん:2012/09/27(木) 16:32:26.34
828デフォルトの名無しさん:2012/09/27(木) 16:34:54.47
ありがとうございます!!
829デフォルトの名無しさん:2012/09/29(土) 15:25:01.25
有名なサイコロの表示の時みたいに
エッジが強い箇所では1頂点=1法線とはいかずに各面用の複数の法線データが必要になるけど
こういうデータを効率よく頂点バッファで転送する方法ってないのかな?
全く情報が見つからない
やはりそういう箇所でバッファを使うには法線の数だけ頂点を増やすしかない?
830デフォルトの名無しさん:2012/09/29(土) 16:20:13.95
たまたま座標が同じだけなのに同じ頂点と考えるからおかしくなる
法線やテクスチャ座標が違うということは別の面に属する別の頂点と考えるのが自然だろう
831デフォルトの名無しさん:2012/09/29(土) 16:23:26.45
四次元で考えると便利に扱える
832デフォルトの名無しさん:2012/09/29(土) 16:31:22.16
>>830
>>329 はそれは十分理解していると思うぞ。

その場合に、単に属性の数だけ頂点データを転送するのではなく、
もっと効率よく頂点バッファで転送する方法はないものか、と訊いてるのでは?

属性的には別の頂点でも、ジオメトリ的、トポロジ的には一つの頂点なんだから、と。
833デフォルトの名無しさん:2012/09/29(土) 16:36:41.36
ジオメトリ的、トポロジ的にも複数の頂点です。
本当にありがとうございました。
834デフォルトの名無しさん:2012/09/29(土) 16:39:57.79
>>833
そうなのか、余計なことだった、すまん
835デフォルトの名無しさん:2012/09/29(土) 23:47:35.59
>>823
コマンドラインのツールはexitしてるの多いけどまともじゃないん
836デフォルトの名無しさん:2012/09/30(日) 00:01:51.84
>>835
全世界の全てのまともなソフトの中で、
exit使ってるコマンドラインのツールというのは、
「普通」から外れるのではないだろうか

例外的と言ってもいいような気がする
837デフォルトの名無しさん:2012/09/30(日) 00:45:46.41
--helpだしたらexitするだろ。
838デフォルトの名無しさん:2012/09/30(日) 02:17:33.37
なんか気になってexitに致命的な問題でもあるのかとぐぐってみたが、

はて
839デフォルトの名無しさん:2012/09/30(日) 03:15:03.03
宗教的な問題だろ。
840デフォルトの名無しさん:2012/09/30(日) 09:24:06.63
マナーの問題だな。

exit は、自分の仕事が終わったら何も言わずにさっと帰って行くヤツ。

main 関数の return で終わるのは、OS に対して「お疲れ様でした」と言って帰るヤツ。
841デフォルトの名無しさん:2012/09/30(日) 09:24:48.98
quick_exit()を使え、という主旨なら同意できる。というか、そうすべきだと思う
けどそういう主旨じゃないよね
842デフォルトの名無しさん:2012/09/30(日) 09:38:08.20
GLUTはなにライブラリの分際で勝手にexitしてくれるわけ?
843デフォルトの名無しさん:2012/09/30(日) 09:44:35.26
>>840
いくらなんでもさすがに、そんな餌で釣られるわけが……
ここ腐ってもプログラム板なんで
844デフォルトの名無しさん:2012/09/30(日) 09:50:49.13
>>843
じゃあ無視ししとけよ。
845デフォルトの名無しさん:2012/09/30(日) 10:15:51.97
直行直帰
846デフォルトの名無しさん:2012/09/30(日) 10:49:38.01
GOTO
847デフォルトの名無しさん:2012/09/30(日) 12:03:10.59
GL関係ないね
848デフォルトの名無しさん:2012/09/30(日) 12:06:48.76
Errors should never pass silently.
849デフォルトの名無しさん:2012/09/30(日) 15:05:09.62
なんで1.6以降になってから短期間での改変繰り返してんだろ
そういうのはDirectXにまかせとけばいいのに
向こうはXPのために何年経っても9がデファクトのままで
OpenGLは少し前の情報がどんどん役に立たなくなっていくとか…
850デフォルトの名無しさん:2012/09/30(日) 15:24:43.60
嫌なら使わなければ良いだけなのに
何言ってんのこのひと
851デフォルトの名無しさん:2012/09/30(日) 16:05:37.81
Microsoft系以外の環境において
3Dグラフィックスライブラリは実質OpenGLしかなく、
これを使わざるを得ない状況にある。

気に入らない点があるからといって使わないわけにはいかない。
852デフォルトの名無しさん:2012/09/30(日) 16:34:42.57
バージョンアップしたからって昔の方法が全く使えなくなるわけじゃなかろう
互換プロファイルもできちゃったし
853デフォルトの名無しさん:2012/09/30(日) 17:41:10.75
829だけど一般的な3Dのファイルはフォーマットがそう効率的でない(描画の都合だけで見ると)
エッジのない箇所でも同一頂点に違う法線をどんどん定義したり、同一法線を重複して定義したり
これを頂点共有しない形にベタに展開するとかなり頂点数が増える

PCでは気のせい程度でもAndroidは最適化を詰めないとすぐ重くなる
動作確認に使ってる中華padだと6〜10kポリゴン程度が60fps維持の限界だし
854デフォルトの名無しさん:2012/09/30(日) 18:26:18.87
メモリが足りないなら共有したほうがいいだろうけど速度の話だったら共有しないほうが速いんじゃないの?
855デフォルトの名無しさん:2012/09/30(日) 18:39:24.86
素人考えだけど、共有した方がキャッシュヒット率が上がって速度も上がるのでは?
856デフォルトの名無しさん:2012/09/30(日) 18:53:04.76
>>855
頂点だけを共有して、法線やUVとかは共有できないわけだから、参照がもっと複雑になるんじゃないかな
857デフォルトの名無しさん:2012/09/30(日) 18:59:38.58
なるほど、そっちがオーバーヘッドになることもあるな
858デフォルトの名無しさん:2012/09/30(日) 19:05:02.78
結局、頂点共有とかしない方が高速だし面倒な処理もいらないっていうオチ
ローポリ化の方で対処した方がいい
859デフォルトの名無しさん:2012/10/01(月) 19:25:53.38
glpng.lib にバグがあるの知らずに変な動作で悩んでた
明らかに glpng がメモリ壊してたので
正しいデータでもう一度上書きしたら治った
今日1日つぶれた
860デフォルトの名無しさん:2012/10/01(月) 19:28:08.47
なんだそのglpng.libって
861デフォルトの名無しさん:2012/10/01(月) 19:39:49.81
ここにあったやつです
http://www.fifi.org/doc/libglpng-dev/glpng.html
野良ライブラリですかね
862デフォルトの名無しさん:2012/10/01(月) 19:49:12.68
野良かどうかはともかく、古過ぎて怖いな。
863デフォルトの名無しさん:2012/10/02(火) 00:10:06.20
すなおにlibpng使えばいいじゃん。
864デフォルトの名無しさん:2012/10/02(火) 00:57:21.27
野良だよ。
865デフォルトの名無しさん:2012/10/02(火) 05:13:13.75
野良ですか orz
最初試したときは使うのが楽だったのと
ちゃんと動いてたのでそのまま使ってました
最初から使えなかったらさっさと捨ててたのですが
中途半端に動いてる(ように見える)と危険ですね
素直に libpng 使うように軌道修正します orz
866デフォルトの名無しさん:2012/10/06(土) 15:53:45.05
言語によってはフロー制御に例外使うのをアンチパターンとしているからかな
867デフォルトの名無しさん:2012/10/06(土) 17:04:02.14
四角形2個描画して
1個固定
1個だけ回転させたいのですが
どうすればいい?
868デフォルトの名無しさん:2012/10/06(土) 17:05:44.26
それを聞くってどんだけだよ。
少しは試行錯誤しろ。
869デフォルトの名無しさん:2012/10/06(土) 17:32:07.23
ただのマルチだよ
870デフォルトの名無しさん:2012/10/06(土) 18:21:54.82
871デフォルトの名無しさん:2012/10/07(日) 14:14:04.95
>>867
方法はいくつか考えられるのでこれが正解という回答は無い

(A) 四角形A描画→四角形Aの座標そのものに回転行列をかけて更新しまう→四角形A描画
(B) 四角形A描画→GPUに送るmodel行列を回転させる→四角形A描画

GPUの頂点シェーダでは固定機能使用なら描画命令呼び出し時にセットされているパラメータから
プロジェクション行列×モデルビュー行列×頂点座標の計算をしているだけ
872デフォルトの名無しさん:2012/10/07(日) 15:47:23.27
873デフォルトの名無しさん:2012/10/07(日) 18:37:19.78
(仮題)OpenGL 4.0 Shading Language Cookbook
OpenGL 4.0シェーディング言語を使うための実用的なヒント、こつ、テクニック
ttp://www.borndigital.co.jp/book/2020.html

これ日本語版か?
874デフォルトの名無しさん:2012/10/07(日) 19:23:52.61
>>873
「表紙は英語版のものです」と書いてあるだろ
875デフォルトの名無しさん:2012/10/07(日) 19:36:28.00
そうか海外版じゃなくて英語版か
ということは中身日本語訳してあるってことか
やっと日本語のまともなcore profileの本が出るのか
876デフォルトの名無しさん:2012/10/07(日) 20:15:44.08
OpenGL SuperBible: Comprehensive Tutorial and Referenceの最初のトライアングルを書く準備
段階の頁に記述があるGLTools.aが見つかりません。
筆者のサイトのソースにも入っていなかったので困っています。
よろしければ助言ください。
877デフォルトの名無しさん:2012/10/07(日) 20:20:29.54
GLToolsのソースコードからstatic library作れば良いだろ
878デフォルトの名無しさん:2012/10/07(日) 23:14:33.07
879デフォルトの名無しさん:2012/10/08(月) 11:28:21.08
880デフォルトの名無しさん:2012/10/09(火) 18:43:26.83
調べてもどうもよくわからんので教えてほしいのだが.
UV指定したテクスチャの一部を1枚のポリゴンの中でループするのはどうやったらいいの?
881デフォルトの名無しさん:2012/10/09(火) 18:54:47.70
0->1 の代わりに 0->2 とか 0->10 とかで与える
882デフォルトの名無しさん:2012/10/09(火) 19:02:30.20
レスありがと
だがそれは1枚もののテクスチャじゃないとダメでは?
1枚のテクスチャの中に複数のパターンが入ってて,その1つをループさせたいのです
883デフォルトの名無しさん:2012/10/09(火) 19:27:22.20
>>882
誰もが「それを早く言え」と言いたくなるんじゃないかな

フラグメントシェーダーで、
テクスチャ座標に対して mod を計算するとかじゃダメ?
884デフォルトの名無しさん:2012/10/09(火) 19:53:12.27
UV値を一定時間毎に変えるだけでいいんじゃね?
885デフォルトの名無しさん:2012/10/09(火) 20:03:29.23
自分も以前同じことやろうとして、詰んだような。
886デフォルトの名無しさん:2012/10/09(火) 20:18:36.08
>>884
ループってそっちか
887デフォルトの名無しさん:2012/10/09(火) 21:12:49.16
シェーダ使えば良いだけの話。
888デフォルトの名無しさん:2012/10/09(火) 21:25:11.89
要は一枚のテクスチャでパラパラアニメしたいって事だろう?
889デフォルトの名無しさん:2012/10/09(火) 21:27:12.58
一つのテクスチャの中の一部分を1枚のポリゴンにびっしり敷き詰めたいのかと思ってた
890デフォルトの名無しさん:2012/10/09(火) 21:27:28.04
連番画像の表示はテクスチャの切り替えかtexSubImage2Dが一般的なんじゃない?
891デフォルトの名無しさん:2012/10/09(火) 21:30:09.85
読み込みを極限まで減らしたいって事だろう
892882:2012/10/09(火) 21:39:02.53
あ,ごめん
889の認識が正解
ループっていうから悪かった GL_REPEATしたいってことです
893デフォルトの名無しさん:2012/10/09(火) 21:41:46.12
コストを減らしたいのか
それなら前の人が言ってるようにシェーダを使いフレーム数渡してサンプリングの位置変えるだけ
894882:2012/10/09(火) 22:24:54.18
>883
できました
そういう事だったのね
ありがとねー 皆
895デフォルトの名無しさん:2012/10/10(水) 03:28:16.75
頭が悪いだけかと思ったら目も悪かったでござるの巻
896デフォルトの名無しさん:2012/10/14(日) 13:37:42.60
o
897デフォルトの名無しさん:2012/10/15(月) 01:00:43.90
テクスチャといえばAndroidで開発してるとGCが凄い邪魔で困る
リソースはjava側の専用APIでしか読めないからテクスチャもjavaで読むしかない
1MBの画像をたった1枚読込→GPU転送してから破棄するだけで15msもGCで止められてしまう
苦肉の策で初回起動時に外部にコピーして保存してまって直接操作してる人もいるけど管理の面で嫌だし
898デフォルトの名無しさん:2012/10/15(月) 07:09:36.88
フラッシュからデータの読み出し、デコード、GPUへ転送を考えればそんなもんだろう。
899デフォルトの名無しさん:2012/10/15(月) 08:01:26.79
libjpegでも使えばいい
900デフォルトの名無しさん:2012/10/15(月) 18:03:21.75
ヒント:マルチスレッド
901デフォルトの名無しさん:2012/10/15(月) 18:17:44.26
シングルスレッドでもload中とload完了の状態に応じてマッピングすれば実用上問題ない
firefoxが証明している(キリッ)
902デフォルトの名無しさん:2012/10/15(月) 22:49:27.15
OpenGL 4.0 シェーディング言語
ttp://www.amazon.co.jp/dp/4862461891
903デフォルトの名無しさん:2012/10/16(火) 01:54:39.06
中華padで13kポリゴン(4.6MB)のデータをストレージから読み込んで表示するのに0.3秒
Javaのメモリ確保とGCが暴れている時間が0.15秒
C++側へのデータ転送と展開、GPUへの転送その他で計0.09秒
ファイルの読込自体は0.06秒程だった

内蔵ストレージは思いのほか早かった、やはりjavaの弊害が半端ない
904デフォルトの名無しさん:2012/10/16(火) 02:25:21.07
つーかVMのメモリプールが少ないだけだよね。
搭載メモリ量の制限からしょうがないかと。
905デフォルトの名無しさん:2012/10/16(火) 02:32:37.01
このスレではandroidでのGLES話はNDK前提にした方が良くね?
結局パフォーマンスつかGCの話題しか出ないし、OpenGLの話か?とちょっと思ったもので。解決策もNDK以外ないよね。間の技術でrenderScriptはあるけど、スレ違いなのは自明だし。

いやもちろんあえてandroid+javaで、という需要があるようなら黙ります。過疎気味だしスレ分ける必要性ないじゃんとかもあるだろし
906デフォルトの名無しさん:2012/10/16(火) 11:01:17.26
androidスレがあるんだから、>905に賛成。
とは言え、OpenGLのネタがないのも事実だけれど。
だからと言って、QGLWidgetのネタ出したら元の木阿弥だしw
907デフォルトの名無しさん:2012/10/20(土) 13:12:07.34
テクスチャのロードは画面切り替え中にやればいいわけで、Now Loadingでも出しておけばよい
908デフォルトの名無しさん:2012/10/20(土) 13:14:28.83
Render To Textureでテクスチャーに書いた画像を確認したいのですが、
テクスチャーをCPU側にコピーする方法を教えてください
glMapBufferはテクスチャーオブジェクトには使えませんでした。
テクスチャー画像を確認する簡単な方法がない気がするのですが・・・
909デフォルトの名無しさん:2012/10/20(土) 17:00:52.32
馬鹿には無理
910デフォルトの名無しさん:2012/10/20(土) 17:02:48.47
>>908
画面に表示したら?
911デフォルトの名無しさん:2012/10/20(土) 18:18:55.21
>>908
glGetTexImage
912908:2012/10/22(月) 11:56:54.38
>>911
できたぞ。glGetTexImage()とか存在自体知らんかった。ありがとう
1枚目がカラーバッファーで2枚目がデプスバッファー
http://uploda.cc/img/img5084b2e7426bf.png
http://uploda.cc/img/img5084b2ed960cd.png

>>909
馬鹿には無理という事は、できた俺は馬鹿じゃないと言うことだな!

この調子でDeferred Shadingまで実装するぜ
後々の事も考えるとRGBAf32で出力したいのでまずそれを実装しないと
913デフォルトの名無しさん:2012/10/22(月) 12:48:09.15
>馬鹿には無理という事は、できた俺は馬鹿じゃないと言うことだな!

出来なかったら馬鹿だけど、出来たからと言って馬鹿じゃないとは限らない。
という解釈が正しい論理。
914デフォルトの名無しさん:2012/10/22(月) 13:10:29.54
いいえ、馬鹿には不可能、つまり馬鹿である要素が少しでも存在すれば
達成できないことを意味します。
よって達成できた時点で馬鹿ではあり得ません。

しかし人間は常に変化するものです。

達成できた後に馬鹿になる可能性もあり
今のあなたが馬鹿ではないことを保証するものではありません。
915デフォルトの名無しさん:2012/10/22(月) 13:21:48.62
馬鹿には無理であれば
無理ではなかった時点で
馬鹿ではないことになると思う
もし無理ではなかったのに馬鹿だったら
そもそも馬鹿には無理と矛盾する
916デフォルトの名無しさん:2012/10/22(月) 13:24:14.32
おまいらこんな簡単な論理も判らないのにム板に来てるのか。
917デフォルトの名無しさん:2012/10/22(月) 13:24:57.08
いや
わかってないのは >913 だけだろ
918デフォルトの名無しさん:2012/10/22(月) 15:59:19.25
>>913は直観主義論理の立場をとってるのかもよ
ある命題が真のときその対偶が真になる、というのは古典論理でしか通用しないルールだしね
919デフォルトの名無しさん:2012/10/22(月) 16:54:55.50
馬鹿にでもできたのだから間違っているのは>>909だろ
920デフォルトの名無しさん:2012/10/22(月) 17:41:48.06
直観主義を知らない>>919が馬鹿というのは分かった
921デフォルトの名無しさん:2012/10/22(月) 19:23:33.32
間違ってるのは出来てしまった >>912 の存在
922デフォルトの名無しさん:2012/10/22(月) 19:45:17.83
いや馬鹿は>>913だろ
923デフォルトの名無しさん:2012/10/22(月) 20:37:00.03
テクスチャの中身確認したいだけならCPUにダウンロードせずに表示したほうが良くね

それはそうとdeferred shadingでMSAAとか綺麗にできるのかな
検索したら帯域が超厳しいからやめとけって書いてあるが
ttp://www.opengl.org/discussion_boards/showthread.php/178037-MSAA-with-Deferred-shading
924デフォルトの名無しさん:2012/10/30(火) 02:19:36.50
デファード系に限った話じゃないけど今の主流はポストプロセス式のAAじゃない?速いし。
925デフォルトの名無しさん:2012/10/31(水) 01:04:37.90
普通にtexelFetch(gsampler2DMS, ...)だとだめなのです?intelのDirectX使ったサンプルだとそんなかんじだけど。

ポスト処理のAAだと細かいジオメトリがうまく解決できないから、ある程度のMSAAとシェーダによるリゾルブの組み合わせが良いように思う。
http://mynameismjp.wordpress.com/2012/10/28/msaa-resolve-filters/
926デフォルトの名無しさん:2012/11/03(土) 20:32:11.92
OpenGLが使いやすいC++のGUIのライブラリってなかなかないな
freeglut+gluiはファイルダイアログがないし
FLTKは自分でOpenGLのcontext作らないとマルチサンプルできないとかでクロスプラットフォームじゃないし
QtはVS2012のx64で使おうとしたらQt Creatorがnmakeやらclやらを見つけられずコンパイルできないし
927デフォルトの名無しさん:2012/11/03(土) 21:20:19.94
Qt Creatorがnmakeやらclやらを見つける仕組みって、どんなの?
928デフォルトの名無しさん:2012/11/03(土) 21:33:44.15
環境変数にはVCのパスとかそのへんは入ってないしレジストリでも見てるんじゃないか
x86にすると見つけてくれるのが謎だ
64bit対応はまだ中途半端ってことなのかもしれないな
ソース見れば分かりそうだが分かったところで直せん

qmake -tp vcでVC用のプロジェクトファイル作って
Qt Creatorはui弄る時だけ使おうとか考えたが
コンパイルが失敗するんでなえなえだわ
VS開発者コンソールからnmakeすればコンパイル通るんだが

実行ファイルがあればデバッグ実行普通にできてたし
我慢すれば問題ないレベルだったかもしれんな
イラッときて全削除しなければ良かった
929デフォルトの名無しさん:2012/11/04(日) 00:18:20.64
Qt Creator 2.6βでオプション→ビルドして実行→Compilersで自動検出されたのがずらずらっと出る
ここでそれぞれのコンパイラ使うための環境変数を設定するためにbatファイルの起動コマンドが載ってるんだが
vcvarsall.batの引数がx64とかamd64とかが自動検出されてるけど、引数はx86_amd64じゃないとダメだ
x86でコンパイラが動くのにx64で動かないのはこういう理由だったわけだ

というわけで手動で追加したらコンパイル通るようになった

追加の手順は
Qt Creatorでx64の設定をCloneしてからNameを分かりやすく変更して
%USERPROFILE%AppData/Roaming/Nokia/qtcreator/toolchain.xmlの中をその名前で検索して
<value type="QString" key="ProjectExplorer.MsvcToolChain.VarsBatArg">x64</value>
↑を↓に変更でおk
<value type="QString" key="ProjectExplorer.MsvcToolChain.VarsBatArg">x86_amd64</value>


激しくスレ違いだしニッチすぎて参考にする人がいるかどうかは知らん
930デフォルトの名無しさん:2012/11/04(日) 01:08:56.50
つまり俺のおかげという事か
931デフォルトの名無しさん:2012/11/04(日) 09:39:32.55
WxGLCanvas最強ですねわかります
932デフォルトの名無しさん:2012/11/06(火) 23:25:35.19
QtでOpenGL
ttp://www1.axfc.net/uploader/so/2665805.zip

三角形をくるくる回すだけのプログラムです
GLThread::run()が描画ループになってるのでUIがいらないならここだけ弄ればおk

まあQt使っててUIいらねえなんてことは絶対ないので
一応UIから回転を止めたり再開したりする機能も付けてみた

bool変数に値セットするだけだから排他制御要らないけど
ちゃんとやるならスレッドセーフなQueueを使ってイベント処理したり
排他制御したりする必要があるだろう

QtはUIスレッドとOpenGLのスレッドを分離できるのが良いな
タイトルバー掴んでも描画が止まらないのが良い
wgl使う場合と同等の自由度もあるのかな

Qt CreatorがVC#とかVBくらいの出来なら最強なんだけどなあ
933デフォルトの名無しさん:2012/11/07(水) 01:58:03.47
VSと比べるのは酷だろうw
VSのクオリティはもはやMS最後の綱
934デフォルトの名無しさん:2012/11/08(木) 00:32:26.14
Qtはライセンスの関係でフリー版使ったらプログラムを公開しなければならないからなぁ
935デフォルトの名無しさん:2012/11/08(木) 01:15:47.74
デマ乙
LGPLについてぐぐっておいで
936デフォルトの名無しさん:2012/11/08(木) 02:25:35.55
流石に訴えられても仕方ないレベル
なんでよく分からないままに書き散らすんだろ
殺害予告する馬鹿とは社会影響度が違うとはいえ、同レベルで理解できぬ
937デフォルトの名無しさん:2012/11/08(木) 07:23:06.56
>>934
LGPLのライブラリを使って作られたアプリとかは、
そのアプリ側のソースは公開する必要はないよ。

ただ、アプリ側のリバースエンジニアリングを禁止してはダメだけど。
938デフォルトの名無しさん:2012/11/08(木) 11:10:43.30
934 じゃないけど、LGPL 版なんてのができてたんだね。
いつ頃だったか、C++Builder からの乗り換え先を探してた時には無かったな。
939デフォルトの名無しさん:2012/11/08(木) 15:35:55.48
GLSLのデバッグ方法について教えてください
GLSLの中でブレイクポイントをはってラインでバッグとか
Uniform変数の値を確認とかってできるのでしょうか?
環境はWindows7でVisualStudio2010です。
AMDかNVIDIAのGPUでお願いします
可能ならC#/.NetアプリからGLSLの値だけでも確認できると嬉しいです

バグが取れません・・・
940デフォルトの名無しさん:2012/11/08(木) 15:42:34.82
gdebuggerおすすめ
941939:2012/11/08(木) 16:42:46.90
おすすめというか、できるかできないかを教えていただけないでしょうか
やりたいことはシェーダーが走った時のUniform変数とAttribute変数です
ライン実行はなくてもいいです
942デフォルトの名無しさん:2012/11/08(木) 16:52:37.49
馬鹿には無理
943デフォルトの名無しさん:2012/11/08(木) 19:15:54.25
そういうのはライン実行じゃなくてステップ実行ね
944デフォルトの名無しさん:2012/11/08(木) 19:26:48.67
GLSLとかOpenCLとかデバッグ難しいよなあ
945デフォルトの名無しさん:2012/11/08(木) 20:12:24.49
gdebuggerちょっとだけ使ってみたけど
バッファオブジェクトの中身とかが見れてなにこれすごいって思ったわ
つまりin変数の中身は見れますな
uniform変数も見れるんじゃね
ステップ実行ができるかどうかは分からなかった

あと整数のin変数はglVertexAttrib「I」Pointerじゃないとダメですよね
整数を入力するサンプルとか見たことないので超ハマりましたわ
946デフォルトの名無しさん:2012/11/09(金) 09:45:09.13
CPU以外で動くコードはデバッガがそれ専用じゃないと無理だからね。
947デフォルトの名無しさん:2012/11/10(土) 21:37:33.52
は?
948デフォルトの名無しさん:2012/11/10(土) 23:25:08.85
は?って低脳なのばれるから書き込まないほうがいいよ
949デフォルトの名無しさん:2012/11/11(日) 17:08:05.86
あ゛?
950デフォルトの名無しさん:2012/11/11(日) 18:37:10.31
>>948
じゃあ、お前は書かないほうがイイネ!
951デフォルトの名無しさん:2012/11/11(日) 22:53:14.23
負け惜しみがぶざま
952デフォルトの名無しさん:2012/11/12(月) 18:12:55.43
>>951の無様さが伺えるな
953デフォルトの名無しさん:2012/11/13(火) 09:28:11.18
>>946
いろいろ考えさせられるが
それをレスると、都合の良い後付けレスさせられるから止めとこ
954デフォルトの名無しさん:2012/11/21(水) 09:57:52.42
レスを見てると日本にまともなOpenGL使いがいないのがよくわかる
XCode(=gDebugger)もNsightもGLSLのシェーダーデバッグはできない
つまりブレークポイントを張って変数の値を確認とかはできない
CPU側のAPIレベルで止めてOpenGLコマンドのトレース(呼び出し履歴)の確認や
テクスチャーやバッファーオブジェクトの確認などはできる

ただシェーダー全盛の時代にAPIレベルでデバッグできた所であまり有益ではない・・・
というわけで今でも地道にテクスチャーにオフラインレンダリングして値を確認するしかない
OpenCLがカーネルデバッグできるんだからOpenGL(GLSL)もできそうなものだが・・・
955デフォルトの名無しさん:2012/11/21(水) 10:30:59.42
どうやって?
956デフォルトの名無しさん:2012/11/21(水) 12:44:58.18
海外にいるまともなOpenGL使いならできるんじゃね
954も日本人だろうからOpenGLは使えないのだろう
957デフォルトの名無しさん:2012/11/21(水) 15:34:15.93
サンプルだけ動かして
満足して終わりの人が多い
958デフォルトの名無しさん:2012/11/23(金) 02:18:25.06
つかそこまでOpenGL突っ込んで使う必要のある人居ないでしょ。DirectXなら大勢居るんだろうけどw
959デフォルトの名無しさん:2012/11/23(金) 07:20:20.02
スマホのGPUではDirect3Dは動かんよ
OpenGLじゃないと動かない
あとゲームコンソールはMS以外はOpenGLかOpenGL風のAPIになってるね
日本で箱がほぼ終了してることとPCゲー市場がそもそも死滅してることを考えられる奴なら
Direct3Dなんてオワコンにしがみついたままでいるとは思えないんだけど
960デフォルトの名無しさん:2012/11/23(金) 09:00:58.62
direct3dがオワコンだとは思わないが
マルチプラットフォーム前提で開発しないといけなかったりするのでopenGL
961デフォルトの名無しさん:2012/11/23(金) 09:52:59.41
>>959
間違っては無いが、正しくは無いな。
あんま、薄識広げんなよ
962デフォルトの名無しさん:2012/11/23(金) 09:56:08.88
xboxってそんな売れてないのか
963デフォルトの名無しさん:2012/11/23(金) 10:04:07.52
3Dを必要としない層にはDirectXは人気ですよね
964デフォルトの名無しさん:2012/11/23(金) 18:26:16.39
カバーするレイヤが違うのに毎度DirectX比較対象に出してくるのは私怨としか思えない
965デフォルトの名無しさん:2012/11/24(土) 10:18:58.13
皆Direct3DのことをDirectXと読んでるだけだろ
話をややこしくするな
966デフォルトの名無しさん:2012/11/24(土) 11:42:07.94
初歩的な質問なのですがglBlendFunc()を使って貼り付ける画像の
透過部分の透過を有効にしたい場合
テクスチャとテクスチャオブジェクトの関連付け(GLUtils.texImage2D()まで)
をしてからglBlendFuncを呼ぶか関連付をする前に呼ぶかどちらにしないと有効にならないとかありますか?
967デフォルトの名無しさん:2012/11/24(土) 12:00:19.59
有効にするのは glEnable(GL_BLEND) です
968デフォルトの名無しさん:2012/11/24(土) 12:32:52.26
>>967
すみません言い方を間違えました。

glEnable(GL10.GL_BLEND)
glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE_MINUS_SRC_ALPHA)
glDisable(GL10.GL_BLEND)

この3つを使って編集して画像に透過を加えた部分がちゃんと透過されるようにしたいです。
これのglBlendFunc()の入れる位置を教えて欲しいです。
969デフォルトの名無しさん:2012/11/24(土) 13:34:13.45
glEnable/glDisable の位置とか関係ないだろ。
970デフォルトの名無しさん:2012/11/24(土) 15:15:44.60
>>969
教えて欲しいのはglBlendFunc()の位置です
971デフォルトの名無しさん:2012/11/24(土) 15:29:55.17
glEnable(GL10.GL_BLEND) より前でも大丈夫
972デフォルトの名無しさん:2012/11/24(土) 15:31:44.99
そんなことよりtextureを貼り付ける順序の方が大事。
973デフォルトの名無しさん:2012/11/24(土) 23:36:22.17
>>972
OpenGLでは直接文字表示ができないらしいので文字を画像として
貼りたいのですがそのプログラム貼り付けます。
テクスチャとオブジェクトの関連付のみでほかは省略します。
長いので2回に分けて書きます。

gl10.glClear(GL10.GL_COLOR_BUFFER_BIT); //GL10のインスタンスのgl10は初期化済み
gl10.glEnable(GL10.GL_TEXTURE_2D);
gl10.glEnable(GL10.GL_BLEND);
gl10.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
int[] textureIds=new int[1];
gl10.glGenTextures(1,textureIds,0);
int textureId=textureIds[0];

Bitmap bitmap=Bitmap.createBitmap(512,512,Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(bitmap);
canvas.drawARGB(0, 0, 0, 0); //文字の画像の背景を透明にする
Paint paint=new Paint();
paint.setColor(Color.BLACK);
paint.setTextSize(30);
canvas.drawText(text,canvas.getWidth()/2,170,paint);
974デフォルトの名無しさん:2012/11/24(土) 23:37:25.72
gl10.glBindTexture(GL10.GL_TEXTURE_2D,textureId);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0,bitmap,0);

gl10.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST);
gl10.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_NEAREST);
bitmap.recycle();
gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);

gl10.glBindTexture(GL10.GL_TEXTURE_2D,textureId);
gl10.glColor4f(0,0,0,alpha); //alphaは時間が経つたびに減っていく


//これよりあとは描画作業

最後のglColor4fは文字の画像全体を最初は透明にし時間が経つたびにalphaを減らしていき文字が浮かび上がるような感じにするためです。
このプログラムだとこの画像を描画した部分だけ白く表示されます。
どのへんがあやしいですか?
自分的にはglcolor4f()かdrawARGB()あたりだと思うのですが。
975デフォルトの名無しさん:2012/11/25(日) 00:00:23.86
突っ込み所は沢山あるが、そもそもブレンドを止めれば文字画像は画面に出るの?
976デフォルトの名無しさん:2012/11/25(日) 00:07:33.20
glErrorを使ってどの関数がエラーになってるか調べたかい?
977デフォルトの名無しさん:2012/11/25(日) 00:51:58.73
馬鹿には無理
978デフォルトの名無しさん:2012/11/25(日) 16:12:47.84
自己紹介乙
979デフォルトの名無しさん:2012/11/25(日) 23:05:47.56
>>977
鏡見てこいよww
980デフォルトの名無しさん:2012/11/26(月) 06:31:41.83
>>978-979
この板ではこのスレしか見ないのか?
どんだけ悔しかったのか知らないが、アチコチに適当に投稿される煽りにイチイチ反応するなよ。
981デフォルトの名無しさん:2012/11/26(月) 21:35:38.60
オフラインレンダリングで整数型の数字をそのまま出力したいのですがどうもうまくいきません。
テクスチャーをinternalFormat=RGBA16ui, format=RgbaIntegerで作って、
シェーダーからivec4=0,1,2,3で出力してglGetTexでformat=RgbaInteger, type=UnsigndShortで取得すると
0,1,2,3が0,65535,65535,65535で取得されます
(整数型でない)小数型のフレームバッファーと同様に0〜1が0〜65535に内部変換されているっぽいです
シェーダーで出力した整数値をそのままCPU側で取得するにはどうすればいいのでしょうか
982デフォルトの名無しさん:2012/11/26(月) 22:06:33.27
>>981
1/65535を掛けろ
983デフォルトの名無しさん:2012/11/26(月) 22:23:52.18
>>980
この板ではこのスレしか見ないのか?
「馬鹿には無理」には「自己紹介乙」で返すのが挨拶だろ
挨拶の出来ない人間にろくな人間はいないってな
984デフォルトの名無しさん:2012/11/27(火) 08:06:30.06
ログを漁ってみたが、この板はほとんどがロクでなしのようだから、人格者の君はもっとマトモな場へ行ったらどうだろうか。
985デフォルトの名無しさん:2012/11/27(火) 08:12:13.32
>>983
何スクリプトに反応してんのwww と煽られたのがそんなに悔しいのか。
986デフォルトの名無しさん:2012/11/27(火) 10:34:52.02
ぼくには無理
987981:2012/11/27(火) 11:23:19.23
>>982
そうじゃなくてw
ピクセルシェーダーの出力でivec4を指定した時の値の範囲は
整数型のテクスチャーをバインドした時は0〜1ではなく0〜INT_MAXを期待したのに
そうなってないのは仕様書と照らし合わせてどうなのかと
仕様書のどこを呼んでも該当する項目が見つかりません。
これは仕様的にできないのか単に見落としているだけなのか???
988デフォルトの名無しさん:2012/11/27(火) 11:29:38.99
> internalFormat=RGBA16ui

お前が1コンポーネント辺り16ビット指定してるんじゃん。
989デフォルトの名無しさん:2012/11/27(火) 13:10:24.38
EXT_texture_integer
990デフォルトの名無しさん:2012/11/27(火) 17:21:38.73
今参考書(OpenGLでつくるAndroidSDKプログラミング)を元に勉強中なんですが
「OpenGLは視点の位置は原点(0,0,0)に固定されていて、注視点もZ軸マイナス方向に固定されています。」
「そのため視点と注視点を決定するのではなく、描画するオブジェクト全体をマトリクス変換によって移動させたり、
 回転させたりして視野を設定します。」
と書いてあったのですが、初心者ながらこれはおかしいんじゃないか?…と感じました。
これって本当でしょうか?
991デフォルトの名無しさん:2012/11/27(火) 17:35:41.92
本当です
992デフォルトの名無しさん:2012/11/27(火) 17:38:03.42
描画するオブジェクトも原点中心に描画されるので
オブジェクトを描画したあとで原点を移動するんです
993デフォルトの名無しさん:2012/11/27(火) 17:50:49.51
>>990
カメラの位置や方向を決定するAPIは用意してないけど、
数学的にはオブジェクト全体に変換行列適応するのと同じだから問題ない。
カメラの位置や方向をシミュレートする機能が必要なら自分で作れ
というスタンスです。
994デフォルトの名無しさん:2012/11/27(火) 17:54:03.52
>オブジェクトを描画したあとで原点を移動するんです
これは意味不明だ
995デフォルトの名無しさん:2012/11/27(火) 18:35:57.94
なるほど。
ただglRotatef()、glTranslatef()をつかったりするよりは
ググった時に見つけたgluLookAt()を使ったほうが便利そうなんですが
どっちがいいとかありますか?
996デフォルトの名無しさん:2012/11/27(火) 18:45:38.28
どっちもやってることは同じになるので、便利だと思ったらgluLookAt使ったらいい
997デフォルトの名無しさん:2012/11/27(火) 18:59:26.55
意味も分からずにラッパーを挟んで、
自分の意図した位置に描画できない人間をそこら中で見かけるのが何とも。
998デフォルトの名無しさん:2012/11/27(火) 21:56:03.65
>>987
整数の場合は0〜1にマッピングされる
だから、0〜255な8bitのテクスチャもシェーダの中では0〜1の値になる
999デフォルトの名無しさん:2012/11/27(火) 22:46:04.00
次スレはありません
1000デフォルトの名無しさん:2012/11/27(火) 22:47:06.91
  ∧∧ ミ ドスッ
  (  ) _n_
  /  つ 終了|
〜′ /´  ̄|| ̄
 ∪∪   ||_ε3
      ゙゙゙゙

長い間ご声援ありがとうございました。
OpenGLスレはこれにて終了です。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。