OpenGLスレ Part17

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

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

== 必読書 ==
・OpenGLプログラミングガイド 原著第5版 (通称赤本)
・OpenGL(R) Reference Manual (通称青本)
・OpenGL Shading Language (通称だいだい本)
・OpenGL(R) SuperBible: Comprehensive Tutorial and Reference
・OpenGL ES 2.0 プログラミングガイド
・GLUTによるOpenGL入門
・GLUTによるOpenGL入門2 テクスチャマッピング
あると便利。
・ゲームプログラミングのための3Dグラフィックス数学

== チュートリアルサイト ==
床井研究室: 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スレ Part16
http://hibari.2ch.net/test/read.cgi/tech/1309182662/
2デフォルトの名無しさん:2011/11/15(火) 18:45:55.78
3デフォルトの名無しさん:2011/11/15(火) 18:46:32.70
== 追記 ==
OpenGL.org wiki:
 http://www.opengl.org/wiki/Main_Page
OpenSceneGraph: OpenGL を高度に抽象化し、利便性を高めたラッパー。C++ ライブラリ
 http://www.openscenegraph.org/
OpenGL Mathematics (GLM): GLSL 文法ライクの C++ 数学ライブラリ
 http://glm.g-truc.net/

== 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
4デフォルトの名無しさん:2011/11/15(火) 23:24:15.07
>>1
乙なんだからね
5デフォルトの名無しさん:2011/11/16(水) 10:44:28.29
2つ追加した

== チュートリアルサイト ==
床井研究室:        http://marina.sys.wakayama-u.ac.jp/~tokoi/oglarticles.html
NeHe:           http://nehe.gamedev.net/
OpenGL de プログラミング: http://wiki.livedoor.jp/mikk_ni3_92/
OpenGL Step By Step:    http://ogldev.atspace.co.uk/
OpenGL Samples Pack:    http://ogl-samples.g-truc.net/
6デフォルトの名無しさん:2011/11/16(水) 11:09:44.59
必読書は改定したい。

== 必読書 ==

-- 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シリーズ
7デフォルトの名無しさん:2011/11/16(水) 11:10:00.04

-- モダンな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 (青本)
8デフォルトの名無しさん:2011/11/16(水) 13:00:08.50
赤本を遺物にして、openGLと関係ない本を必読はちょっと賛同できない
9デフォルトの名無しさん:2011/11/16(水) 14:38:26.34
赤本なんて2011年にもなって読む本じゃないだろ
訳本はOpenGL 2.1だぞ
古い仕様のOpenGLを学ぶのにもわかりやすい本ではないし。
昔はあれしかなかったからあれを薦めていたが
2011年にもなってあれをすすめるのは老害だけ
10デフォルトの名無しさん:2011/11/16(水) 14:41:57.24
俺が今OpenGLの包括的な学習書として1冊すすめるならOpenGL SuperBibleだな
シェーダーベースのモダンなOpenGLでもっとも詳しく解りやすく書かれている。
日本語で読めるいい本はないね。
特にシェーダーベースの本が絶望的にない。

というわけで床井先生頼んだ!!
11デフォルトの名無しさん:2011/11/16(水) 15:37:26.32
>>9
一理あるとは思うけど、
最新を追うだけが全てじゃないよ
12デフォルトの名無しさん:2011/11/16(水) 15:46:06.86
ちょっと聞きたいんだが、いまどきの現場では
OpenGLで2Dのゲームを作る場合にもシェーダー使っているんだろうか。
13デフォルトの名無しさん:2011/11/16(水) 15:51:47.32
>>11
が、古きを知るために赤本がいいかというと違うと思う。
いずれにせよ赤本は時代遅れ
赤本をすすめる人間は信用できない
14デフォルトの名無しさん:2011/11/16(水) 15:55:49.32
そもそも本なんて要らない
15デフォルトの名無しさん:2011/11/16(水) 17:34:52.91
>>13
4x1対応の赤本が出たら手のひら返すんでしょ?
16デフォルトの名無しさん:2011/11/16(水) 22:20:33.18
>>12
使った方が楽だと思うよ
17デフォルトの名無しさん:2011/11/16(水) 22:39:45.63
OpenGLなんて実際に使われているの?
18デフォルトの名無しさん:2011/11/16(水) 23:30:32.81
使われてるよ
19デフォルトの名無しさん:2011/11/16(水) 23:31:33.30
カーナビとか3Dじゃないけど使ってるねえ
あとCADとか
20デフォルトの名無しさん:2011/11/17(木) 23:07:51.76
glVertexAttribPointer()があればglEnableVertexAttribArray()は不要だと思うのですが、どうして分かれているのでしょう?
21デフォルトの名無しさん:2011/11/18(金) 00:03:18.19
キーボードのpとoが壊れた時も使えるからかな
22デフォルトの名無しさん:2011/11/19(土) 16:30:05.75
へえ
23デフォルトの名無しさん:2011/11/19(土) 18:38:02.15
24デフォルトの名無しさん:2011/11/21(月) 04:44:52.22
C++ と OpenGL, GLUTを利用した3次元の物理現象のプログラムを作成しよう
としているのですが、なかなか上手く出来ません。
http://www.natural-science.or.jp/article/20100818093625.php
作ろうとがんばっているのはまさに↑のようなものです。
出来ればソースコードを全て書き込んでいただければありがたいです。
Microsoft Visual Studio 2008より作成しています。
よろしくおねがいします。
25デフォルトの名無しさん:2011/11/21(月) 09:12:31.22
釣り針大き過ぎて無理
26デフォルトの名無しさん:2011/11/21(月) 10:18:31.14
27デフォルトの名無しさん:2011/11/21(月) 10:35:16.34
>>26
御食事処もあるのか。いい会社だな
28デフォルトの名無しさん:2011/11/21(月) 10:55:26.12
天才よ、ぱぱっと書いてやれ
29デフォルトの名無しさん:2011/11/21(月) 14:26:08.84
>>24
以前から何度も書き込んでる奴か?
ネタとしても面白くないからいい加減失せてね。
30デフォルトの名無しさん:2011/11/21(月) 20:24:08.66
これって物理エンジン使ったら簡単じゃね?
31デフォルトの名無しさん:2011/11/22(火) 00:44:48.87
よく見たら2Dだった
32デフォルトの名無しさん:2011/11/22(火) 16:41:35.45
GLSL触って間もないんですが
glBlendFuncと同じようなこと(フラグメントシェーダで描画先のピクセルの色を取って合成みたいな)
をGLSLで行いたいんですけどこれってできますか?
「描画先のピクセルの色を取って」の部分がどうすればできるのか分からないんですが
33デフォルトの名無しさん:2011/11/22(火) 17:18:16.22
描画先のピクセルを参照することは出来ない。
34デフォルトの名無しさん:2011/11/22(火) 17:54:06.50
んなわきゃない。
描画先のメモリを参照すればいいだけだ。
35デフォルトの名無しさん:2011/11/22(火) 18:10:07.18
残念ながらできない
36デフォルトの名無しさん:2011/11/22(火) 18:19:31.15
君、できないの?
37デフォルトの名無しさん:2011/11/22(火) 18:38:47.74
盛り上がってまいりました!
38デフォルトの名無しさん:2011/11/22(火) 18:54:38.61
できないことの証明は難しいが、できることの証明は簡単なはずだ

まあGLSLで出来るかはわからないが描写先をフレームバッファオブジェクトにしておけば、
そしてテクスチャーバッファーにしておけば、普通にアクセスできるはず

これレンダーバッファーではできないよね?レンダーバッファーは普通のGL関数でアクセスする専用ってことかね
39デフォルトの名無しさん:2011/11/22(火) 21:17:41.33
>>38
ttp://www.opengl.org/wiki/Framebuffer_Object
Feedback Loopsって所を見るとダメかな。Mostly
40デフォルトの名無しさん:2011/11/22(火) 21:42:21.46
普通の?画像処理と同じ要領なのね

やりたいことがわからないけど、まあそれがわかれば解決策も容易にわかるはず
41デフォルトの名無しさん:2011/11/23(水) 01:22:37.66
>>32
例外的だけど、tegraとか、一部のタイル系モバイルGPUではできるみたいよ。

参考 : NV_shader_framebuffer_fetch
42デフォルトの名無しさん:2011/11/23(水) 04:57:29.73
GLEWライセンス見たけど要は修正BSDライセンス?
43デフォルトの名無しさん:2011/11/23(水) 08:50:37.04
結局フラグメントシェーダからレンダーバッファを参照するのは不可能、でFA?
44デフォルトの名無しさん:2011/11/23(水) 11:08:38.69
>>43
現在のほとんどのハードウェアでは出来ない。
>>41のような例外は、レンダーバッファ(の一部)がシェーダから近い位置にレイアウトされているから。
45デフォルトの名無しさん:2011/11/23(水) 11:45:12.47
OpenGLでOIT実装したいとおもってるんですが、DirectXでいうところのAppendBufferってOpenGLだとなにになりすか?

あと、OpenGLのDirectX11相当の機能についてよいリンクなどあったら教えてください。
46デフォルトの名無しさん:2011/11/23(水) 13:06:25.29
32=45? A-Bufferとかで検索すればヒントが得られるんじゃないかな
47デフォルトの名無しさん:2011/11/23(水) 13:53:18.91
>>46
ありがとうございます、32ではありません。
EXT_shader_image_load_storeという拡張が欲しい仕様にみえます、OpenGL拡張の仕様書ページみながら頑張ってみます。

しかしNvidia拡張の魔改造ぶりはすごいですね、NV_shader_buffer_store...
48デフォルトの名無しさん:2011/11/23(水) 14:31:31.68
もうデファクトスタンダードでいいよ
49デフォルトの名無しさん:2011/11/23(水) 15:11:23.55
魔改造と言うか、元々HWベンダですし
と言うか、大昔はハードウェアごとに全部ソフトウェアとか違ってた訳ですし
50デフォルトの名無しさん:2011/11/23(水) 18:02:50.64
それは規格がなかった時代の話で今はOpenGLという規格があるのに自分勝手にはみ出してるって話だろ
51デフォルトの名無しさん:2011/11/23(水) 18:21:51.42
まぁクロノスがグラボ作ってる訳でもないしな。
52デフォルトの名無しさん:2011/11/23(水) 20:03:14.51
あ、魔改造は褒め言葉です。;-/
次のプロファイルではARBのシェーダでもポインタとか使えるようになっているといいな。
53デフォルトの名無しさん:2011/11/24(木) 23:50:04.22
なぜOpenGLは行列を逆ハンドサイドから掛けないといけない仕様にしたんでしょうか?
わざわざ逆順に掛けて行く必要があるしC++のoperatorとも相性悪いしどうしても解せません
54デフォルトの名無しさん:2011/11/25(金) 01:00:53.28
あっちが逆なんだよ
55デフォルトの名無しさん:2011/11/25(金) 01:01:35.18
行列を掛ける方向と右手系左手系は関係ないし
OpenGLはC++のoperatorの定義なんてしてないし
気に入らないなら適当なラッパー書けばいいだけ
56デフォルトの名無しさん:2011/11/25(金) 01:24:53.10
>>55
右手系左手系は関係ないけど転置してるから右から掛けないといけないですよね
C++のoperator、例えば*は左結合なので右から掛けるという規則がすごく気持ち悪いです
確かに数学で出てくるアフィン変換行列と同じ形式ですがプログラミング言語から使うんだから
わざわざ扱いにくい形式を採用しなくても良かったのでは?と疑問に思っています
なんでこんなことに?
57デフォルトの名無しさん:2011/11/25(金) 01:36:12.62
なら転地しないで左から掛ければいいじゃない。
CPUでなにを計算するかなんてOpenGLの知ったこっちゃないよ
58デフォルトの名無しさん:2011/11/25(金) 02:25:19.54
>>53,56
この辺読むと良いと思うよ。
http://steve.hollasch.net/cgindex/math/matrix/column-vec.html

右から掛ける、左から掛けるってのは、計算を数式で記述する仕方の問題だけ。
OpenGLの計算も、ベクトルを行ベクトルと見て行列を左から掛けるのだと解釈する事もできるんだから
そうしたいならそうすればいいんだよ。
5958:2011/11/25(金) 02:30:02.56
あ、ごめん、言葉足らずで変な言い方になった・・・。
「行列を左から掛けるのだと」のくだりは、ベクトルに対して行列を左から掛けるって意味じゃなく、
v'=vMに対してさらにローカルな変換を追加するときに新しい行列Nを v'=vNM とMの左に掛けるって意味でした。
60デフォルトの名無しさん:2011/11/26(土) 07:38:37.40
ということはその場合はglRotate*等は混在できなくて
全てglLoadMatrixd*/glMultMatrix*で自前でするということ?
61デフォルトの名無しさん:2011/11/26(土) 08:23:02.42
なんで突然glRotateが使えなくなんの。
とりあえず自分でコード書いて確かめてみなよ
62デフォルトの名無しさん:2011/11/26(土) 09:05:39.27
>>60
なんかそもそも行列の演算とその使い方が分かってない感じ・・・かな。
もっと具体的に、どういう事をしたい時にどう困ってるのかが分かれば、
解決策も出ると思うんだけど。
とりあえずOpenGL(DirectX)の行列に関する仕様はおおかたの使い方において
妥当なようになっているし、大半の人は(多分)困ってないよ。
63デフォルトの名無しさん:2011/11/26(土) 14:39:58.94
それはともかく
そろそろ OpenGL の行列関数は使わない方がいいような気はする
64デフォルトの名無しさん:2011/11/26(土) 17:32:55.68
使わないっていうか今の4.x系列は使えないだろ
GLSL側でcolumn-majorで定義したのが許せない
せっかく0から定義したのになぜバカな仕様を引きずるのか...

65デフォルトの名無しさん:2011/11/26(土) 18:33:03.16
>>62
glRotate*等が内部で掛けている行列は列ベクトルへ掛ける用なので
自前で右へ右へ掛けていくために行ベクトル用の行列を作って掛けていったものに対して使うと当然結果おかしくなっちゃいますよね?
うわあめんどい・・・
66デフォルトの名無しさん:2011/11/26(土) 18:42:06.05
>>61
自分のソースのglRotateしてる部分を回転行列の転置行列をgMultiMatrixするように置き換えれば使えない理由が分かります確かめてください
67デフォルトの名無しさん:2011/11/26(土) 19:06:54.41
>>66
俺は何も困ってないし、何一つ疑問は無いので確かめないよ?w
68デフォルトの名無しさん:2011/11/26(土) 19:33:56.21
>>66
右手左手座標系の違いはあるけど、

glTranslatef( x, y, 0 );

って書く替わりに

D3DXMATRIX mat;
D3DXMatrixTranslation( &mat, x, y, 0 );
glMultMatrixf(&mat.m[0][0]);

って書いても動くよね。
逆だ転置だって言うけど、どっちもマトリックスのメモリ配置は同じでxが入るのは*(m+12)
自分で書くなら、自分が使いやすいように実装したらいいんじゃね
69デフォルトの名無しさん:2011/11/26(土) 22:18:06.69
>>65
>glRotate*等が内部で掛けている行列は列ベクトルへ掛ける用なので
違います。

>自前で右へ右へ掛けていくために行ベクトル用の行列を作って掛けていったものに対して使うと当然結果おかしくなっちゃいますよね?
おかしいのはあなたの考え方です。

58のURLは読みましたか?
その内容は理解できますか?できませんか?どっち??
70デフォルトの名無しさん:2011/11/26(土) 22:54:45.46
>>69
>>58はoperatorの解釈を変えるだの変換をかませだの書いてありますが
言ってることはそれでOKですか?
列中心か行中心かはデータの話でマトリクスの掛け算の定義は変わらないのは当たり前の話で
その上で自前の行中心の行列をかけてる途中で列中心の行列を掛けてしまうglRotate*をそのまま呼び出すことは出来ないよね?めんど。って話をしてるんですけどちゃんと聞いてますか?
71デフォルトの名無しさん:2011/11/26(土) 23:25:10.25
>>70
自前の行列をそのままglRotatefを呼べるようなデータの配列順にしとけばめんどくないよって話
72デフォルトの名無しさん:2011/11/26(土) 23:28:26.54
うん、マジでゴメン。
理解できてない人に理解できてるかどうか聞いても意味無かった。
しかしこれどう言えば分かってもらえるのか分からん・・・。

>>58はoperatorの解釈を変えるだの変換をかませだの書いてありますが
>言ってることはそれでOKですか?
違います。
というかそんなことはどうでもいいです。
えっと確認なんですが、英語は読めますか?

>列中心か行中心かはデータの話でマトリクスの掛け算の定義は変わらないのは当たり前の話で
「データの話で」の意味が不明。

>その上で自前の行中心の行列をかけてる途中で列中心の行列を掛けてしまうglRotate*をそのまま呼び出すことは出来ないよね?めんど。って話をしてるんですけどちゃんと聞いてますか?
それが誤解なのだと、58に貼ったURLに書いてあるんですが…。
73デフォルトの名無しさん:2011/11/26(土) 23:38:30.10
>>72
何一つ情報増えてないよね
自分で説明できないなら書かなきゃいいのに。
74デフォルトの名無しさん:2011/11/26(土) 23:50:45.58
65 の人の誤解を言葉で正すことは不可能だと思うな。
75デフォルトの名無しさん:2011/11/26(土) 23:53:28.22
自分が理解できないからって情報が無いと考えるのはダメだよ。
58に十分な情報があるのに。

ええとまず、そうだな、最低限のところだけ言うとすると、
glRotate(やその他)は、列優先の行列を掛けるのではないし、列ベクトルに掛けるための行列を作るのでもない。
まずここが分からないと話にならないんだけど・・・
なぜあなたは、OpenGLの行列命令が扱う行列は列優先で、列ベクトルに掛けるものだと思っているのですか?
76デフォルトの名無しさん:2011/11/27(日) 00:39:25.54
数学の話とAPIの話とC言語の話と好みの話がごっちゃになってるんだな
77デフォルトの名無しさん:2011/11/27(日) 00:47:34.43
薄々感じるのは、>>53,56が問題にしたいのは実は行だの列だのって話じゃなくて、
v'=Mvという変換の状態に対してglRotate系を発行すると、生成された行列Rが v'=MRv と掛かるコト
>>53,56は v'=RMv となって欲しいと思っている)なんじゃないかと・・・。
78デフォルトの名無しさん:2011/11/27(日) 01:37:06.74
「自前の行列」ってことはどっかでglLoadMatrixしてんでしょ
じゃあglRotateのあとにglMultiMatrixすりゃいいんじゃねえの?
79デフォルトの名無しさん:2011/11/27(日) 01:41:37.61
面倒なので3x3行列で書きます。
自作予定のMatrixクラスではx軸回転する場合DirectX(行中心行列)のように
|1 0 0|
|0 cos sin|
|0 -sin cos|
を掛けるのに対して、OpenGL(列中心行列)のglRotateは
|1 0 0|
|0 cos -sin|
|0 sin cos|
を掛けやがるから共存できねー って話です。
80デフォルトの名無しさん:2011/11/27(日) 02:12:17.59
>>78
glLoadMatrixする直前に変換行列を転置させるから
glFlush直前ならOKなんですけど、変換途中に使うとなると
行列のLoadとGet時で転置を計2回やる必要があってやっぱり不便だなーと
81デフォルトの名無しさん:2011/11/27(日) 02:18:50.55
x glFlush直前
o 描画関数呼び出し前
82デフォルトの名無しさん:2011/11/27(日) 02:18:58.64
>>79
だからその配列を同じにすれば共存できるでしょって話でしょ

上は
m[0]=1; m[1]= 0; m[2]= 0;
m[3]=0; m[4]= c; m[5]= s;
m[6]=0; m[7]=-s; m[8]= c;

下は
m[0]=1; m[3]= 0; m[6]= 0;
m[1]=0; m[4]= c; m[7]=-s;
m[2]=0; m[5]= s; m[8]= c;

全く一緒
実際DirectXとOpenGLは同じなんだよ。
83デフォルトの名無しさん:2011/11/27(日) 02:29:22.83
>>79
そもそもの話だけど行列そのものには行優先も列優先も無くて
2次元の行列を1次元の配列に格納するのが行優先なのか列優先なのかって話なので、
「行中心行列」「列中心行列」みたいな単語を使ってる点を見るに、根本的な勘違いがあるんじゃないかなぁと。
(ちょっと余計な話すると、独自の用語を使う人は、まず大抵その分野について
初歩的な理解ができてないです。きちんと意味を調べて、正しい用語を使いましょう。)

DirectX(のドキュメント)はベクトルを行ベクトルで書いて、ベクトルの変換は行列を右に掛ける形で表すから
X軸回転の行列は>>79の上の行列の形になるけど、DirectXのドキュメントを列ベクトルで書いて
ベクトルの変換は行列をベクトルの左に掛ける形で書き直すと、DirectXのX軸回転の行列も
>>79の下の行列の形になりますよ。>>82も言ってるけど、両者は同じものなんですよ。
84デフォルトの名無しさん:2011/11/27(日) 02:56:14.58
>>82-83
何の話題で盛り上がってるのかようやく理解できたw
85デフォルトの名無しさん:2011/11/27(日) 02:57:29.17
うーん、もうちょっと補足した方がいいだろうか。
>>82>>83で「同じ」と言ってるのは、何が「同じ」なのかというと、行列演算の「仕様」。

で、「仕様」と、その「数学的記述」は区別しないといけない。
OpenGL(の主なドキュメント)では仕様を、列ベクトルと左から掛ける行列で記述してるし、
DirectX(の主なドキュメント)では仕様を、行ベクトルと右から掛ける行列で記述してる。
同じ仕様を違う方法で記述してるだけだから、記述自体は相互に変換可能。
OpenGLもDirectXも仕様が同じなんだから、行列演算部分に関しては、同じプログラムがそのまま使える。
ってコトなんですよ。
86デフォルトの名無しさん:2011/11/27(日) 03:12:20.63
>>83
行ベクトルに対するアフィン変換行列を行中心行列
列ベクトルに対するアフィン変換行列を列中心行列
というんだと思っていました。
一般的にはどう呼ばれているんでしょう
58のrow major、 column major?

左から掛ければ一緒というのはわかります
ただ右から掛けたい(*1)というのが独自で行列計算する動機なので左から掛ければ一緒はNGなんです

*1
左から掛ける場合Matrixクラスに対してoperator*=を定義できないため
87デフォルトの名無しさん:2011/11/27(日) 03:23:28.28
>>86の補足です
operator*=を定義できない、ではなく「効率的に定義できない」です

・row majorの場合
Matrix m; // ワールド座標系への変換行列
Matrix x1, x2; // 回転行列等

m *= x1;
m *= x2;

・column majorの場合
Matrix m; // ワールド座標系への変換行列
Matrix x1, x2; // 回転行列等
// M*=x1 は 意味的にM=M*x1なので使えない

m = x1 * m; // operator=が余計に発生
m = x2 * m; // operator=が余計に発生
88デフォルトの名無しさん:2011/11/27(日) 03:27:09.26
もしくはむりやり
Matrix t = x1;
t *= m;
Matrix t2 = x2;
t2 *= t;
m = t2;
89デフォルトの名無しさん:2011/11/27(日) 03:36:38.97
>>87
>>79の上のつもりで作った配列は右から掛けてok
できた配列は左版の転置になってると思うだろうけど、
それはそのまま直接OpenGLでもDirectXでも使えるメモリ配置になっている
実際にやってみたらわかると思うよ

>>87-88の言わんとしてることはわかるけど、最近のコンパイラの最適化的にどうなんだろね
グラフィック系のオーバーヘッドはそこには全く現れないと思うけど。でも気持ちはわかる
90デフォルトの名無しさん:2011/11/27(日) 04:04:55.62
>>89
ああ、確かに反対の反対で同じになりますね。
安心して寝れます。
91デフォルトの名無しさん:2011/11/27(日) 07:36:36.42
> ・column majorの場合
> Matrix m; // ワールド座標系への変換行列
> Matrix x1, x2; // 回転行列等
> // M*=x1 は 意味的にM=M*x1なので使えない

これが嘘だな。operator*=を定義すれば使える
92デフォルトの名無しさん:2011/11/27(日) 08:25:29.34
DirectXもOpenGLも結局は同じ
同じ3Dを扱う物だからな
ただ、DirectXはC++の配列の並びがそのまま使えるように左手座標系になってる
OpenGLの場合はあらゆるプラットフォーム、言語で使うために右手座標系になっている
ただ単にそれだけの事だ
93デフォルトの名無しさん:2011/11/27(日) 09:27:29.43
右手座標だとそういう壁が超えられて左手だと超えられないの?
94デフォルトの名無しさん:2011/11/27(日) 09:56:25.12
>>91
あなたのコードをメンテする人がかわいそうなのでプログラミングしないでください
95デフォルトの名無しさん:2011/11/27(日) 11:40:12.59
>>92
右手系左手系と配列の並びは関係ないよ。
96デフォルトの名無しさん:2011/11/27(日) 12:11:24.06
>>95
あるよ
97デフォルトの名無しさん:2011/11/27(日) 12:47:10.53
ないよ
98デフォルトの名無しさん:2011/11/27(日) 13:02:36.59
単にSGI-GLが右手座標系だったので、DirectXは左手にしてみましたみたいことじゃないの
99デフォルトの名無しさん:2011/11/27(日) 14:07:37.62
>>98
ちゃう
OGL=数理重視
D3D=感覚・実用重視にしたら左手座標系になった
100デフォルトの名無しさん:2011/11/27(日) 15:07:49.26
右手はマウス握ってるから、左手系にしといたほうが実用的だよなw
101デフォルトの名無しさん:2011/11/27(日) 15:46:52.27
>>100
おまえ天才じゃね?
102デフォルトの名無しさん:2011/11/27(日) 16:02:27.53
>>99
ちがう

なんでもいいからOpenGL と変えたかっただけ。
共通規格が成立するのを邪魔するのが、マイクロソフトの仕事だから。
103デフォルトの名無しさん:2011/11/27(日) 16:10:13.82
DirectXが左手系を採用した理由を、設計者に本音で聞いてみたいよねw

しかし左手系が実用性重視だのCの配列と相性がいいだの言ってる人は、
一体何を根拠にしてるんだろ? ワケ分からん。
104デフォルトの名無しさん:2011/11/27(日) 16:21:09.24
OpenGL右手座標系のはずなのに左手でCoordinate作ってしまう
x:中指,y:人差し指,z:親指
105デフォルトの名無しさん:2011/11/27(日) 16:36:09.96
でも XNA で用意されている関数は右手系なんだよな

何がしたいのか分からん
106デフォルトの名無しさん:2011/11/27(日) 16:55:40.42
MS のこれまでの所業を見て >>102 以外の理由があるかというと
107デフォルトの名無しさん:2011/11/27(日) 18:51:36.50
3DCGに関わって15年になるけどどっちでもいい
108デフォルトの名無しさん:2011/11/27(日) 18:54:03.23
7. OpenGL does not force left- or right-handedness on any of its coordinates
109デフォルトの名無しさん:2011/11/27(日) 19:01:14.11
あほか
DirectXはとにかく速度重視したからC++の配列に合わせて左手座標にしたのだ
転置する必要をなくすためにな
110デフォルトの名無しさん:2011/11/27(日) 19:05:43.44
右手座標だって転置する必要ないじゃん
111デフォルトの名無しさん:2011/11/27(日) 19:09:14.52
してないように見えて実はハードウェア内部でしてる
112デフォルトの名無しさん:2011/11/27(日) 19:13:56.24
>>111

してないよ
>>68見ればわかるけど、D3DXMATRIXとOpenGLのマトリックスは全く同じ配列なんだよ
113デフォルトの名無しさん:2011/11/27(日) 19:18:29.09
>>109
右手系と左手系の話と転置は関係ないから

http://msdn.microsoft.com/ja-jp/library/bb204853%28v=vs.85%29.aspx
>ビュー行列に使用している D3DMATRIX 構造体の _31、_32、_33、および _34 メンバーの符号を反転させます。

変換するには符号を反転させるだけなので
114デフォルトの名無しさん:2011/11/27(日) 19:21:46.88
そりゃ一回Translationしただけなら転置の必要はないわな。
115デフォルトの名無しさん:2011/11/27(日) 19:24:18.76
>>112
DirectXの場合はScaleしてからRotateしてTranslateするけど
OpenGLで、その順番でやってみなよ君
116デフォルトの名無しさん:2011/11/27(日) 19:53:38.92
>>113
大いにあるぞ

そのページの最後
>>これらの操作を組み合わせると、結果は可換的ではなくなり、行列を乗算する順序が重要となります。

http://msdn.microsoft.com/ja-jp/library/bb206269(v=vs.85).aspx
>>作成した行列の種類にかかわらず、期待どおりのエフェクトを実現するには、左から右へのルールが適用されることを忘れないでください。
117デフォルトの名無しさん:2011/11/27(日) 19:58:23.06
基本的なことを聞くけど

・座標系の左右と、行列の積の結合の左右
・座標系の左右と、行ベクトルか列ベクトルか
・座標系の左右と、乗算すべき行列が概念的なスタックに積まれる順番

これらは本質的に無関係だよな
118デフォルトの名無しさん:2011/11/27(日) 20:06:52.73
そもそもDirect3Dが左手だってのはどこから来てるの?
算術関数も両方用意されてるじゃん
119デフォルトの名無しさん:2011/11/27(日) 20:15:09.91
>>115
自分で行列逆に掛け算してSetTransformしてんじゃないの
MultiplyTransformで掛けこんでいったらDirectXもTrans Rotate Scaleの順だったが
120デフォルトの名無しさん:2011/11/27(日) 20:20:55.20
昔は左手座標しか無かったんだよ
DirectX5時代の話だけど
121デフォルトの名無しさん:2011/11/27(日) 20:26:04.68
>>119
ちゃんとLH使ってんのか?
122デフォルトの名無しさん:2011/11/27(日) 20:45:35.44
なんかglLoadMatrixに渡す行列のレイアウトがD3DXと同じなのに
glRotate/Translate/Scaleの変換の適用順がD3DXの乗算と逆なあたりが混乱の元凶な気がするんだが
123デフォルトの名無しさん:2011/11/27(日) 20:54:28.93
>>122
それこそが右手座標と左手座標の最大の違いなのだよ
行列データそのものは同じでも意図する合成行列を作るには
乗算順序を変えなければならない

http://www.c3.club.kyutech.ac.jp/gamewiki/index.php?3D%BA%C2%C9%B8%CA%D1%B4%B9
ここ見るとわかるかもしれない
124デフォルトの名無しさん:2011/11/27(日) 21:02:58.86
>今までの行列演算でおかしいと思った方がいたらすばらしいです。
>実はDirectXでは通常の数学とは行列の演算順序を逆にしてるんですよね。
>数学では座標 * 行列の演算順序であるのに、DirectXでは行列 * 座標の
>演算順序で表しています。

>迷惑な話ですが、このようなことで配列を効率よく使うことができ、
>メモリ効率が上がるらしいです。
>ただ、これだと行列の演算順序が変わると結果が変わってしまいます。
>そこで、DirectXでは行列を転置させて結果を変えないようにしています。
>ややっこしい。
125デフォルトの名無しさん:2011/11/27(日) 21:03:00.58
>>123

> matWorld = matScale * matRot * matTrans;

v' = v * S * R * T
なんだから

デバイスのポインタ->SetTransform(D3DTS_WORLD,&matWorld);
をMultiplyTransformで書き換えれば、
デバイスのポインタ->SetTransform(D3DTS_WORLD,&matTrans);
デバイスのポインタ->SetTransform(D3DTS_WORLD,&matRot);
デバイスのポインタ->SetTransform(D3DTS_WORLD,&matScale);
になる。OpenGLと一緒。
126デフォルトの名無しさん:2011/11/27(日) 21:05:26.53
>>125
下の3行はMultiplyTransformの間違い。
あと掛ける前にD3DXMatrixIdentityで作ったので初期化(glLoadIdentity同等)する必要もある
127デフォルトの名無しさん:2011/11/27(日) 21:05:55.72
128デフォルトの名無しさん:2011/11/27(日) 21:08:24.04
列優先だか行優先だか右手回転系だか左手回転系だか
どれをなんて呼ぶのかよく覚えてねえけどさ

z軸の符号が異なるだけの右手左手系は全然関係ねえでしょ? 
D3DXのLHとRHの結果の相違は転置してるだけ? 違うでしょ?
129デフォルトの名無しさん:2011/11/27(日) 21:21:40.54
おまえ、SetTransformは行列スタックじゃねぇか
D3DXMatrixMultiplyでやってみろ
130デフォルトの名無しさん:2011/11/27(日) 21:27:17.48
D3DXMatrixTranslation
D3DXMatrixRotation
D3DXMatrixScaling
でやってみたの?
131デフォルトの名無しさん:2011/11/27(日) 21:37:58.12
>>125
お前どうしようもないな
v' = S * R * T * v

S,R,T,vの順にかける
132デフォルトの名無しさん:2011/11/27(日) 22:07:26.37
>>117
@座標系の左右と、行列の積の結合の左右
座標系の左右と行列の積の結合の左右は関係ない

A座標系の左右と、行ベクトルか列ベクトルか
少なくとも数学では右手座標と列ベクトルを用いることが定まっている
そしてOpenGLはそれを採用
DirectXでは左手座標と行ベクトルを採用していた(当初)
理由として
2Dの場合画面左上が原点になる
C++配列と相性が良い

B座標系の左右と、乗算すべき行列が概念的なスタックに積まれる順番
座標系の左右と、乗算すべき行列が概念的なスタックに積まれる順番は関係ない
133デフォルトの名無しさん:2011/11/27(日) 22:15:21.94
>>131
DirectXでは(紙の上ではOpenGLとは逆に) v' = v * M;
つか今回の話の発端はここでしょ
134デフォルトの名無しさん:2011/11/27(日) 22:36:05.24
ちみがいいたいのは平行移動行列と回転行列、拡大縮小行列は同じって事だろ
そう、同じだよ
でもDirectXとOpenGLが同じかと問われたら、それは全然違うと答えるよ
135デフォルトの名無しさん:2011/11/27(日) 22:41:53.93
C++配列と相性が良いってどういうことよ
まさかメモリ効率云々を曲解してるんじゃないよな
136デフォルトの名無しさん:2011/11/27(日) 22:43:00.64
>>133
線形代数やり直して来い
137デフォルトの名無しさん:2011/11/27(日) 22:48:08.63
>>136
線形代数がどうだろうと、実装はMSがしてんだからしょうがないだろ
http://msdn.microsoft.com/ja-jp/library/bb206269%28v=vs.85%29.aspx
v' = v * M
138デフォルトの名無しさん:2011/11/27(日) 22:56:42.21
Direct3DとOpenGLの座標系における明確な違いなんて

o 非同次射影空間のz値のクリッピング範囲が[-1,+1]と[0,+1]
o 補助関数(D3DX、glu)を比較するとむしろOpenGLが右手座標系しか選択肢が無いと言うべき

くらいで後はどうでもいい。
というか後者もどうでもいいか。
139デフォルトの名無しさん:2011/11/27(日) 22:58:41.62
あとテクスチャのピクセルが0.5ずれてるんだっけ
140デフォルトの名無しさん:2011/11/27(日) 23:00:08.09
列優先設定でのDirect3D持ち出したらお前が言い出した>>125のOpenGLとDirect3Dが一緒って主張がトリビアルでアホ丸出しだったってことになるんだが
141デフォルトの名無しさん:2011/11/27(日) 23:14:03.72
阿呆は今のことろ行列の合成順に右手左手言いだしたヤツだけだょ
142デフォルトの名無しさん:2011/11/27(日) 23:19:23.56
>>135
転置行列を作成しなくてもよい=無駄なメモリ使わないしスピードも速い
物凄く効率的じゃないですか?
143デフォルトの名無しさん:2011/11/27(日) 23:21:58.43
>>142
右手座標系(OpenGL)でプログラムする場合に、
どこで、何の理由で転置行列を作る必要があるのでしょうか
144デフォルトの名無しさん:2011/11/27(日) 23:23:01.60
>>142
何か勘違いしてるようだけど
145デフォルトの名無しさん:2011/11/27(日) 23:29:09.11
>>139
D3D10からはずれていないと思った。
146デフォルトの名無しさん:2011/11/27(日) 23:36:26.58
なんでズレてんの?
147デフォルトの名無しさん:2011/11/27(日) 23:38:06.08
つーか今のDirect3Dでは、D3D9で生にシェーダ定数渡す時も
D3D10以降の定数バッファに渡す時もD3DXの行列は転置する必要があるんだけどねw

D3DXの行列レイアウトの何が効率的なの昔からよくわからんのだが
焼き直しのXNA Mathでも同じだしSIMD有利なのけ?
148デフォルトの名無しさん:2011/11/27(日) 23:45:03.20
なんだったかな
とにかく速度優先にしたらDirectXの実装になったんだよ
ゲームSDKとしてOpenGLより速く表示する必要があったから
決してOpenGLの逆にしたいとか下らない理由では無かったと思う
149デフォルトの名無しさん:2011/11/27(日) 23:46:04.00
>>145
10で変わったのか、知らなかった。そういう仕様を変えちゃうってもすごいな。
150デフォルトの名無しさん:2011/11/27(日) 23:57:14.57
>>148
説得力が無い

行列同士の積も、行列とベクトルの積も、
右手座標系と左手座標系で計算量は変わらんと思うが

列同士の積の場合にCPUの積和演算器を活用するなら、
右手でも左手でもどちらかの行列を転置しないといけないし
151デフォルトの名無しさん:2011/11/27(日) 23:58:16.62
>>150
すまん、紛らわしいミスをした

> 列同士の積の場合にCPUの積和演算器を活用するなら、

行列同士の積の場合にCPUの積和演算器を活用するなら、
152デフォルトの名無しさん:2011/11/28(月) 00:13:23.85
>>150
説得力が無いと言いたいだけか
気になるならよく事情わからない名無しよりMSに問い合わせればいい
153デフォルトの名無しさん:2011/11/28(月) 01:35:46.83
http://marupeke296.com/DXG_No15_AttentionCoordinate.html

@ どうして左手系なのか?

>そもそも、左手系と右手系の2つある中でDirectXが左手系を選んだのは
>なぜなのでしょうか?私たちは小さい時から右方向がX軸、上方向がY軸の
>2Dのグラフを見てきました。
>そしてごく普通にアニメや漫画のキャラクタは上方向であるY軸に頭を向けて立ちます。
>さてこの状態で3Dになった時、キャラクタの目線は画面の奥に向かうのが自然でしょう。
>そうすれば、キャラクタの目線方向とプレーヤーの目線方向も合います。
>「前へ進め!」とボタンを押したとき、画面の奥に向かっていくのが自然なのです。
>Z軸が画面の奥へ進む座標系は『左手系』です。
>この自然な成り行きでDirectXなどの3Dゲームは左手系座標を採用しています。


http://www.arakin.dyndns.org/gl_coord.php

>しかし、私がよく使用しているペイントソフトのPictBearやGIMP、そして、あの有名な
>Photoshopも左上が原点です。
>私自身が慣れているのは左上原点であり、これまでアップしたきたサンプルも
>左上原点なのですが、やはり、OpenGLのプログラムをする時は、左下を原点にした方が
>分かりやすいため、左下で統一することにしました。ということで、多くのサンプルを
>一部変更しました。


直感的で自然でわかりやすいからというのが理由だろうな
本当の所はわからんが
154デフォルトの名無しさん:2011/11/28(月) 01:47:09.77
自然だの直感的だのは人によって違うからねぇ。

ところで、左手系の方が効率が良いとかまことしやかな噂を聞く割には、
具体的にどの部分でどう効率が良くなるのかっていう説明は目にしないよね。
不思議だよねw
155デフォルトの名無しさん:2011/11/28(月) 01:55:37.98
NDAを結ばないと見れない資料だったんじゃないの。
だとしたら不思議じゃないけど。
156デフォルトの名無しさん:2011/11/28(月) 02:06:59.57
ギャグかそれ
157デフォルトの名無しさん:2011/11/28(月) 20:40:54.65
setPlaymodeからsetPlayModeに勝手に変えんなよ糞osgが
158デフォルトの名無しさん:2011/11/28(月) 21:41:31.81
OSGすげー汚くない?
適当にドキュメント読んだだけだけどあれ使う気にならんわ
159デフォルトの名無しさん:2011/11/28(月) 23:33:36.48
OSsanGeyか
160デフォルトの名無しさん:2011/11/29(火) 20:08:17.28
osgはシーングラフ完全特化というのと微妙にゆるい命名規約がいいな
glutよりは好きかも
161デフォルトの名無しさん:2011/11/30(水) 00:11:51.92
glutとosgを比べるのはちょっと無理があるだろ
162デフォルトの名無しさん:2011/11/30(水) 01:58:42.93
私もosgのおかげで偏頭痛が軽減しました
163デフォルトの名無しさん:2011/12/01(木) 20:34:41.74
左手座標が速いってのは上手くやれば視体積0.0〜1.0の範囲に収まるって事かな?
その場合、マイナスの演算が無くなるから速くなるかもね
164デフォルトの名無しさん:2011/12/01(木) 20:59:44.34
何言ってんのこの人
165デフォルトの名無しさん:2011/12/01(木) 21:23:24.34
ネタに突っ込んでやるなよ
166デフォルトの名無しさん:2011/12/01(木) 21:24:16.91
流石にこれは本当に 何いってんの?だと思った
煽る訳じゃないが、普通に思った
167デフォルトの名無しさん:2011/12/01(木) 21:36:39.41
>>163
大変興味深い

もう少し具体的な数値を出して、
マイナスの演算が無くなって速くなる事を例示してみてはどうだろう

ネタとか言ってる愚民どもを黙らせることができるかも知れん
168デフォルトの名無しさん:2011/12/01(木) 21:41:19.54
自演なのかな。
それとも病人が二人いるのかな。
169デフォルトの名無しさん:2011/12/01(木) 21:46:32.16
三人だ。ようこそ。
170デフォルトの名無しさん:2011/12/01(木) 21:51:11.86
いや >>167 はどう見てもひねくれた突っ込み
171デフォルトの名無しさん:2011/12/02(金) 18:21:41.12
アセンブラだと乗算は9clock、除算は46clockだっけ。
加算と減算はどうなんだ?
172デフォルトの名無しさん:2011/12/02(金) 18:55:49.24
addとsubは同じ
ただsignedとunsignedの乗算はまず、どちらかにそろえる必要があるから
signedが増えると若干プロセスが増えるのは確か
173デフォルトの名無しさん:2011/12/02(金) 19:09:48.55
浮動小数点の話じゃないの?
174デフォルトの名無しさん:2011/12/02(金) 19:13:12.62
>>138の言ってる事だろ
Direct3Dのビューボリュームが0〜1の範囲になってるのはそういう事だったのか
175デフォルトの名無しさん:2011/12/02(金) 19:34:48.97
http://www.daionet.gr.jp/~masa/column/2000-07-20.html

行列式で見てもDirectXの方が速いな。
176デフォルトの名無しさん:2011/12/02(金) 19:40:31.58
分かってるだろうが敢えて言う

行列式じゃなくて行列の式な
意味全然違うから
177デフォルトの名無しさん:2011/12/02(金) 20:02:25.03
>>175
contentヘッダがplain/text返すhtmlファイルってどうよ?
178デフォルトの名無しさん:2011/12/02(金) 22:08:28.97
これで左手座標系の方が速くなる理由がわかったな。
それ以外にもDirectXはZバッファリングを適当にごまかして処理を端折ってるからな。
179デフォルトの名無しさん:2011/12/02(金) 22:39:02.21
そうですか
180デフォルトの名無しさん:2011/12/02(金) 23:05:41.03
左手座標系関係無いじゃんw
181デフォルトの名無しさん:2011/12/02(金) 23:12:54.04
てか、そんな速度差も100:1ほどあるなら話は別だが、
そうでないなら、自分の書く処理に集中するべき

私の書いたプログラムの、本当に注力するべき部分、
速度に関しても本当にボトルネックになっている部分、
それが本当に問題になっているなら、そこを洗って正すべき
182デフォルトの名無しさん:2011/12/02(金) 23:52:30.60
>>181
言ってることは至極もっともだが、論点がずれてる
183デフォルトの名無しさん:2011/12/03(土) 00:56:27.37
175の式見てDirectXの方が速いとか言ってる人達は、
1フレームに何万回と射影行列を作るんですかね。
184デフォルトの名無しさん:2011/12/03(土) 01:05:57.56
行列1つについて話してるのになんで出てきちゃったの?
185デフォルトの名無しさん:2011/12/03(土) 01:27:22.90
行列一つの話をしてどうすんのさ。
元々は、DirectXは速度優先のために左手系を採用したとかいう話だったわけでしょ。
それともDirectXは行列一つを速く計算するために左手系を採用したの?
186デフォルトの名無しさん:2011/12/03(土) 01:59:58.68
175は行列の話なのに他の話と混ざっちゃったの?
187デフォルトの名無しさん:2011/12/03(土) 02:21:00.84
つまり175は、DirectXが左手系を採用した理由とは関係無いし、
左手系の方が速いっていう都市伝説とも関係の無い、
射影行列を作るならDirectXの方がちょっとだけ速いよっていうだけの話、って事?
だったらここで出す事に何の意味が・・・まぁいいか。
188デフォルトの名無しさん:2011/12/03(土) 02:54:30.80
誰かベンチマーク
189デフォルトの名無しさん:2011/12/03(土) 10:31:57.68
あの、左手系とか言ってる人はどの概念にその呼称を割り当ててるの?
z軸が反転してること? 
メモリ配置の違いによる行列の合成順のこと?
190デフォルトの名無しさん:2011/12/03(土) 12:52:55.68
メモリ配置とか言ってる人は数学ベースで考えられない人?
191デフォルトの名無しさん:2011/12/03(土) 13:05:51.83
>>190
数学ベースなら右手も左手も全く同じ計算量なんだから、
あとはメモリ配置とかCPU命令、GPUの仕組みやドライバなどで考えるしかないような・・・
192デフォルトの名無しさん:2011/12/03(土) 13:06:46.36
>>190
お前もう黙れよ低脳。 数学的に考えたら速度差の話に答えが出せるっての?
193デフォルトの名無しさん:2011/12/03(土) 13:51:14.07
>>192
メモリ配置って言ってるのが恥ずかしくなった?
194デフォルトの名無しさん:2011/12/03(土) 13:54:23.43
>>53以降、馬鹿が目立つな。
195デフォルトの名無しさん:2011/12/03(土) 14:08:57.53
190みたいな、具体的な話は何もできないくせにさも何かを知ってる風にしたがる厨二はどこにでもいるわけで・・・
相手にしたところで、空っぽなところからは何も引き出せないんだから、熱くならないことをお勧め致しますよ。 >>192

196デフォルトの名無しさん:2011/12/03(土) 14:22:51.37
>>193
なんで >>191 には反論しないの?
197デフォルトの名無しさん:2011/12/03(土) 14:58:24.48
>>193
何言ってんの?低脳は黙ってろよ
198デフォルトの名無しさん:2011/12/03(土) 18:01:02.61
射影行列って言っても、1秒60フレームなら60回分は速くなるわけな。
メモリ効率が良いってのはなんなんだ?
GPUに転送する時に何かあるのか?
199デフォルトの名無しさん:2011/12/03(土) 18:17:44.85
メモリ上で連続に配置されてるほうがキャッシュに乗りやすいから早い
200デフォルトの名無しさん:2011/12/03(土) 18:37:02.66
ほうほう。左手座標は連続してて右手座標は連続してないのか。
201デフォルトの名無しさん:2011/12/03(土) 18:52:53.65
>>199
それは確かにそうだが、
行列1つを行優先で配置しようが列優先で配置しようが、
普通のライブラリならどちらも連続的に配置する(ことを要求してくる)
採用している座標系の右手左手に関係なく

そして、行列同士の演算や行列とベクトルの演算において、
ある行や列は計算に不要ということはなく、全ての要素が計算対象となる

だから、行優先でも列優先でも、ましてjpgみたいに斜めに配置しようと、
連続的に配置されているのなら、1回の演算におけるキャッシュ効率は全く同じ

ちなみに、行列1つにつき32ビット浮動小数点16個分で、たった64バイト

ライン長64バイトのキャッシュメモリの場合、
行列の要素をメモリ上にどのように並べようが連続してさえいれば、
1行1列目にアクセスした時点で全要素キャッシュにロードされる
202デフォルトの名無しさん:2011/12/03(土) 19:51:25.43
しかも64バイトの配列の並びは行優先と列優先の転置では同じでしょ
DirectXのx行目y列目とOpenGLのy行目x列目は共にm[ x * 4 + y ]
203デフォルトの名無しさん:2011/12/03(土) 22:07:36.25
メモリ配置厨涙目w
204デフォルトの名無しさん:2011/12/03(土) 22:18:59.02
なんか痛々しいのが多いな
205デフォルトの名無しさん:2011/12/03(土) 22:21:48.17
それ誰に対して言ってるの?
206デフォルトの名無しさん:2011/12/03(土) 23:21:20.71
散々関係ないって言ってるのに
いまだに右手だの左手だのほざいてるアホにでしょう
207デフォルトの名無しさん:2011/12/04(日) 04:05:23.61
ポリゴンの一面単位でなく、頂点単位でglRotate〜などの変換を適用させる方法がわかりません
頂点データを毎回変更させてから描画するしかないのでしょうか?
208デフォルトの名無しさん:2011/12/04(日) 04:23:58.39
>>207
それは例えば 「鋭く尖ったウニみたい五芒星を、まるっこい五角形に」 みたいな話?
頂点更新して再適用( glMapBuffer〜頂点更新〜glUnmapBuffer )するか、
または頂点シェーダで
209デフォルトの名無しさん:2011/12/04(日) 04:37:03.43
>>208
そのような描画をしたいんですが、どうやら毎回更新するしかなさそうですね
ありがとうございました
210デフォルトの名無しさん:2011/12/04(日) 12:06:31.69
>>209
ちなみに一つだけ老婆心で書いておくと、上の話を踏まえた場合、
>頂点単位でglRotate〜などの変換を
頂点の移動は glScale/glRotate/glTranslate でなく、自分で数学的に計算すること
何故って自分で持ってるデータを書き換えて、再送信だから
211デフォルトの名無しさん:2011/12/05(月) 20:47:51.51
みんなツールキットは何を使ってるん?
212デフォルトの名無しさん:2011/12/05(月) 22:41:26.19
普通wgl
213デフォルトの名無しさん:2011/12/05(月) 22:46:46.19
Linuxでも使えたっけ wgl
214デフォルトの名無しさん:2011/12/06(火) 00:17:56.36
まともな環境なら大抵はね
215デフォルトの名無しさん:2011/12/06(火) 01:23:57.38
SDL
androidに移植できるらしいが情報が全然なくて途方に暮れてる
216デフォルトの名無しさん:2011/12/06(火) 01:38:36.17
SDLはライセンスに注意
217デフォルトの名無しさん:2011/12/06(火) 03:29:32.31
GPL混ざってる?
218デフォルトの名無しさん:2011/12/06(火) 11:05:49.93
>>211
好きなの選べ
http://www.opengl.org/resources/libraries/windowtoolkits/

さすがにSDLは時代遅れだろう
GLFWとかの方がいい
219デフォルトの名無しさん:2011/12/06(火) 12:34:32.43
SDLとGLFWとでは抽象レベルが全然違うような気がする
220デフォルトの名無しさん:2011/12/06(火) 12:45:26.92
SDL使うぐらいならSFMLを使ったほうがいい
221デフォルトの名無しさん:2011/12/06(火) 21:39:43.13
GLEWで音楽再生とかどうやるの?
222デフォルトの名無しさん:2011/12/06(火) 22:23:01.91
恥ずかしながらSFMLって初めて聞いた
面白そうだけど日本語情報が少ないから大変そうだ……
223デフォルトの名無しさん:2011/12/06(火) 22:30:46.33
>>221
GLFW 自体には音楽再生用の仕組みは用意されていないから、
別のライブラリやAPIを使う

play 関数を呼べば stop 関数を呼ぶまで再生し続ける関数があるなら、
それを適当なタイミングで呼べばいい

再生用バッファにwavデータを少しずつ放り込むタイプなら、
毎フレームにおいてバッファの様子を調べて適当にデータを放り込め
224デフォルトの名無しさん:2011/12/06(火) 22:39:54.84
>>218
横からだけど、glutしか使ってなかった
glfwまじで使いやすかったわ・・・ガチでありがとう
225224 :2011/12/06(火) 22:40:46.98
テンプレに入れて欲しいくらいだ
226デフォルトの名無しさん:2011/12/06(火) 23:23:03.87
フレームワークだけは自作じゃないと落ち着かない
227デフォルトの名無しさん:2011/12/06(火) 23:43:21.70
>>224
glutと比べてどこらへんが使いやすい感じなの?
228デフォルトの名無しさん:2011/12/07(水) 07:26:32.42
>>227
・ちゃんとメインループから帰ってくる
・tgaのテクスチャなら作るのラクチン
・glutくらいシンプル
229デフォルトの名無しさん:2011/12/07(水) 16:18:16.17
GLUTによる「手抜き」OpenGL入門を見てアニメーションを作っているのですがこのやり方で一定の動きをした後同じオブジェクトに違う動きをさせるアニメーションを作るにはどうすればいいでしょうか?
230デフォルトの名無しさん:2011/12/07(水) 17:24:24.21
どこのopenglのバージョンの境かしらないが
0サイズのテクスチャーをFBOにアタッチしてOKだったりエラーだったりするのな
焦らせやがって全くw
231デフォルトの名無しさん:2011/12/07(水) 19:04:32.62
>>229
それは GLUT や OpenGL とは何の関係もない

「一定の条件を満たしたかどうか」を判定する方法と、
判定した結果に応じて「状態を遷移させる」方法があればできる

if (一定の動きをしたか?) then 違う動き else 同じ動き

とか

void anim1 () { 同じ動き }
void anim2 () { 違う動き }
--------
a = anim1 // 初期化

if (一定の動きをしたか?) then a = anim2

とか、方法はいろいろある
232デフォルトの名無しさん:2011/12/07(水) 19:43:08.10
いつも省略してたからthenっていう書き方が斬新に見えた
本来は if then elseなんだな
233デフォルトの名無しさん:2011/12/07(水) 19:45:51.25
>>232
スマン

>>231 は擬似コードのつもりだ
234デフォルトの名無しさん:2011/12/08(木) 23:59:15.80
ES 2.0でglEnable/glDisableのGL_MULTISAMPLEがなくなってますが、
途中でマルチサンプルのON/OFFを切り替えるのって
もうできなくなってしまったんでしょうか?
235デフォルトの名無しさん:2011/12/09(金) 21:31:02.67
スレチだけど状態遷移書いてるとyieldとか手軽につかえたらなーと思うなぁ
236デフォルトの名無しさん:2011/12/10(土) 00:43:40.49
long jumpでええやん
237デフォルトの名無しさん:2011/12/10(土) 03:28:12.94
libpclマジオススメ
238デフォルトの名無しさん:2011/12/10(土) 16:16:42.39
>>231
ありがとうございます。また質問させてください。
239デフォルトの名無しさん:2011/12/10(土) 20:23:17.92
>>236-237
うーんなるほど・・・
240デフォルトの名無しさん:2011/12/10(土) 21:11:47.73
これまでの流れで自分の理解度が不安になったんで質問します。
質問1)
OpenGL の行列が C=CM なので
原点から10離れた位置でZ軸で45度回転する場合の行列を求めるには
紙の上では
C:カレント行列 R:Z軸で45度回転 T:X軸に10移動 I:単位行列
C=I
C=C * R ローカル座標のZ軸で45度回転
C=C * T ローカル座標のZ軸で45度回転したX軸で10移動
C=((IR)T)=(I(RT))

コーディングでは
C=I
C=C * T or C *= T ローカル座標のX軸で10移動
C=C * R or C *= R X軸で10移動したローカル座標のZ軸で45度回転
C=((IT)R)=(I(TR)) or C= I * T * R
つまり、紙の上では C=IRT コーディングは C=ITR
で、正しいですか?
241デフォルトの名無しさん:2011/12/10(土) 21:12:29.51
質問2)
OpenGL の行列が C=CM なので
原点から10離れた位置でZ軸で45度回転する場合の行列を求めるには
C:カレント行列 R:Z軸で45度回転 T:X軸に10移動 I:単位行列
紙の上では
C=I
C=T * C 絶対座標系のX軸で10移動
C=R * C 絶対座標系のZ軸で45度回転
C =((RT)I)=(R(TI))

コーディングでは
C=I
C=C * T or C *= T 絶対座標系のX軸で10移動
C=C * R or C *= R X軸で10移動した絶対座標系のZ軸で45度回転
C=((IT)R)=(I(TR)) or C= I * T * R
つまり、紙の上では C=RTI コーディングは C=ITR
で、正しいですか?
紙の上ではC=MC をコーディングではC=CM で計算しているので
行列の計算順は質問1)と同じですが、行列TやRの算出方法は
今回はたまたま同じ行列TやRが使えるだけで 質問1)と異なりますよね?
242デフォルトの名無しさん:2011/12/11(日) 09:54:37.99
>つまり、紙の上では C=IRT コーディングは C=ITR
>で、正しいですか?

正しいわけないだろ
243デフォルトの名無しさん:2011/12/11(日) 12:28:27.29
>>240-241
紙の上ってどういう意味?

>>242
何が悪いか言わずに正しいわけないだけ言うのって内容を理解してない人間がよくやる
244デフォルトの名無しさん:2011/12/11(日) 12:40:56.23
今からまた行ベクトルだ列だ転置だ左手だってはじめるのかw
245デフォルトの名無しさん:2011/12/11(日) 12:49:30.33
はあフレームバッファの始点を左上にしたい
246デフォルトの名無しさん:2011/12/11(日) 14:16:09.57
また阿呆が暴れてるのか。消えろよ 240
247デフォルトの名無しさん:2011/12/11(日) 14:47:23.17
紙の上ってのが良くわからんが C=IRT コーディングは C=TRI じゃねぇの?
右から計算するなら
248デフォルトの名無しさん:2011/12/11(日) 14:58:12.26
一部のandroid機種だとGL_INFO_LOG_LENGTHの値って常に0が返ってくるのね…

おのれー!
249デフォルトの名無しさん:2011/12/11(日) 16:29:34.26
紙の上=学校で習った数学での習慣を使った手計算の時の順序では、
ってことじゃないの?

ここは勉強出来ない、数学出来ない、ライブラリのリファレンス読んでわかったつもりの
ニートとクズの吹き溜まりだから、真面目な質問しても答え返ってこないよ
>>242-247 みたいなレスしか返せない。 さらにバカだと >>246 みたいな頭のおかしいレスになるし。

ちなみに俺は、数学弱いのでよくわからないw
250デフォルトの名無しさん:2011/12/11(日) 16:49:04.80
>>249はなんで書き込んだんだ?
251デフォルトの名無しさん:2011/12/11(日) 17:17:43.47
>>240
紙のRやTもOpenGLでは転置になるから同じR T ではない点に注意
(R * T)の転置 = Tの転置 * Rの転置
という関係があるので逆になるように見える。
縦書きと横書きの違いでしかない
つかずっと同じ話してるので、自分で実際にプログラム作って確認してみたらいいよ
252デフォルトの名無しさん:2011/12/11(日) 18:17:41.79
>>251
OpenGLでは転置になるとかウソ書くからまた混乱する初心者が増えるんだよ・・・。
OpenGLの主な(?)ドキュメントは列ベクトル表記を採用しているというだけの話だろ。
253デフォルトの名無しさん:2011/12/11(日) 18:33:20.71
>>252
その通りです。すいません。
254デフォルトの名無しさん:2011/12/11(日) 19:32:11.05
>>247は合ってると思うけどw
学校で習った数学での習慣を使った手計算の時の順序が
OpenGLでは逆になるという事だ
255デフォルトの名無しさん:2011/12/11(日) 19:48:22.38
紙の上とは
>>249氏のとうりです。
>紙の上=学校で習った数学での習慣を使った手計算の時の順序では、

>>247
確かにです。

>>254
皆さん、有難うございます。
256デフォルトの名無しさん:2011/12/11(日) 20:05:03.67
数学こそ列ベクトルが基本じゃないか

写像 f1, f2, f3 (対応する変換行列は M1, M2, M3)を考えたときに
列ベクトル [x; y] に f1, f2, f3 を順番に適用すると、

[x'; y'] = f3(f2(f1([x; y])))
    = M3 M2 M1 [x; y]

同様のことを行ベクトルで書くと、

[x' y'] = [x y] t(M1) t(M2) t(M3)   t(・)は転置

というだけの話だろ
というか、変換行列であることを無視して単なる行列演算の話をしても無意味
257デフォルトの名無しさん:2011/12/11(日) 20:14:05.98
数学、OpenGL=列ベクトル
C/C++の配列=行ベクトル
だから逆順に掛けるんだよ
258デフォルトの名無しさん:2011/12/11(日) 22:50:04.22
>>257
ハァ??????
259デフォルトの名無しさん:2011/12/12(月) 00:19:00.50
ここは自分の中の知識を相手に伝えることの出来ない人間と相手の言っていることを理解しようともしない人間の巣窟ですね
260デフォルトの名無しさん:2011/12/12(月) 00:21:37.57
さすがに>>257は、わざわざ頓珍漢な事を書いて場を荒らそうとしてるとしか思えないレベル。
261デフォルトの名無しさん:2011/12/12(月) 17:02:57.84
glutで作った二つのウィンドウに,
glDrawArraysを用いて全く同じ物を描画しようとすると,
エラーでプログラムが落ちてしまいます.
ウィンドウが一つの時は問題なく描画できています.
頂点の数は2^24個程なのですが,何か制限があるのでしょうか?
頂点の数を減らしても駄目でした.
262デフォルトの名無しさん:2011/12/12(月) 17:53:24.12
>>261
昔のことなんで間違ってるかもしれないが
テクスチャとか頂点配列ってウィンドウごとに固有じゃなかったっけ
263デフォルトの名無しさん:2011/12/12(月) 22:12:10.54
2つのスレッドが同じ所を参照しようとして… とか
いや適当だが
264デフォルトの名無しさん:2011/12/12(月) 22:52:59.22
クリティカルセクション
265デフォルトの名無しさん:2011/12/12(月) 23:00:25.39
wglShareLists
266デフォルトの名無しさん:2011/12/13(火) 00:38:39.68
glutでウィンドウ2つ作れることに驚いた
267261:2011/12/14(水) 10:56:15.94
返信ありがとうございました.
検討したところ,>>262の方の言う通りでした.
VBOを二つ用意しても,予め二つ確保した場合では描画されず,
もう一つのウィンドウを作成したあとにもう一つのVBOを確保してやる必要がありました.
皆様,御助言ありがとうございました.
268デフォルトの名無しさん:2011/12/14(水) 14:49:13.76
>>267
それを共有するようにするのが>>265のwglShareListsだったり
glut使ってるとすんなりは無理かもしれないけど
269デフォルトの名無しさん:2011/12/14(水) 17:02:23.81
三次元中にGL_QUADSにglcolorで色をつけて描画したいのですが
線のみ色が変わります。塗りつぶすにはどうすればいいでしょうか?
270デフォルトの名無しさん:2011/12/14(水) 17:15:35.56
glPolygonMode 辺りを
271デフォルトの名無しさん:2011/12/14(水) 17:47:43.58
C#でOpenGLを使うのも悪くないと思えてきてしまった。
少なくとも、MFCで四苦八苦するのはもうイヤだし。
OpenGL Menu http://t.co/4BrpJVuT
272デフォルトの名無しさん:2011/12/14(水) 18:24:05.83
>>270
それを使って塗りつぶせました。
ありがとうございます。
273デフォルトの名無しさん:2011/12/14(水) 20:50:01.98
短縮URLやめようぜ
274デフォルトの名無しさん:2011/12/14(水) 21:19:57.20
なんで?
275デフォルトの名無しさん:2011/12/14(水) 21:50:46.83
>>271
MFC使わなきゃいいだけじゃね
stl と boost と自分の過去資産(win32ハンドリング含む)があればまったく不要

と言う俺は最近 Python+OpenGLが楽しい。直書きそのまま実行でGLSLのテスト出来るってのが、
スクラッチ&ビルドで実験コード書いてる時、超絶楽ちんぽん
276デフォルトの名無しさん:2011/12/15(木) 03:07:36.75
>>274
文字数にシビアな制限があるわけでもないし、
短縮だとどこへのリンクかURLから予測できないからクリックしずらい
277デフォルトの名無しさん:2011/12/15(木) 09:16:56.06
t.coだからtwitterのつぶやきをコピペしたんだろ。
278デフォルトの名無しさん:2011/12/16(金) 18:14:51.33

OpenGLって、ジオメトリインスタンシングを自動でやるのですか。

ディスプレイリストだったら、APIの仕様としてまとめて送るというのは知ってますが
ジオメトリまでやってるとは聞いた事がありません。
279デフォルトの名無しさん:2011/12/16(金) 18:29:18.90
glDrawElementsInstanced
280デフォルトの名無しさん:2011/12/16(金) 19:30:39.69
インスタンシングを勉強すると、1体しか出なくても
それで出してしまう

関数ポインタを習った後、何でもかんでも関数ポインタ使って実装したのと同じ
281デフォルトの名無しさん:2011/12/16(金) 19:51:58.10
インスタンシングが必要ない程度には早いって大昔に聞いたけど専用の拡張もできてたんだな
282デフォルトの名無しさん:2011/12/16(金) 20:02:18.47
やっぱ効果あるよ
30フレームすら維持できないくらいに頂点を増した状態でインスタンシングすると
60フレームにビターッと張り付く

283デフォルトの名無しさん:2011/12/18(日) 09:37:33.50
自分はカメラは3次元空間に配置するオブジェクトだからモデルビューに置くものだと思ってるけど
みんなはプロジェクションビューとモデルビューどっちに置く?
284デフォルトの名無しさん:2011/12/18(日) 10:15:36.87
お前は一体何を逝ってるんだw
285デフォルトの名無しさん:2011/12/18(日) 12:02:02.53
>>283
曖昧にしか理解していないか、
またはもの凄く話しを省略して話している?

自分が言った内容の詳細を説明してみろ
286デフォルトの名無しさん:2011/12/18(日) 14:07:21.36
ジオメトリだけ考えるならカメラ操作を投影行列の方でやってもいいんだろうけど、
それだとライティングやクリッピングその他、色々うまく動かなくなるよね。
287デフォルトの名無しさん:2011/12/18(日) 14:17:20.92
283=286だな
お前の理解はまったくダメダメなので
あと3回OpenGLの教科書を読み直せ
288デフォルトの名無しさん:2011/12/18(日) 18:05:43.34
>>286
まさかとは思うが、モデルビューとプロジェクションビューって言う、
プログラム的にまったく作りの異なる別の何かが存在してるとか思ってる?
あと、まさかカメラって言う、プログラム的に独立した、
何か曖昧なオブジェクトが存在してると思ってる?
289286:2011/12/18(日) 18:28:08.72
いや283じゃありませんが。
お二人とも、想像力豊かなコトでw
290デフォルトの名無しさん:2011/12/18(日) 18:59:56.56
つかプロジェクションビューってなに
291デフォルトの名無しさん:2011/12/18(日) 20:02:32.63



「ここは茶臼山でしょうか?」



関西人「ちゃうス」
292デフォルトの名無しさん:2011/12/18(日) 20:20:45.45
今どきのOpenGLで
自前で行列管理してる話とかじゃないのかしら
293デフォルトの名無しさん:2011/12/18(日) 22:51:23.18
こうするか
glMatrixMode(GL_PROJECTION);
gluLookAt(up_.x, up_.y, up_.x, eye_.x, eye_.y, eye_.z, center_.x, center_.y, center_.z);

こうするかって話じゃねーの?
glMatrixMode(GL_MODELVIEW);
gluLookAt(up_.x, up_.y, up_.x, eye_.x, eye_.y, eye_.z, center_.x, center_.y, center_.z);
294デフォルトの名無しさん:2011/12/18(日) 22:52:00.44
いや違うか
295デフォルトの名無しさん:2011/12/19(月) 08:43:44.81
いやそうでしょ
多分
296デフォルトの名無しさん:2011/12/19(月) 11:40:52.17
・glx:    XからOpenGLを使うためのライブラリ。普通は直接は使わず意識する事はない
・glut:   クロスプラットフォームなツールキット。でもさすがに古くさい
・glew:   これを入れないと拡張機能が使えないor使いにくい
・glxgears: 歯車が回るベンチマーク。-infoでOpenGLのバージョンが見られる。OpenGLの動作確認はこれで
・glxinfo:  自分の使っているカードのOpenGLの機能が全てリストアップされる。
・OpenTK  C#からOpenGLを簡単に使えるようになる。VC#の強力なIntellisenseとあわせてサクサク開発可能。


OpenGLちゅんは、なんでこんなに分家しとるん?

いちいちめんどくさいだろ。
1つで全部できるようなもんないのか
297デフォルトの名無しさん:2011/12/19(月) 11:50:10.15
いや違うカテゴリーのものを一緒にされてもw
298デフォルトの名無しさん:2011/12/19(月) 11:56:34.57
>>296
一人や一箇所が全部作ってる訳じゃないから。 分家してるとか、そういう事じゃないんだよ。LinuxやUnixのOSとかもそうだけど。
コンピュータの世界にあるライブラリや製品の多くがそうなように、それぞれバラバラに、
誰かがいつか思いついて開発して、そして増えて広がっただけ。 またはプロダクトの設計上、疎結の関係にして切り離したりしてるだけ

俺らが、他人の生み出した物を使わせてもらう分際で、それすらめんどくさいと思うのなら、
むしろ自分で一つにまとめたライブラリでも作って自分で使うか、または世界に発表して、標準化しておくれ。
誰にでもそうやって、高名を得るチャンスは平等にあるんだから
299デフォルトの名無しさん:2011/12/19(月) 12:04:05.26
>>296 阿呆か。
300デフォルトの名無しさん:2011/12/19(月) 12:16:28.84
分家というならESの方よね
301デフォルトの名無しさん:2011/12/19(月) 13:23:01.03
>>296
わらったw
302デフォルトの名無しさん:2011/12/19(月) 15:19:18.34
今は glm なんかもあるしなあ。
303デフォルトの名無しさん:2011/12/19(月) 18:32:49.87
これってnvidiaドライバのバグ?
glGetActiveUniformARBでシェーダ側の変数名を得ると
シェーダ側の変数が"uniform mat4 JointTransform[62];"の時
amd "JointTransform"
nvidia "JointTransform[0]"
と返ってくる
304デフォルトの名無しさん:2011/12/19(月) 20:35:01.94
>>296
>1つで全部できるようなもんないのか

いいとこに気がついたね
誰もそういうのを作ってないんだよ お前が作ればいいじゃん
305デフォルトの名無しさん:2011/12/20(火) 08:14:09.99
>>303
バグかどうか知らんけどうちでもそうなる。
もう随分前からずっとそうなので、そういうもんだと思ってやってる。
306デフォルトの名無しさん:2011/12/20(火) 10:50:30.42
>>304
だな。
そしてglなんとかがまた一つ増えるw
307デフォルトの名無しさん:2011/12/21(水) 05:31:10.57
魔方陣GLGL
308デフォルトの名無しさん:2011/12/21(水) 12:54:40.15
でも何で「glなんとか」なのか___

接頭詞としてglつけろ”という決まりでもあるのか。

glグレネードランチャーとかいうの作ったら、略称がglglになるじゃねえか。
309デフォルトの名無しさん:2011/12/21(水) 13:41:33.49
ARB48
310デフォルトの名無しさん:2011/12/21(水) 23:23:43.19
メンバーが抜けたり消えたりする
311デフォルトの名無しさん:2011/12/21(水) 23:52:38.10
えっ、それ減る一方
312デフォルトの名無しさん:2011/12/22(木) 01:45:12.94
SDLだってSFMLだってあるんですよ!
つかSFMLすげえな。SDLだったらSDL_imageやSDL_mixerが必要なところをこれひとつで全部賄えるなんて
313デフォルトの名無しさん:2011/12/22(木) 09:41:14.44
GLSLのfragment shaderでmain関数の中のfor文の打ち切り条件式に
uniform変数を使うと挙動がおかしくなるんですけど
uniform int n;
for(int i = 0 ; i < n ; i++){...
こんなの
これなんなんでしょうね
main関数以外でも同じようなことやってるんですがそっちは別段なんともないんですよね
314デフォルトの名無しさん:2011/12/22(木) 09:57:30.13
floatでシェーダーに渡して中でintにキャストしたら安定した
なんだこれ・・・
315デフォルトの名無しさん:2011/12/22(木) 10:37:55.73
Uniform変数にintって使えたっけ?
標準では無理だった気がする。まだベンダー拡張じゃなかったか
316デフォルトの名無しさん:2011/12/22(木) 11:16:54.55
あ、一応glew使ってます
あとGLSLは#version 120
317デフォルトの名無しさん:2011/12/22(木) 18:47:56.90
1.2じゃ駄目だった気が
318デフォルトの名無しさん:2011/12/24(土) 03:01:22.09
glGetUniformLocation
glUniform
319デフォルトの名無しさん:2011/12/25(日) 02:25:27.39
シェーダで使うライトの数はコンパイル時に決定するから外部変数にはできないのかー
なんか回避方法ないかねこれ
320デフォルトの名無しさん:2011/12/25(日) 09:35:52.68
floatで渡せよ。何いってんだ
321デフォルトの名無しさん:2011/12/25(日) 11:30:17.68
普通(?)のGLSLのライトの数はfloatで渡せばいいんだけど、
WebGLのGLSLはループ回数(の上限)がコンパイル時に決まらないといけないから
for (int i=0; i<8; ++i) {
 if (i >= num_lights) continue;
 ...
}
みたいな書き方になったりする。
322デフォルトの名無しさん:2011/12/25(日) 12:06:40.62
>>321
WebGL って OpenGL を JavaScript から使うバインダか何かじゃなかったか。
Python から OpenGL を使う PyOpenGL みたいな、要は
ほにゃららから OpenGL を使う 何とか、みたいなそういう立場の物。

なので、先に WebGL の話だけど、って前提置いてから話さないと、
君が一人で思ってる事なんて、誰にも伝わらないよ
323デフォルトの名無しさん:2011/12/25(日) 12:19:42.96
使う上限を予め決めといてライティング結果をライト毎に加算すればいい
使わないライトは0になる値を入れておけば問題ない
324デフォルトの名無しさん:2011/12/25(日) 12:22:04.66
素人考えだけど、テクスチャマップのファイルに
データとしてライトの情報を入れて、シェーダー側で参照ってできんの?
325デフォルトの名無しさん:2011/12/25(日) 12:29:37.33
ライトマップか投影テクスチャのどっちの意味かわからんけどできるよ
326321:2011/12/25(日) 12:29:58.56
>>322
何を勘違いしてるのか知らないけど。
俺は319じゃないし、単にこういうこともあるって書いただけだよ。

>>324
できる。
327デフォルトの名無しさん:2011/12/25(日) 12:33:44.10
>>324
浮動小数点フォーマットのテクスチャファイルに、長い行列の要素放り込んで
シェーダ側でそれを参照、とかは珍しくない話。だが、

>データとしてライトの情報を入れて

これがどこまでを想定してるのが曖昧なので、YesともNoとも言いにくい

自分が使いたい情報で、かつUniform変数で渡してられないほどの分量があった時、
かつ浮動小数点フォーマットのテクスチャが使える環境なら、そういう手段を取る事もあるでしょう、って話
328デフォルトの名無しさん:2011/12/25(日) 12:36:30.60
>>326
じゃあそれを最初に言えよ。>>319-321 の流れみたら、普通に本人だと思うだろうが。
なんでお前も前提置いて話せないの?
お前が一人で思ってる事なんて、誰にも伝わらな… あれ?デジャブ?
329デフォルトの名無しさん:2011/12/25(日) 12:47:04.90
>>328
恥ずかしかったのは分かるがそう開き直られてもな。
お前みたいなアホの事まで考慮して書き込む気は無い。
330デフォルトの名無しさん:2011/12/25(日) 12:47:16.38
>>321
どうでもいいけどそこはbreakじゃだめなん?用途しだいか?でもcontinueである場合ってないよな?
331デフォルトの名無しさん:2011/12/25(日) 12:50:47.04
>>330
なんだったけかな…よく覚えてないけど、breakだとうまく動かなかったような。
332デフォルトの名無しさん:2011/12/25(日) 12:57:26.07
>>329
いやアホはどう見てもお前。狭い了見の自己中。
それに気づいていないで開き直ってるお前が、まさにアホ

333デフォルトの名無しさん:2011/12/25(日) 13:01:15.59
アホと言うより、10代くらいのガキだと思う
334デフォルトの名無しさん:2011/12/25(日) 13:03:43.79
>>321
ちょっとそんな抜け道がと思ってやってみたがなんでか駄目だった
break continueどっちも試したが反応なしというか
335デフォルトの名無しさん:2011/12/25(日) 13:20:41.56
>>332
横から口挟むけど>>319は環境については触れていないのに>>321で突然WebGLに話が具体化
この流れはどう見ても本人が情報後出ししたケースの流れ
国語の勉強の話しになるけど本来は「WebGLのこと言ってるなら」とか書くべき
ちょっと脳内スキップ発揮しすぎかと
オフでも多分周りの人間はあなたの話しについて行けてないと思う
336デフォルトの名無しさん:2011/12/25(日) 13:23:30.95
予想だが、GLSLが使うライトの数を評価するのは
uniform変数は0
for文のイテレーター変数は増えない
0番目のライトのみデフォルトで取得
この条件下で行われるのかもしれない
337デフォルトの名無しさん:2011/12/25(日) 13:24:51.04
>>335
安価先、>>321 >>326 >>329 宛てだなそれ

338デフォルトの名無しさん:2011/12/25(日) 13:25:52.34
>>336
あーいや、2番目おかしいな

もうわかんねえなこれ
339デフォルトの名無しさん:2011/12/25(日) 13:44:16.46
>>325,326,327
ありがと
340デフォルトの名無しさん:2011/12/25(日) 14:07:50.08
>>334
じゃあ
for (int i=0; i<8; ++i) {
 if (i < num_lights) {
  ...
 }
}
みたいな感じではどう?

それでダメならプログラム間違ってるんじゃないかとw
「反応なし」の意味がちょっと分からないけど。
341デフォルトの名無しさん:2011/12/25(日) 14:15:34.88
>>319は回避方法ない?って聞いてて
>>321は回避方法を書いてる
という状況で、>>321>>319本人だと誤認するロジックが分からん。
国語の勉強の問題なの?
342デフォルトの名無しさん:2011/12/25(日) 15:39:15.12
>>341

>>321>>319 の回避方法じゃなくて、追加情報と解釈してしまったのだと思う
つまり、>>321 の方法しかないのか? もっといい方法無いの? と質問しているように取ったと

たぶん、これがロジックだと思う

国語の勉強の問題なのかどうかは分からないし、このスレとは何の関係もない
余計な煽りをしないで、双方さっさと誤解を解いて話を続けた方が良い
343デフォルトの名無しさん:2011/12/25(日) 15:43:06.37
>>341
ついでに言うと、>>321 の前に >>320 があることも誤解を生んだ原因かと

>>319 の質問に対して >>320 が答え、そうなんだけどさと>>321>>319)が追加質問
のように見えてしまったんだろ
344デフォルトの名無しさん:2011/12/25(日) 16:01:47.10
>>326>>321が別人という可能性もある

つか結局WebGLの話なのか?
345デフォルトの名無しさん:2011/12/25(日) 16:43:27.97
お前ら面白いなぁ
346デフォルトの名無しさん:2011/12/25(日) 17:12:26.45
>>340
それで効きました
ただ・・・なんか動作が全部チェックしているときの重さと変わらない感じ
for(int i = 0 ; i < gl_MaxLights ; ++i){...

プログラムはコメントアウトしたりして比較しているので間違っては無いと思いたい

反応なしは、1個目0番のライトだけアクティブで他のライトが反応しない状態

なんかもうライトの変数なんて高が知れてるから全部uniform化させてしまおうと思えてきた
347デフォルトの名無しさん:2011/12/25(日) 17:21:40.56
>>342-343
まったくその通り
348デフォルトの名無しさん:2011/12/25(日) 17:32:06.25
>>346
だから「ライトが反応しない」じゃ意味分からないってばw
built-in変数に値が設定できてないとか?
349デフォルトの名無しさん:2011/12/25(日) 17:41:38.20
>>348
そういうことです
350デフォルトの名無しさん:2011/12/25(日) 18:35:38.68
常々思ってるけどID出ない板って色々不便ね。
351デフォルトの名無しさん:2011/12/25(日) 19:01:12.87
IDあってもID変えただけの同一人物だろwとか言い出す馬鹿もいるけど
352デフォルトの名無しさん:2011/12/25(日) 19:49:07.95




floatに頼子だ割ったプログラムソースを目指す人のためのブランド「float志向」




353デフォルトの名無しさん:2011/12/25(日) 20:23:30.41
フロシコ
354デフォルトの名無しさん:2011/12/25(日) 20:27:13.65
誤字が何もかも台無しにしている
355デフォルトの名無しさん:2011/12/26(月) 03:17:34.79
シェーダーの最適化は、GLSLが吐くオペコード数を減らす事とほぼ同義

つまり、固定数ループのfor文で、ループ中で条件かけても
条件が変数でコンパイラが事前に分からないなら
吐き出されるオペコードは、個定数ループを処理する長さと同じ

例え条件で、ジャンプして処理を多少飛ばした所で
シェーダーのオペコード数は同じなんだから大して軽くならない

マジで最適化かけるなら
#if や #ifdef 等でコードをライト数分用意して
動的に切り替わる仕組みを入れないと駄目なんじゃないかな?
356355:2011/12/26(月) 03:29:13.26
昔々のシェーダーモデルのバージョンが低い頃は
if文は重たいなんて言われてたでしょ、そんなイメージ

因みに、うちの会社のライブラリは、シェーダー内に
#if や #ifdef なんかが可読性を殺す程入ってて
バカにしてたけど、シェーダー最適化の説明を聞いて納得した

例を挙げると、シェーダー初期化前にライト数を決めると
そのライト数を処理するシェーダーコードになる仕組み、見たいな
(実行中に変えると、シェーダーの再初期化が入るので非推奨って感じ)
357355:2011/12/26(月) 03:39:33.79
要はシェーダー構文だけで、
ライト数に応じて可変の最軽量負荷のコードを吐くのは無理かと思われる

一番簡単なのは、一番バカっぽいけど
ライト数文のシェーダーファイル(コード?)を用意して
ライト数に応じて、各シェーダーを適応すれば良い

シェーダーやシステムをスッキリさせるか、最適化シェーダーを目指すかは
仕組みを理解して、自分でバランスを決めて実装するしかないと思うよ

確か、GLSLコンパイラでシェーダーアセンブラを吐く機能があったから
まずはそれから試してみなよ
358デフォルトの名無しさん:2011/12/26(月) 04:35:52.19
うおぉ

ためになる話ありがとうございます
シェーダアセンブラは初めて聞きました、敷居高そうですが心に留めておきます
359デフォルトの名無しさん:2011/12/26(月) 17:07:26.71
敷居が高いというか、HLやGL+しゅっしゅっぽっぽぅができるまでは

みんなそれでやっていた。
360デフォルトの名無しさん:2011/12/26(月) 17:07:59.22
そこはCgというべきだったか
HLSLはCgの無断モロパクリだからな
361デフォルトの名無しさん:2011/12/26(月) 20:28:19.01
なんかi286以前の頃に戻った気分だ
クロック数とか気にしちゃう系
362デフォルトの名無しさん:2011/12/27(火) 01:12:18.27
みんなPTXとかILとか読んでないの?
363デフォルトの名無しさん:2011/12/27(火) 18:17:59.29
>>350
この板が扱う話題の性質上、IDが出ると
必死チェッカーで照らしあわせれば
どこの企業(大学)に属してて何をやってるのかとか、おぼろげながら分かってしまうからな
364デフォルトの名無しさん:2011/12/27(火) 18:22:37.44
はぁ?
365デフォルトの名無しさん:2011/12/27(火) 19:14:22.55
触らないで、その人は病気なの
366デフォルトの名無しさん:2011/12/29(木) 23:14:58.13
誰か扱いやすいライト管理クラスください
367デフォルトの名無しさん:2011/12/29(木) 23:28:26.28
どういう事ができると「扱いやすい」と思えるの?
368デフォルトの名無しさん:2011/12/29(木) 23:33:56.77
(○○) ライト、ついてますか
369デフォルトの名無しさん:2011/12/29(木) 23:42:03.72
こないだ無灯火でチャリこいでたらおまわりに注意された
370デフォルトの名無しさん:2011/12/30(金) 05:08:09.06
glColor3fで色指定してるのに白になるのですが何処が悪いですか?
ライト使ったらGL_QUADSの方もマテリアル設定しないといけないとか?
http://ideone.com/q6Ego
371デフォルトの名無しさん:2011/12/30(金) 09:14:32.68
試す前に人に訊くバカ
372デフォルトの名無しさん:2011/12/30(金) 10:53:42.16
glMaterialしろよ...
あと頂点ライティングだからピクセル単位でグラデーションは出ないのを忘れるな
373デフォルトの名無しさん:2011/12/30(金) 11:33:21.25
>>371
馬鹿じゃないもん><
374デフォルトの名無しさん:2011/12/30(金) 13:11:28.82
阿呆だもん!
375デフォルトの名無しさん:2011/12/31(土) 04:20:20.59
かわいい
376デフォルトの名無しさん:2012/01/04(水) 00:09:50.53
3D空間上にサイズ不定の画像を表示させたいんですが、どうすれば効率よく出来ますか?
今は各ピクセルの色取り出してglVertex3dで描画みたいな効率の悪いことやってる
377デフォルトの名無しさん:2012/01/04(水) 00:12:22.21
テクスチャー使えよって話?
378デフォルトの名無しさん:2012/01/04(水) 00:36:39.41
VisualBasic で GetPixel や SetPixel やってるようなモンか
379デフォルトの名無しさん:2012/01/04(水) 00:41:22.60
>>377
テクスチャって2のn乗じゃないと駄目なんだよね?
800*600とか色々なサイズに対応したいからそこで困ってる
380デフォルトの名無しさん:2012/01/04(水) 00:44:05.04
いや、それかなり古いバージョンのOpenGLだよ
どっからか走らないが最近のはどんなサイズにも対応してるはず
381デフォルトの名無しさん:2012/01/04(水) 00:50:12.44
たとえ2のn乗じゃないと駄目でも、
800*600なら1024*1024のテクスチャ使えばいいじゃん
382デフォルトの名無しさん:2012/01/04(水) 00:54:28.16
ありがとう、初めてテクスチャ使ってみるわ
383デフォルトの名無しさん:2012/01/04(水) 00:55:39.85
今時はiPhoneですら都合の良いサイズのテクスチャ使えるよ。
きっと2のn乗の方が効率は良いんだろうけど、他のやり方するよりはずっとましだと思う。
384デフォルトの名無しさん:2012/01/04(水) 01:39:23.43
ポリ側を800*600の部分で切ったらええやん
385デフォルトの名無しさん:2012/01/04(水) 12:45:07.50
制限聞いただけで思考停止するのがよくないな
386デフォルトの名無しさん:2012/01/04(水) 13:49:48.65
俺は元画像を縦横拡大して2^nサイズにあわせてテクスチャ化しといて元の縦横比でポリ描画してるけど
メモリの無駄感は否めない
387デフォルトの名無しさん:2012/01/04(水) 13:56:06.40
gluBuild2DMipmapsってみんな使わないの?
388デフォルトの名無しさん:2012/01/04(水) 15:39:21.85
gluLookAtの引数のeyeとupをcenterを向いたままcenter中心でupに対して水平、垂直それぞれの方向に
θ度回転させた結果のeyeとupのベクトルを得たいんだけどどんな行列かければいい?
389デフォルトの名無しさん:2012/01/04(水) 15:46:17.79
>>388
脳が拒否する文面なのでまず正確な文章がかければいい
390デフォルトの名無しさん:2012/01/04(水) 15:58:39.65
gluLookAtの引数であるeye, up, centerについて
eye, upを変化させて対象物(centerの座標)を中心に回転させたいです。
イメージとしてはcenterとeye間をヒモで繋いでぐるぐる回す感じです。

回転させる向きは以下の通り

1.upベクトル方向
2.upベクトルと(center-eye)ベクトルの外積方向

1.、2.についてθ度回転させたeye, upを得るためにはeye, upにどんな行列、
を掛ければいいでしょうか。
391デフォルトの名無しさん:2012/01/04(水) 16:11:41.18
openGL的にはeyeをcenter分引いてオブジェクト座標系?に持ってきて回転行列か
でもこれは回転方向と軸方向を一致させないと駄目っぽいか

数学できるならhttp://www.cg.info.hiroshima-cu.ac.jp/~miyazaki/knowledge/tech07.html
このへん見ながら直接eye upを操作させるとか

なんか俺がOpenGL使えてない気がしてきた
392デフォルトの名無しさん:2012/01/04(水) 16:12:43.36
簡単に言うと、

カメラの方向ベクトルを軸にして、θ度回転させたい
= とある任意の軸を中心にθ度回転させたい、って話だろ?

って、くるとクォータニオンの得意分野
393デフォルトの名無しさん:2012/01/04(水) 16:19:22.38
反応が早くて助かります。ありがとうございます。

>>392
クォータニオン・・・がんばります

>>391
このサイトいいですね参考にさせていただきます
394デフォルトの名無しさん:2012/01/05(木) 06:23:42.38
OpenGLの左手座標系を、右手座標系に変換したいときって、
glScalef(1.0f, 1.0f, -1.0f) もしくは、
glScalef(-1.0f, 1.0f, 1.0f) で出来ますよね?間違っていたら指摘お願いします。

で、今Javaで、OpenGL使っているので、JOGLを使っています。
JOGLのバージョンは、Jogamp v2.0 rc5なのですけど、z軸を-1.0倍すると何も映らなくなって、x軸を-1.0倍した結果と違ってしまいます。
これってバグでしょうか?私の勘違いでしょうか?コレだけの情報ではわからないでしょうか?
ttp://ideone.com/A1dtB
97、98行目です。
395デフォルトの名無しさん:2012/01/05(木) 07:10:25.05
DEPTH_TESTをenableにしてZをひっくり返してるからじゃないのかな
396デフォルトの名無しさん:2012/01/05(木) 11:08:29.92
もしくはカメラも反転してるとか
397デフォルトの名無しさん:2012/01/05(木) 17:58:00.95
Xを-1して左手系を右手系なんて聞いたことないな

Zを-1するのだって、行列等の諸々の結果に対して有効であって
途中の計算とかあるなら、Zを-1した所でおかしくなるだけ

詳細を伝えない&自分が理解してないでZに-1スケールしてるだけなら、
聞いた所でちゃんとした挙動にならない&理解出来ないんじゃない?

行列と3D処理を理解して、ちゃんと行列処理を右手系にかえるしかないと思うが?
398デフォルトの名無しさん:2012/01/05(木) 18:51:55.10
Zを-1倍したら奥にあるものがカメラの後ろにくるんだぞ?
カメラの方向変えないとな。
399デフォルトの名無しさん:2012/01/05(木) 19:23:45.21
それはTransrateが入った場合
リンク先を見る限り、Rotationしかしてない

>OpenGLの左手座標系を、右手座標系に変換したいときって、

この質問の仕方で、全然理解してないのが分かる
左手系、右手系とは行列処理の事だろ

例えば左手系前提で作られたモデルがあり、右手系の行列処理でレンダリングしたら
ポリゴンが裏向きになってカリングされてしまうとかの場合
よって最後にスケールZ-1をする事で左手系のモデルを右手系で描画する
とかの場合に、Z-1とかにするんだよ

つかもともとOpenGLの行列処理は右手系
何が左手系なんだ?
頂点って言うんだったら、処理は右手系のまま頂点の2番目と3番目を入れ替えてみれば
CWがCCW、もしくはCCWがCWになって上手く行くかもね
400デフォルトの名無しさん:2012/01/05(木) 19:47:08.18
ハァ?
401デフォルトの名無しさん:2012/01/05(木) 20:08:53.67
そこはハァじゃなく、知りたいことをはっきり訊いた方がいいぞ
402デフォルトの名無しさん:2012/01/05(木) 23:19:02.81
ソースがくさいのだけはわかった
403デフォルトの名無しさん:2012/01/05(木) 23:46:52.62
>>399
俺モデルデータをファイルから読込みむ時に頂点順序反転する処理入れてた・・・・・
scaleで行けたのか・・・・・・・・・・・
404デフォルトの名無しさん:2012/01/06(金) 00:17:02.70
glFrontFace(GL_CCW), glFrontFace(GL_CW)
でいいと思うけど。
405デフォルトの名無しさん:2012/01/06(金) 01:04:12.77
モデルデータを右手系で出力すればおけ
406デフォルトの名無しさん:2012/01/06(金) 09:50:22.84
まあ1年に3回ぐらいはどちらかに統一しろよとは思うよな
407デフォルトの名無しさん:2012/01/06(金) 20:55:06.19
元々、右手系しかなかったのにDirectXが左手系で超速いもんだから一気に広まった。
現在では速度差はあまりないが。
最近ではOpenGLの方が活気付いているけど、DirectX9.0cまでは付け入る隙など無かった。
408デフォルトの名無しさん:2012/01/07(土) 01:06:28.22
左手系で超速い

だってさww
409デフォルトの名無しさん:2012/01/07(土) 03:33:19.15
いつものバカだろ。放っておけ
410スーパーレフト ◆WIIamZako. :2012/01/07(土) 03:46:11.57
もう スーパーレフト ってコテ名乗れよ
酉やるからほら

スーパーレフト#孰扞wPSX

411デフォルトの名無しさん:2012/01/07(土) 10:38:51.16
3D界のレフティという名を名乗っていいぞ。俺が許可する
412デフォルトの名無しさん:2012/01/07(土) 12:58:18.97
>>408
そこは、左手系だから超速いと言いたいんじゃないと思うぞ

当時のOpenGLよりもゲーム向き(=速い)なライブラリだったからみんなが使って、
それがたまたま左手系だったから「左手系」が一気に広まった事を言いたいのだと思う

あくまで、一気に広まった要因は速かったからで、左手系だからと言いたいわけではないだろ
すぐ後で、現在では速度差はあまりないがとも言ってるし

と、俺は読み取ったが、どうだうか
413デフォルトの名無しさん:2012/01/07(土) 13:33:00.52
むしろ「左手系だから速い」って読み取るほうが難しいわ
414デフォルトの名無しさん:2012/01/07(土) 15:43:16.42
左手系の方が速い、とか言ってたやつが最近出没していたからなあ。
「左手系だから超速い」と読み取るのが自然かと。

>>412
それならば、
DirectXが左手系で超速い、ではなく、左手系のDirectXが超速い
にしないと、意味が正しく伝わらない。

複数の意味に取れる文章を書いてはダメって、大学で教わらなかったのか?
415デフォルトの名無しさん:2012/01/07(土) 15:47:36.96
>>414
曖昧な文章だとは思うよ

でも、相手がどう読み取って欲しいのか、は何故か分かってしまう場合が多い

それを分かってて逆に取って馬鹿にするのが 2ch の遊び方の一種なのも知ってる
416デフォルトの名無しさん:2012/01/07(土) 17:44:53.99
>>414
いや、お前の読解力がおかしいだけだろ
「『DirectXは左手系で』超速い」は普通の日本語なら「『DirectXは左手系だから』超速い」という意味には読まないぞ
417デフォルトの名無しさん:2012/01/07(土) 17:58:59.51
書き手がそういうふうに書くアホかもしれない、と考えるとこっちの読解力だけではもう面倒みきれなくなるから最初に感じたままでええのよ
418デフォルトの名無しさん:2012/01/07(土) 19:17:28.54
右手左手DirectXが超速い
ここ一ヶ月のスレの流れ読めばスーパーレフトさんが来たと思うのも自然だろう
419デフォルトの名無しさん:2012/01/07(土) 19:21:38.58
俺は右足系が好きかな。
420デフォルトの名無しさん:2012/01/07(土) 20:12:26.13
百足系の方が
421デフォルトの名無しさん:2012/01/07(土) 20:39:58.82
ここ国語弱い人間いるよな
外人か普段人と接してない人間と睨んでる
422デフォルトの名無しさん:2012/01/07(土) 21:21:08.63
OpenGL の上位ライブラリで、
マルチウィンドウ機能をデフォルトで装備するものってある?

少なくとも GLFW はウィンドウひとつしかサポートしない
GLUT はやってみた人がいるようだが、公式サポートではないらしく注意が多い
423デフォルトの名無しさん:2012/01/07(土) 21:45:23.85
GLUT やら OSG やら Coin3D やら幾らでもあるけど、

> GLUT はやってみた人がいるようだが、公式サポートではないらしく注意が多い

とか言ってるお前にゃ無理だな
424デフォルトの名無しさん:2012/01/07(土) 21:53:02.78
>>423
OS の API や環境に依存しそうな部分はできるだけ触りたくない
しっかりとラッピングしておいてほしいんだ

Haskellでプログラムしてるから、
Haskell用ラッパーの作成にも時間を取られる

GUI構築よりも本来注力したい仕事にさっさと取りかかりたいんだよ

> とか言ってるお前にゃ無理だな

無理だったら別の方法を考えるから、とにかく OSG や Coin3D を調べてみるよ

ありがと
425デフォルトの名無しさん:2012/01/07(土) 21:57:53.94
glutSetWindow つかってるけど簡単実装には便利だよ
426デフォルトの名無しさん:2012/01/07(土) 22:20:59.69
>>425
GLUTは一度入ったメインループから抜け出せない仕様が扱いにくいんだが、
今は背に腹は替えられない状況なんで検討してみる

ありがと
427デフォルトの名無しさん:2012/01/07(土) 22:46:59.29
時々聴くけどglutでMainLoopから抜けたい時ってどんな時なのかな
428デフォルトの名無しさん:2012/01/07(土) 23:04:27.61
終了ボタンでいきなり終了されたら困る時
429デフォルトの名無しさん:2012/01/07(土) 23:24:40.52
まさにそれ。
APIHookするしかないのか
430デフォルトの名無しさん:2012/01/07(土) 23:30:58.53
windowsならatexit()でいけそう
431デフォルトの名無しさん:2012/01/08(日) 00:31:31.41
javaれ
432デフォルトの名無しさん:2012/01/08(日) 10:28:56.50
メモリーリーク検出のために正しい手順で終わりたい時
ってかglutリークもOpenGLもメモリリークしてるがな...
433デフォルトの名無しさん:2012/01/08(日) 11:01:33.55
ペイントソフトとか作ってファイルを保存してないのに終了ボタン押されたら困るだろ?
そういう時にファイル保存の処理をするんだよ
434デフォルトの名無しさん:2012/01/08(日) 11:21:31.83
終了ボタンを自分で作ってるなら、マウスが終了ボタンを押した時の処理をMouseFuncに書けばいいんじゃないの
windowのXボタンのことならatexitで処理すればいいし
435デフォルトの名無しさん:2012/01/08(日) 12:08:01.39
>>434
終了しますか?(はい/いいえ)
って聞かれたことない?

それは置いといて実用目的でGLUT使うのは間違ってる
436デフォルトの名無しさん:2012/01/08(日) 12:12:36.11
Haskell限定だが

GLUTがメインループを持ってるせいで、
一部の同じくメインループを持つFRPライブラリと相性が悪い

またGLUTがイベントドリブンなのも、
いくつかのFRPライブラリとの相性を悪くしてる
437デフォルトの名無しさん:2012/01/08(日) 12:34:06.91
マルチウィンドウを管理して欲しいけどメインループは持たないでくれってのは難しいんじゃないのか
いっそ表示とそれ以外にスレッド分けたほうがスッキリしそう
438デフォルトの名無しさん:2012/01/08(日) 18:56:40.03
atexitだとまたメインループに戻る処理が出来ないだろ馬鹿
439デフォルトの名無しさん:2012/01/08(日) 22:08:21.43
>>438
馬鹿で悪かったな。そんな押されちゃ困るXボタンなら消しときゃいいだろ
440デフォルトの名無しさん:2012/01/09(月) 04:45:06.23
人のことをすぐ罵る男の人って
441デフォルトの名無しさん:2012/01/09(月) 15:32:24.70
ポチっとな
442デフォルトの名無しさん:2012/01/09(月) 17:37:55.40
glutを使ったこんなかっこいいPC demoがあるんだぜ
ttp://www.pouet.net/prod.php?which=57446

でも商用ソフトとかでglutを使うのはちょっとどうかと思うよ。
OpenSceneGraphとかUDKとかのゲームエンジンの方がもっと機能が多いよ。
443デフォルトの名無しさん:2012/01/09(月) 18:07:36.17
>>442
>OpenSceneGraphとかUDKとかのゲームエンジンの方がもっと機能が多いよ

レイヤが違うんだから当たり前だろ。せめて理解してから喋れ
444デフォルトの名無しさん:2012/01/11(水) 03:20:30.85
すみません
GLSLを使ってメッシュを表示しているのですが、
2台のPCで結果を確認すると、一方では正常に表示されるのに、もう一方では何も表示されません。

ダメなPC(デスク)
Win7 32bit
RADEON HD5750

正常なPC(ノート)
Win7 64biy
intel HD3000

デバッグするとどちらもGLSLのコンパイルは正常に完了しており、レンダリング中に何のエラーもありません。
ただ、スプライト(板ポリ)を表示する簡単なシェーダだけはRADEONでも正常に動きます。
ポリゴンを表示するシェーダだけがRADEONで動かないのは何が原因でしょう?
445デフォルトの名無しさん:2012/01/11(水) 03:42:34.81
RADEONで動かないシェーダーに原因があるでしょう
446デフォルトの名無しさん:2012/01/11(水) 10:43:26.92
バグがないと仮定したらテクスチャーモードを設定してないとか
確かATI系だけは設定しないと表示されなかったはず
447デフォルトの名無しさん:2012/01/11(水) 18:17:40.41
RADEONってほんとプログラマー泣かせだよな
448デフォルトの名無しさん:2012/01/11(水) 18:30:00.84
そんな事はない。ATIの方が仕様に正しく実装されている
作ったとおりに動くのがATI。正しく作らなかったら正しく動かないのがいい
NVIDIAはわりといい加減に作っても動くけど、それは正しい動作ではない
449デフォルトの名無しさん:2012/01/11(水) 18:39:28.91
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /
                  nvidia
450デフォルトの名無しさん:2012/01/11(水) 19:00:10.69
せっかくこの話題になったから聞いておきたいんだけど
ATIで動いたシェーダはNVIDIAでも動くってのは正解?
つまり開発環境としてはRADEONの方が無難?
451デフォルトの名無しさん:2012/01/11(水) 20:15:32.80
どちらでも動くソフトを作るならRADEONで動作チェックするしかないな
っていうか融通がきかないんだよRADEONは
452デフォルトの名無しさん:2012/01/11(水) 21:48:35.36
>>444
OpenGLのエラーが出てないか調べたら良いかも。GL_ARB_debug_outputとか。

又は、gDebuggerとか今はタダだから使ってなかったら試してみたらコード変更しなくてもエラーが見つけられるかも。
453デフォルトの名無しさん:2012/01/11(水) 21:49:13.24
3D空間に文字を出力する出来るだけ簡単な方法教えてください
ここの方法を参考に弄ってやってみようとしたけど、できん
ttp://www21.atwiki.jp/opengl/pages/24.html
454デフォルトの名無しさん:2012/01/11(水) 21:51:39.99
>>450
ドライバの出来次第では?
古いNVのドライバだと対応してないテクスチャフォーマットがあったりもしたよ。
455デフォルトの名無しさん:2012/01/11(水) 21:52:19.33
お前の環境は何だとか一々きかせるな
456デフォルトの名無しさん:2012/01/11(水) 22:03:23.31
>>453
予め必要な文字を描いておいたテクスチャの一部をビルボードに貼って表示すれば良い
これが一番簡単だ

文字の形をした立体オブジェクトを表示させたいのなら、
FreeFontでも使ってフォントのアウトライン(ベジェ曲線)を得て、
それをtrianglizeして表示すれば良い
457デフォルトの名無しさん:2012/01/11(水) 22:07:53.35
>>455
ごめんなさい。Windowsでglut使ってます。WindowsなんでWin32API使ってもいい
>>456
そのテクスチャの方法でやりたいんだけど、その元の文字を画像にしたものの作り方
で簡単に出来る方法が知りたいです。自分で平仮名から漢字まで全部用意するのは
現実的ではないし
458デフォルトの名無しさん:2012/01/11(水) 22:23:38.89
>>457
普通は自分で用意するんだよ
どの文字を必要としているかは人ぞれぞれなんだから

それが面倒だと言うのなら、
例えばTUF-8やShift-JISの何番から何番までの文字を列挙したビットマップを作る
という考え方もある
これならプログラムを書いてある程度自動化できるだろ

スクリプトが書けるテキストエディタで文字を列挙してスクリーンキャプチャを撮るとか

ビットマップからデバイスコンテキストを取って、それに対してTextOutして、
そのビットマップをファイルに保存するとか
459デフォルトの名無しさん:2012/01/11(水) 22:28:02.87
> 例えばTUF-8やShift-JISの何番から何番までの文字を列挙したビットマップを作る
> スクリプトが書けるテキストエディタで文字を列挙してスクリーンキャプチャを撮るとか

え?w 普通OSが用意してる文字をビットマップに書き込むAPIを利用するだろ
460デフォルトの名無しさん:2012/01/11(水) 22:31:53.55
461デフォルトの名無しさん:2012/01/11(水) 22:47:53.88
>>459
> え?w 普通OSが用意してる文字をビットマップに書き込むAPIを利用するだろ

どこに笑える要素があるのか、詳しく聞きかせろ

私は「どの文字」をビットマップに描くのかを指定する方法のひとつとして、
連続した文字コードの文字をビットマップに並べるという「考え方」を提案した
文字コードが連続している文字を使えば for ループが使えるからな

それ以外に「どの文字」をビットマップに描くのかを指定する方法があるのなら、
>>457 に提案してやってくれ

あと、スクリーンキャプチャの方法を提案したのは、
あくまでも主目的は文字を3D空間に表示する事であって、
文字が描かれたテクスチャ(ビットマップ)を作る方法は「簡単なら何でも良い」
と解釈したからだ

そして、質問者にとってどのような方法が簡単なのか私は知らない
だから、もうひとつ TextOut 関数を使う考え方も提案した

私は文字を「直接」ビットマップに描く OS の API は知らない
知っているのなら関数名を >>457 に教えてあげるべきだろ
その方がより楽なのは明らかなのだから
462デフォルトの名無しさん:2012/01/11(水) 22:53:18.04
怒りの長文炸裂
463デフォルトの名無しさん:2012/01/11(水) 23:01:36.47
Mac なら CTFrameDraw とかあるけどな。Win は知らん
464デフォルトの名無しさん:2012/01/11(水) 23:31:36.69
DrawText()
465デフォルトの名無しさん:2012/01/11(水) 23:48:29.27
glutBitmapCharacter
466デフォルトの名無しさん:2012/01/11(水) 23:49:01.68
>>453
できない方法ってのは wglUseFontBitmapsW使ってるみたいだし、
3D空間に文字出してクルクルまわしたいとかそういうことじゃないのだよね?
glutならwglGetCurrentDCでhdcもってきてとかそういう話だったりして
467デフォルトの名無しさん:2012/01/11(水) 23:59:33.04
>>453
何ができないのか、まずはそれからだ。

エスパーだけどglLoadIdentityとかglOrthoとかしてないから画面外に文字が出てて
表示されてないだけと見た。
468デフォルトの名無しさん:2012/01/12(木) 00:02:37.94
deprecatedなOpenGL関数使うとどういうまずいことがあるんですか?
469デフォルトの名無しさん:2012/01/12(木) 00:09:33.36
>>468
今は問題ない
470デフォルトの名無しさん:2012/01/12(木) 00:13:37.36
直ちに影響はないんですね
ありがとうございました
471453:2012/01/12(木) 02:23:43.74
ありがとう、教えてもらった方法を参考にして調べながら、DIBSectionとDrawTextを使って
描画したピクセルデータをテクスチャにする方法でやってみると上手くできました。
472デフォルトの名無しさん:2012/01/12(木) 07:37:19.76
ATI RADEON HD5600 Seriesを使用しています。
>>453のサイトで自分も勉強し始めたばかりなのですが、一番簡単な空のウインドウを表示するでなぜかウィンドウ内がスクリーンキャプチャしたようになってしまいます。
2〜7までは正常に実行できるのですが、8の円を描画するや目的のスタティックメッシュ編は1の同様ウィンドウがおかしな表示になってしまいます。
上述のようにRADEONのボードが関係あるのでしょうか?
473デフォルトの名無しさん:2012/01/12(木) 07:40:57.03
OSはXPsp3、reeglut、Visual Studio 2010 Express Editionで実行しています。
474デフォルトの名無しさん:2012/01/12(木) 17:44:57.29
これからOpenGLとかDirectXを学ぼうとする者がRADEON使うのはやめれ
時間を無駄にするだけだ
475デフォルトの名無しさん:2012/01/12(木) 18:21:03.45
>>472
空のウィンドウが開くプログラムは画面のクリアすらしてないので、ウィンドウ内がスクリーンキャプチャになってても正常かと

8のプログラムはglutInitDisplayModeでダブルバッファにしているが、
glutCreateWindowより下でやってる。入れ替えれば動くかもね
うちのPC(NVIDIA)ではそうだった
476デフォルトの名無しさん:2012/01/12(木) 19:05:37.80
>>474−475
アドバイスありがとうございます。
glutInitDisplayModeとglutCreateWindowを入れ替えたら無事に円を表示する事ができました!
9.文字列描画も同じ方法で正常に実行できたので以下のプログラムもそれに気をつけてビルドしてみます。
RADEONである事は関係なかったようですね…。
477デフォルトの名無しさん:2012/01/12(木) 19:27:13.12
>>476
そこで続けるのか。OpenGL関係ないことのが多いような気がするが。
478デフォルトの名無しさん:2012/01/12(木) 20:52:17.43
自分は画像処理しかしていませんがみなさんはOpenGLで何をされていますか?
479デフォルトの名無しさん:2012/01/13(金) 00:05:45.82
球面調和関数でおっぱいをレンダリングとか
480デフォルトの名無しさん:2012/01/13(金) 00:08:28.16
>>479
君は正しい道を歩んでいる
481デフォルトの名無しさん:2012/01/14(土) 10:14:44.92
VMware / Ubuntu で「GLUTによる「手抜き」OpenGL入門」の勉強を始めました。
man glBegin でmanを見るには具体的にはどうすればよいのでしょうか?
482デフォルトの名無しさん:2012/01/14(土) 12:09:03.11
>>481
ググったら和歌山大学とかいうFラン大が出てきたがそこの学生か?
483デフォルトの名無しさん:2012/01/14(土) 13:28:35.08
>>482
そのサイト、おっさんで会社員の俺もよくみるが
484デフォルトの名無しさん:2012/01/14(土) 13:44:13.91
manの内容程度ならぐぐれば出るよ
www.google.co.jp/search?q=site%3Aopengl.org+glBegin
485デフォルトの名無しさん:2012/01/14(土) 14:03:13.75
それ以前にVMWare上でUbuntu動かしてるところに突っ込めよ
486デフォルトの名無しさん:2012/01/14(土) 14:14:46.55
>>458
なんで?
487デフォルトの名無しさん:2012/01/14(土) 14:15:59.74
すまん、>>485
488デフォルトの名無しさん:2012/01/14(土) 17:29:06.46
スレの流れを無視しちゃうかもしれないけど
OpenGLで作る Android SDKゲームプログラミング
って本は最悪だった

Amazonで評価が良かったから、買ってみたら
プログラミングのスタイルは悪いわ
後半にいくにしたがって、段々記述が荒くなってくるわで、散々な目にあった

極めつきは、VBOのソースで、
AndroidはJAVAなのに、メモリ割り当てとか無茶苦茶なことをやろうとした挙げ句に
「Sizeof」とか書いてあるの。もうアホかと、バカかと
NDKではなくSDKなのに、Sizeofはねーだろうよ
碌にコンパイルすらしていないのがバレバレ
初心者が買ったら、わけがわからなくて確実に詰むね

こんな本で3000円も取るなんてふざけてる
489デフォルトの名無しさん:2012/01/14(土) 17:56:16.12
ブームだ急げ、今なら売れる、と言う 「勢い本」 の中には、そういう危険な物もきっとある
490デフォルトの名無しさん:2012/01/14(土) 19:06:25.07
>>488
さあ早くAmazonでボロクソにレビューする作業に戻るんだ
491デフォルトの名無しさん:2012/01/14(土) 19:09:57.09
本読まないとJNI使えないようなレベルじゃどっちにしろ何も作れないから大丈夫
492481:2012/01/14(土) 20:56:43.17
481です。初心者の年寄りです >>484 教えていただきありがとうございます。
Unix系の開発環境を使いたくて、VMware + Ubuntu にしました。
man で シンタックスが分かる方法ありましたら教えてください。よろしくお願いします。
それと、皆さんどんな開発環境を使っているのでしょうか?
493デフォルトの名無しさん:2012/01/14(土) 21:23:23.14
俺の Mac では man glBegin は普通に出てきた
494デフォルトの名無しさん:2012/01/14(土) 23:14:31.46
なにそれ
495デフォルトの名無しさん:2012/01/14(土) 23:39:43.06
>>481
"ubuntu manpage OpenGL"でググってみれば
496481:2012/01/15(日) 00:52:30.35
>>495 ありがとうございます。出来ました。
497デフォルトの名無しさん:2012/01/16(月) 21:28:22.24
すみませんglmではMatrixをVectorの右からかけますが、GLSLでは左からかけています。
プログラム内で複数のMatrixを掛けて計算したMatrixはプログラム内のVectorを変換するのには使えますが、
シェーダーでは計算の順序が違うのでおかしなことになってしまっていると思います。
1つのMatrixをプログラム内とシェーダー内両方で使うにはどうすればよいのでしょう。
498デフォルトの名無しさん:2012/01/16(月) 21:42:16.15
しつこいなぁ
499デフォルトの名無しさん:2012/01/16(月) 21:58:18.35
>>497
行列を転置させる
500デフォルトの名無しさん:2012/01/16(月) 22:17:35.70
transposeですね!ありがとうございます^^
501デフォルトの名無しさん:2012/01/16(月) 22:49:01.36
>>498
問題をわかってないのは君だけだと思うよ
502デフォルトの名無しさん:2012/01/16(月) 22:53:04.82
glmの行列がどんなんか知らないけど、row-majorならそのまま使えるんでないの?
503デフォルトの名無しさん:2012/01/16(月) 23:02:01.86
glmがどんなのか知らんが

直交座標系で、例えばある回転行列の右からベクトルを掛けた時に
そのベクトルが時計回りに回転するように見える場合、
もし(ベクトルを転置して)左からその回転行列に掛けたならば、
逆向きに回転するように見える

同じ向きに回転するように見せるには、
その回転行列も同時に転置させなければならない

row-major か column-major かの話とはまた別だ
メモリレイアウトはそのまま使えるかも知れない(私は知らないが)
504デフォルトの名無しさん:2012/01/16(月) 23:26:38.38
ベクトルを転置する話なんて誰もしてないのに…
505デフォルトの名無しさん:2012/01/16(月) 23:41:25.25
3Dやるなら最低でも線形代数やっといた方がいいと思う
506デフォルトの名無しさん:2012/01/16(月) 23:43:43.90
最低が線形代数ならそれ以上は何?
507デフォルトの名無しさん:2012/01/16(月) 23:44:38.30
量子力学
508デフォルトの名無しさん:2012/01/16(月) 23:57:29.62
>>504

>>497
> glmではMatrixをVectorの右からかけますが、GLSLでは左からかけています

行列の右からベクトルを掛けるなら、
そのベクトルは意味上は列ベクトルだ

それを同じ行列の右から掛ける為には、
意味上は行ベクトルに転置しないといけない

ここでベクトルの転置の話が出てくる

しかし、それは今回の本質的な問題ではないため、
私も(ベクトルを転置して)と括弧で括った

今回の話がベクトルではなく行列の転置の話であることは承知している

理解していただけだろうか
509502:2012/01/17(火) 00:13:44.56
GLSLは列ベクトルの左に行列をかける&行列の配列への格納はcolumn-major、
glmは(497によると)行ベクトルの右に行列をかける、
なのだからあとは
glmの行列がrow-majorならそのまま配列が使える
glmの行列がcolumn-majorなら転置の必要がある
んじゃないの? 話が別ってなんで?
510デフォルトの名無しさん:2012/01/17(火) 02:56:36.19
glm使ったこと無かったのだけど、

ttp://glm.g-truc.net/code.html
mat4はcolumn-major
translate,rotateなどの機能も用意されているので
行ベクトルに右から掛けるのではなく、列ベクトルに左から掛けるほうが良いっぽい

vec3 a,b;
mat4 M;
a = b * M; だとbを行ベクトルとして計算し、
a = M * b; だとbを列ベクトルとして計算するみたい
511デフォルトの名無しさん:2012/01/17(火) 07:42:30.01
>>509
以下の2つの事は本質的に全く別の事だ

・数学的な意味でのベクトル-行列の積の順や行列の転置

・数学的な行列をたまたまメモリにシーケンシャルに配置して表現しており、
それがたまたま一方はrow-majorでもう一方はcolumn-majorであり、
同時にたまたま一方が行列に右からベクトルを掛ける表記をなぞらえており、
もう一方が行列に左からベクトルを掛ける表記をなぞらえている為に、
一方の計算をもう一方へ移植するのに行列の転置「処理」を必要とせず、
そのままのメモリレイアウトで移植可能である(かも知れない)事

簡単に言えば、数学的な計算と、
メモリレイアウトと内部処理の関係でプログラマが仕事を端折れる事、
これらは全く別だという事

だからしっかりと分けて、まずは数学的な意味での計算の仕組みを理解し、
その後でたまたま今回は仕事を端折れる(かも知れない)事を理解すべき
逆順で理解しようとすることは結局は遠回りになる

>>497 は質問文の書き方や内容、また >>500 のレスから察するに、
数学的な意味での計算の仕組みを「プログラムに落とし込める」ほどには
理解できていなかったと見える(まだ今でも理解はおぼろげだと思う)

であれば、その時点でのrow-majorなどの話は混乱の元ではないだろうか
512デフォルトの名無しさん:2012/01/17(火) 10:38:28.55
「row-majorならそのまま使える」と、「数学とメモリレイアウトは別の話だ」
ってのはそれこそ別の話じゃん。
あんたは個々の言ってる事は正しいんだけど、話の筋がズレてるんだよ。
513デフォルトの名無しさん:2012/01/17(火) 11:08:50.37
>>510
つまり最初からGLSLに合わせた使い方すればokと。
514497:2012/01/17(火) 11:59:38.76
つまりglmは右からも左からも行列を掛けられるということですね
昨日は左から掛けたらコンパイル通らなかったんですが、いま試すとできました
何か勘違いしていたんですね
515デフォルトの名無しさん:2012/01/17(火) 12:45:21.48
>>512
> それこそ別の話じゃん

初めから別の話だと >>503 ではっきり言っている
メモリレイアウトはそのまま使えるかも知れないとも言った
行列の転置の話とも混ぜてはいない
レス内の上下でしっかりと行を分け、文脈を分けている

そして >>509 で「話が別なのは何故か」という趣旨の質問を受けた

だから >>511 で私が話は別と言った「理由」を説明した
これらが別の話だと認識しなければ理解できないからと

私が最初に話し、それに対して質問を受け、それに応えた
応答に問題があるのなら、何が問題なのかはっきりと指摘して欲しい
516515:2012/01/17(火) 12:46:37.61
>>512

ちなみに、row-major というのはメモリレイアウトの範疇の話だ

これに異論があるのか?
517デフォルトの名無しさん:2012/01/17(火) 20:22:17.60
glmってexpression template使ってないの
518デフォルトの名無しさん:2012/01/17(火) 20:36:41.99
もちろんそうよ
519デフォルトの名無しさん:2012/01/17(火) 21:57:12.51
Expression Templateっつうもんがあるのか
でもあんまり必要性を感じないな
巨大な配列使わなければいいだけ
520デフォルトの名無しさん:2012/01/17(火) 22:11:40.53
そういう問題ではない…。
521デフォルトの名無しさん:2012/01/18(水) 08:21:50.32
海外ゲームの日本語化をしていてフォントファイルらしきものがあったんですが
拡張子が「glf」だったんです。
これはglfontって事ですかね?編集って出来ます?
522デフォルトの名無しさん:2012/01/18(水) 08:51:12.16
http://students.cs.byu.edu/~bfish/glfont.php#Download

ここのアプリで作成できる
523デフォルトの名無しさん:2012/01/18(水) 13:30:34.39
>>522
ありがとうございます。

字数制限がキビシー
524デフォルトの名無しさん:2012/01/18(水) 17:29:54.73
LINEを描くとき色が中間で分かれるようにするにはどうすればいいですか?
Smoothだとグラデーションになるし、Flatだと中間で分かれないんですよね
525デフォルトの名無しさん:2012/01/18(水) 17:30:43.79
texcoord つかって、シェーダで色分けろ。
526デフォルトの名無しさん:2012/01/18(水) 17:52:28.58
2回LINEすればおけ
527デフォルトの名無しさん:2012/01/18(水) 18:14:48.37
回答ありがとうございます。
やってみます。
528デフォルトの名無しさん:2012/01/18(水) 18:36:32.76
シェーダなしでも2色のテクスチャをGL_NEARESTで使えば
529デフォルトの名無しさん:2012/01/22(日) 12:05:15.83
GLSLのコンパイル時間の長さにイラッとくる
530デフォルトの名無しさん:2012/01/22(日) 12:06:58.53
そんな頻繁にコンパイルするシステムってあるの?
531デフォルトの名無しさん:2012/01/22(日) 13:10:16.32
ShaderTreeみたいなツールとか
532デフォルトの名無しさん:2012/01/22(日) 21:09:06.77
glsl内で回転行列(Z軸)を定義するとなんか30度くらい余計に回転してる感じなんだけど
533デフォルトの名無しさん:2012/01/23(月) 01:00:50.29
間違いなくコーディングミス
534デフォルトの名無しさん:2012/01/23(月) 02:11:26.03
大方、度で角度を指定してるんだろ
ラジアンにしてるか?
535デフォルトの名無しさん:2012/01/23(月) 02:19:38.49
それだ
まあ、言われなくても自分で気づいてただろうが
536デフォルトの名無しさん:2012/01/27(金) 21:54:19.08
史上これほどまでに傲慢な返答はあるまい
537デフォルトの名無しさん:2012/01/27(金) 21:59:23.68
宣言もないのに同一人物だと思い込むのやめたほうがいいよ
538デフォルトの名無しさん:2012/01/27(金) 22:05:06.25
2chのレスは自分のも含めて全て人工知能だと思ってる
539デフォルトの名無しさん:2012/01/27(金) 22:39:13.43
マルバツでもやってろ
540デフォルトの名無しさん:2012/01/27(金) 22:47:51.06
でも>>532>>535が同一人物だと考えると傲慢すぎて面白いよね
一種の憧れまで感じる
541デフォルトの名無しさん:2012/01/28(土) 01:53:53.08
OpenGLを使ったエフェクトのサンプルソースが見れるサイト教えてください
542デフォルトの名無しさん:2012/01/28(土) 16:13:39.70
えっち
543デフォルトの名無しさん:2012/01/28(土) 20:00:05.82
Celeron G530 の Intel HD Graphicsで glsl使われてる方いますか?サンプルとかちゃんと動きますか?
544デフォルトの名無しさん:2012/01/29(日) 11:45:18.85
GLSL 1.2 だから結構動かないのあるんじゃないかな
545543:2012/01/29(日) 16:34:19.12
>>544
なるほど、glslのバージョンは見てませんでした。ありがとうございます。
GeForce付きPCを考えます。
546デフォルトの名無しさん:2012/01/29(日) 23:24:38.84
誰か、BCCでfreeglut使う方法教えてくれ
547デフォルトの名無しさん:2012/01/29(日) 23:32:25.69
makeファイル見ながらソースコンパイルすればいい
548デフォルトの名無しさん:2012/01/29(日) 23:34:34.72
VC++が無料かつ使用制限なしで使えるのに作成したバイナリを公開する事も出来ないBCCを選択する意味がわからない
549デフォルトの名無しさん:2012/01/30(月) 00:32:18.44
VC++Expressって無料なの?商用でも?
550デフォルトの名無しさん:2012/01/30(月) 01:03:24.93
無料だよ
551デフォルトの名無しさん:2012/01/30(月) 20:51:35.30
VC++インストールしたくない
552デフォルトの名無しさん:2012/01/30(月) 21:13:21.84
なんで?
553デフォルトの名無しさん:2012/01/30(月) 22:15:18.56
わがまま言うな
インストールしなさい
554デフォルトの名無しさん:2012/01/30(月) 22:31:58.19
依存関係の稼動テストするのに開発環境と共にいつの間にかインストールされたCOMやらNETやらOLEやらごちゃごちゃ入れられて
ライブラリ使用の有無だけじゃ判断つけられずOSをもう1個買うかなんかしないとロクにテストも出来なくなるからねー
555デフォルトの名無しさん:2012/01/30(月) 22:40:49.68
そうやって人生無駄にしていった人間を何人も知っている
556デフォルトの名無しさん:2012/01/30(月) 22:46:37.10
>>554
その割りには VC++ で作られた普通に動く無料アプリって多いよな
557デフォルトの名無しさん:2012/01/30(月) 22:49:39.64
bccはまじでオススメできない
おとなしくVCいれとけ
せめてMinGWかcygwin
558デフォルトの名無しさん:2012/01/30(月) 23:09:34.14
bccはインストール権限なくても展開するだけで動くからじゃね?
USBメモリでこっそり持ち込んで…
に最適
559デフォルトの名無しさん:2012/01/30(月) 23:20:17.61
>>554
おまえはそんな大層なプログラムを書くんか
そんなん気にするよりコーディング環境を良くして
1行で多くプログラムを書けよ
そっちのがお前さんの為になると思うよ
560デフォルトの名無しさん:2012/01/30(月) 23:22:20.81
でも気持ちはわかる。
561デフォルトの名無しさん:2012/01/30(月) 23:24:03.98
>>558
確かにその通りなんだが、それだけでは >>554 の問題は解決しないような・・・
562デフォルトの名無しさん:2012/01/30(月) 23:24:28.62
>>559
1行で多く→1行でも多く
563546:2012/01/31(火) 00:03:26.53
>>558 の通りUSBメモリに入れてどこでも開発できるから。

複数のPCで設定とか揃えるの面倒。
564デフォルトの名無しさん:2012/01/31(火) 00:24:30.20
USBHDDに全部入れりゃVC++で解決
565デフォルトの名無しさん:2012/01/31(火) 07:44:53.77
usbとかってはなしならなMinGWでいいじゃん
566デフォルトの名無しさん:2012/01/31(火) 21:38:17.94
開発環境といったらLSI C-86試食版一択だろう
567デフォルトの名無しさん:2012/01/31(火) 22:49:37.98
なつかしい
まじでお世話になったなLSI C-86試食版
568デフォルトの名無しさん:2012/02/01(水) 00:17:16.21
OpenGL使ってiPhoneアプリ作ってるけどなかなか難しいね^^
569デフォルトの名無しさん:2012/02/01(水) 00:18:46.84
黙れ^^
570デフォルトの名無しさん:2012/02/01(水) 00:50:48.37
いーえすつー!^^
571デフォルトの名無しさん:2012/02/01(水) 00:55:50.97
iPhone()笑
572デフォルトの名無しさん:2012/02/01(水) 02:07:25.37
僕はCP/MでBDS-Cです。
573デフォルトの名無しさん:2012/02/01(水) 03:17:35.57
iPhone(笑)
iPhone()笑
iPhone()     笑
iPhone()         笑
iPhone()
574デフォルトの名無しさん:2012/02/01(水) 03:39:34.16
お前らまだぴこぴこやってんのか...
575デフォルトの名無しさん:2012/02/03(金) 19:54:40.70
android()
576デフォルトの名無しさん:2012/02/04(土) 01:46:49.25
>>573
あほでしょあなた。。w
577デフォルトの名無しさん:2012/02/04(土) 10:54:06.15
悔しかったん?
578デフォルトの名無しさん:2012/02/04(土) 11:13:16.10
あほでしょあなた。。w
あほでしょあなた。。。。w
あほでしょあなた。。。。。。w
あほでしょあなた。。。。。。。。
579デフォルトの名無しさん:2012/02/04(土) 13:03:09.26
>>577
はぁぁぁぁ?
580デフォルトの名無しさん:2012/02/04(土) 14:48:56.86
はぁぁぁぁ?
はぁぁぁぁ?      !
はぁぁぁぁ ?    !
はぁぁぁぁ   ?!
はぁぁぁぁ !    ?
はぁぁぁぁ!
581デフォルトの名無しさん:2012/02/06(月) 23:05:07.66
いいからOpenGLの話しろ
582デフォルトの名無しさん:2012/02/06(月) 23:23:23.41
ウィンドウサイズを変更した時に
ウィンドウ全体のピクセルを拡大することってできる?

たとえば

■□
□□

■■□□
■■□□
□□□□
□□□□

こんな感じ
583デフォルトの名無しさん:2012/02/06(月) 23:49:45.65
別コンテキストにレンダしてそれをGL_NEARESTなテクスチャとして貼るとか?
それかシェーダ
584デフォルトの名無しさん:2012/02/07(火) 00:35:05.44
ビューポート
585デフォルトの名無しさん:2012/02/07(火) 00:36:33.77
ビューポート
586デフォルトの名無しさん:2012/02/07(火) 00:40:46.52
>>583
(´c_,`o)
587デフォルトの名無しさん:2012/02/07(火) 21:57:46.82
ビューポートで出来んだっけ??
588デフォルトの名無しさん:2012/02/07(火) 22:49:59.50
できんの?!
589デフォルトの名無しさん:2012/02/07(火) 22:57:19.10
ViewPort変換ってフラグメントシェーダが走った後に処理されるのか勉強になるよ
590デフォルトの名無しさん:2012/02/07(火) 23:10:42.87
ビューポートの操作ではピクセルが拡大されたように見せることは無理だ
591デフォルトの名無しさん:2012/02/08(水) 00:31:36.96
>>590
アホたれ
592デフォルトの名無しさん:2012/02/08(水) 00:53:23.79
>>591
ソースは?
593デフォルトの名無しさん:2012/02/08(水) 00:56:28.35
ソース乞食ktkr
594デフォルトの名無しさん:2012/02/08(水) 01:15:12.06
また出来ないことを出来ると言い張る知障が現れたか
勘違いで発言した後引くに引けなくなって言動が破綻してくいつものパターン
595デフォルトの名無しさん:2012/02/08(水) 01:53:36.44
596590:2012/02/08(水) 07:43:57.39
>>591
では、もう少し詳しく説明してやる

ビューポートは、正規化デバイス座標系(NDC)での座標を
ウィンドウ座標系での座標へどう変換するかを指定するものだ
この変換をビューポート変換という

ビューポート変換は線形変換だ
従って、ウィンドウ座標系のあるピクセルとその隣のピクセルに
それぞれ変換されるNDCの座標は、それぞれ異なるはずである

しかし、仮に >>582 のやりたいことをビューポート変換で行う事を考えれば、
それはあるピクセルとその隣のピクセルにNDCの同じ座標を割り当てる事になる
だが、先ほども言ったようにビューポート変換は線形変換なので矛盾する

従って、>>582 のやりたいことをビューポート変換で実現するのは不可能である

逆にこの事から、どうすべきかは必然的に見えてくる
要するにウィンドウ座標系のある隣同士のピクセルに
それぞれ変換されるNDCの2つの座標が同じ値が示しすようにするしかない
597590:2012/02/08(水) 07:51:17.08
>>596
> 逆にこの事から、どうすべきかは必然的に見えてくる
ここの件は間違いだった
シェーダーを用いればこの件の結論は覆る

しかし、ビューポート変換では実現できないことは確かだ
598デフォルトの名無しさん:2012/02/08(水) 08:58:54.95
馬鹿なん?
599デフォルトの名無しさん:2012/02/08(水) 09:19:41.90
元々の「ウィンドウ全体のピクセルを拡大」てのが意味不明瞭だしなぁ。
普通に考えればビューポート変えてもピクセルを拡大なんてできないわけだけど、
テクスチャを一枚表示してるだけのプログラムなら、ビューポート変えれば
「ピクセルを拡大」したように見えないこともないかもしれないし。

ていうかビューポート、ビューポート言ってる人達(達?)は、一体何を考えてるんだろうか。
一言レスとか悪態とかしか書けないあたり、具体的な策を持ってない人だろうか。
600デフォルトの名無しさん:2012/02/08(水) 09:20:21.59
何のためのプロジェクション行列だよ…
601デフォルトの名無しさん:2012/02/08(水) 09:22:03.60
>>599
基本からやり直せ
602デフォルトの名無しさん:2012/02/08(水) 09:22:08.73
そりゃ解決法はいくらでもあるだろう・・
603デフォルトの名無しさん:2012/02/08(水) 09:47:14.85
>600-602
ああ、なるほど、うん、大体分かった…

>>582
とりあえずですね、残念ながらあなたの説明では、あなたのやりたい事が分からないですよ。
もしウィンドウサイズ変えても描画領域が変わらなくて困ってる、あるいは絵を大きくしたいだけならglViewportだし、
582の図を愚直に解釈して本当にピクセルを拡大したいなら、別のやり方を考えないといけないし。
(582の図は2x2->4x4ですけど、例えば2x4->9x3の場合ならどうなって欲しいの?とか)
604デフォルトの名無しさん:2012/02/08(水) 10:56:25.78
なんだギザギザにしたいってだけか。
描画に関する事を全てテクスチャにオフスクリーンレンダリングして
GL_NEARESTのミップマップにして後はウインドウサイズにビューポート合わせて
ウインドウサイズにテクスチャをストレッチして描画すればいいだけだろJK
605デフォルトの名無しさん:2012/02/08(水) 11:01:53.42
“だけ”にしちゃ長いなw
606デフォルトの名無しさん:2012/02/08(水) 15:58:15.97
いやいやモザイクにしたいという方が間違えだろ
607590:2012/02/08(水) 19:37:45.67
>>582 のやりたい事なんて明確だろ

「ピクセルを拡大する」と言っている
608デフォルトの名無しさん:2012/02/08(水) 20:27:13.42
609デフォルトの名無しさん:2012/02/08(水) 20:48:40.96
別コンテキストなんて誤解を生みそうな用語使っちゃってる回答にアンカ振られても
610デフォルトの名無しさん:2012/02/08(水) 20:54:16.66
glReadPixels と glPixelZoom と glDrawPixels で解決
611名無し:2012/02/09(木) 16:26:19.40
プログラミング超初心者です。
openGLで「openGl 手抜き入門」を用いて勉強していてラジコンティーポットという課題をやっています。

まったくわからないので動かし方を教えてもらえたら嬉しいです
お願いします。
612デフォルトの名無しさん:2012/02/09(木) 16:44:17.03
「openGl 手抜き入門」ってなんだ
613デフォルトの名無しさん:2012/02/09(木) 16:46:00.68
ggrks
614デフォルトの名無しさん:2012/02/09(木) 16:50:16.92
>>611
「まったくわからない」じゃどこまでで来て、どこからができないのか答える方がまったくわからないので答えようがない。
もしわからないのが操作の部分ならOpenGLとは切り離して考えるべきじゃないだろうか。
615名無し:2012/02/09(木) 17:00:19.78
http://www.wakayama-u.ac.jp/~tokoi/opengl/ex-d.html
動かすためのプログラミングがわかりません
616名無し:2012/02/09(木) 17:02:33.92
動かすために何を書いたらいいのかがわかりません
617デフォルトの名無しさん:2012/02/09(木) 17:04:04.47
抽象的すぎて何がわからないのかわからないのでアドバイスできません.
具体的に分からない箇所を言ってください
618名無し:2012/02/09(木) 17:06:24.04
どうやったらラジコンティーポットが8の字に動くんですか?
619デフォルトの名無しさん:2012/02/09(木) 17:06:24.64
openGlより前にプログラミングの基礎を勉強しようか
620名無し:2012/02/09(木) 17:10:20.95
基礎勉強してたらこのラジコンティーポットを動かす課題の提出日が過ぎちゃいます
621デフォルトの名無しさん:2012/02/09(木) 17:13:01.00
知るか。
622名無し:2012/02/09(木) 17:17:02.76
知ってください
誰かお願いします。

ラジコンティーポットを操作できるようにしたいんです。
623名無し:2012/02/09(木) 17:29:10.15
http://www.wakayama-u.ac.jp/~tokoi/opengl/ex-d.html
これの課題の答え教えてください。
624デフォルトの名無しさん:2012/02/09(木) 17:31:17.12
宿題は宿題スレへ
625デフォルトの名無しさん:2012/02/09(木) 17:32:23.22
プログラムのビルド&実行ができてるのかすら怪しいレベルだな…
626デフォルトの名無しさん:2012/02/09(木) 17:34:59.83
ちなみに期限はいつだ?
627名無し:2012/02/09(木) 17:37:41.40
明日です
628デフォルトの名無しさん:2012/02/09(木) 17:37:54.99
ラジコンティーポット OpenGL 解答
とかでググッたら出てくるんじゃねの?とか思ったら...

ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1181109876
629デフォルトの名無しさん:2012/02/09(木) 17:39:04.07
一連の流れにワロタw
630デフォルトの名無しさん:2012/02/09(木) 17:53:26.91
っていうか床井先生のサイトじゃねーか
つうか、何にでもstatic付けるのな
そんなにインスタンス必要か
631名無し:2012/02/09(木) 18:05:47.23
おねがいします
632デフォルトの名無しさん:2012/02/09(木) 18:06:43.47
>>611
正解は>>624

以下個人的な見解
質問の仕方から見るに、あなたはこの課題に向き合うレベルに全く達してないので
仮にこれをクリアしたとしても、すぐにまた詰みます。
課題と単位は諦めて基礎からやり直すのが宜しいでしょう。
633デフォルトの名無しさん:2012/02/09(木) 18:57:28.34
急がば回れ
C/C++の基礎から学んでOpenGLに入門したらよろしい
634名無し:2012/02/09(木) 19:03:58.29
課題さえ終わればこの先プログラミングをやる機会は少なくなるので…
635デフォルトの名無しさん:2012/02/09(木) 19:07:18.02
スレチ。消えろ
636デフォルトの名無しさん:2012/02/09(木) 19:23:50.51
>>634
問題はそこではなく、これを教えたところであなたの成長を期待する事が全くできないって事です。
不良物件に時間を投資したいと思う人はいないでしょう?
637デフォルトの名無しさん:2012/02/09(木) 19:39:56.23
プログラミングやらない人に教えるのはばからしいわな
638デフォルトの名無しさん:2012/02/09(木) 20:31:34.09
そのために、金がある。
639デフォルトの名無しさん:2012/02/09(木) 20:43:56.03
宿題スレ行ったのかな?と思ってあっち覗いたらそこそこ荒れててわらた
640デフォルトの名無しさん:2012/02/09(木) 21:39:43.36
むしろ、あっちの方で先に聞いててワロタ
641デフォルトの名無しさん:2012/02/09(木) 22:51:25.21
5分でマルチポストとか…

>>638
金払うなら仕事してもいいかも。
実装で5000円、相手するのが面倒そうなので二万円、
合計は切り上げて三万円の請求てとこだナ。
642デフォルトの名無しさん:2012/02/09(木) 22:58:11.48
つうかsin,cos関数が分かれば組めるだろうに
高校生レベルじゃないか
643デフォルトの名無しさん:2012/02/09(木) 23:06:42.29
>>642
多分だけど、分からないのはそこじゃなくて、もっとプログラムの根本的な部分だと思う。
ティーポットを奥に向かって一定速度で動かせ。っていうのすら出来ないんじゃないかなぁ。
644デフォルトの名無しさん:2012/02/09(木) 23:16:44.98
>>611
まだいるか分からないけど、徹夜してでも頑張る気があるなら、SkypeかGoogleChatの
アカウントでも晒してくれれば、教えてあげてもいいよ。
ただし、段階を踏んで教えてあげることはできるけど、答えを教えるつもりは一切無いです。
645デフォルトの名無しさん:2012/02/09(木) 23:28:44.69
あっちのスレで学校の掲示板にスレ晒されてたので来ないでしょう
646644:2012/02/09(木) 23:58:21.40
そんじゃ、寝ますわん。
647デフォルトの名無しさん:2012/02/10(金) 00:06:23.39
いやん、ねないでえん
648デフォルトの名無しさん:2012/02/10(金) 18:23:17.19
c#でOpenTK使ってテクスチャを張ろうとしたんだが、
LinuxでC++でやってた通りにやった積もりなのになかなかテクスチャが張れなくてえらい苦労した。
ふと、400x400の画像を512x128の画像に替えたらあっさり。
なんてこったいw
649デフォルトの名無しさん:2012/02/10(金) 18:52:59.04
ほとんどの3Dで、テクスチャサイズは2のn乗にあわせないと不具合起こすと言うよね。
650デフォルトの名無しさん:2012/02/10(金) 19:09:53.79
古い環境だとな。
651デフォルトの名無しさん:2012/02/10(金) 20:17:36.67
テクスチャは2のn乗で作るのが常識だろ
652デフォルトの名無しさん:2012/02/10(金) 20:29:59.73
今はそんなことない
653デフォルトの名無しさん:2012/02/10(金) 21:42:40.70
そうやって一生自分の環境でしか動かないもの作ってるんだ
654デフォルトの名無しさん:2012/02/10(金) 21:48:18.69
ターゲットにする環境はそれぞれで違うわけだし、
新しい機能だって必要に応じて使えばいいだろ。

今時はiPhoneとかでも好きなサイズのテクスチャ使えるよ。
パフォーマンス的に有利かどうかは知らんけど、
そこは目的に合わせてだよね。

655デフォルトの名無しさん:2012/02/10(金) 22:43:49.84
てかエラーチェックちゃんとしようネ
656デフォルトの名無しさん:2012/02/11(土) 01:06:23.53
言い訳がましい
657デフォルトの名無しさん:2012/02/11(土) 02:01:58.21
まぁ、レンダリングの中に一つくらいは、お守りのつもりでglGetError()入れといた方が、結果的には助かるよね。
658デフォルトの名無しさん:2012/02/11(土) 03:40:10.89
つARB_debug_output
659デフォルトの名無しさん:2012/02/13(月) 13:10:05.24
gl_texture_rectangleはATI系で異常に遅かったり等あったから、
至近の2のn乗サイズのテクスチャ作って転送してUVで切り出すようにしてるわ
660デフォルトの名無しさん:2012/02/13(月) 16:00:39.70
メタセコイアで作ったモデルをC++から読んで描画する所までは出来たんだが
ここから、モデルをアニメーションさせたりするにはどうすりゃいいんだ…。

(; ゚д゚)ぼ、ボーン?ってレベルなんだが、
なんか参考になりそうな書籍などありましたらご教示お願いいたします。
661デフォルトの名無しさん:2012/02/13(月) 19:49:15.49
マルペケ
662デフォルトの名無しさん:2012/02/14(火) 00:18:15.65
>>660
行列またはクォータニオンなんかの頂点位置移動(回転)情報を時系列に並べた
モーションデータをまず用意して… それを読んで毎フレームごとに
再帰的にボーン情報に適用させ、各ボーンに所属する頂点位置を更新する感じ

だが、CPUでそれらを毎フレームごとに計算 (~ glMapBuffer で VertexBuffer 取り出して計算更新した後、glUnmapBuffer)
とかしてると、速度的に話にならないので、必要な情報渡してシェーダでスキンアニメーション処理書く感じ

具体的には浮動小数点フォーマットのテクスチャをデータバッファに使って渡したり、そこまで行列値の物量多く無いなら
普通に uniform で渡したりしつつ、 attribute で各頂点ごとに所属する(ボーン)行列インデクスとか渡して、
シェーダ側で計算して描画。 みたいな。

…そんな具体的な方法よりも、もっと手前の基本的な処理や話なら、マルペケその他の初心者向け記事をどうぞ
663デフォルトの名無しさん:2012/02/14(火) 11:18:05.39
free glutとopen glutはどちらがオススメですか?
664デフォルトの名無しさん:2012/02/14(火) 12:46:52.40
>>661->>662
ありがとう。だいたいどういったものなのかイメージする事が出来た。
手順は…

1.モデルデータにボーンを何らかのツール上でモデルに仕込む
 (ボーンは移動計算の元となる頂点・線分で、モデルの各頂点に対して関連付けられる)

2.ツール上でモーションデータを作成し、プログラム側で読む
 (モーションデータはボーンがどう移動(回転)したかという情報を時系列順に並べたもので、扱いやすいように行列/クォータニオンの形で持つ)

3.ボーンに関連付けられたモデルの頂点に対して、ボーンが移動した分だけ頂点を移動
 (ボーンは親子関係が存在するから、親が動いたら子に関連付けられた頂点も操作→再帰でやる)

4.頂点バッファに突っ込んでレンダリング
 (ただしバッファの転送を毎フレーム行うのは速度的に遅いので、GPU側に処理をお願いする方法がある)


シェーダは…すまん、まだ触った事なくてちょっと解らない。
せっかく説明してくれたのに申し訳ない。
基本的な知識もだいぶ足り無そうだから、お勧めされたサイトのマルペケで
DirectX周りの説明で基礎知識を掻い摘みつつ、実装してみるよ!

とても解りやすいアドバイス、ありがとうございました。
665662:2012/02/14(火) 13:05:11.27
>>664
多分わかってるとは思うけど、念のためフォローしておくと、

 >1.モデルデータにボーンを何らかのツール上でモデルに仕込む
 >(ボーンは移動計算の元となる頂点・線分で、モデルの各頂点に対して関連付けられる)

実際には「ボーン」って言うのは、OpenGLの世界の話じゃなくて 「私がこうしたいから用意した、自前の情報」 なので
『ボーンデータを仕込む』 と言うより、『そのつもりの情報を、用意する』 って感じ

で、俗にボーンと呼ばれる物の正体は、移動計算の元にする物ではあるけど、それは頂点や線分じゃなくて、
主には位置と回転行列(細かい事言うと、それは1要素当たりfloatが16個並ぶ行列であったり、4個並ぶクォータニオンだったり)するだけ。
自分の計算方法次第だけど、あと、そのボーン座標空間上での原点から、次の節までの距離なんかも持たす事もあるかもしれないが

で、メッシュの各頂点への関連付けってのは、自分で 「これはこれ、あれはそれ」 のように関連付け "た" 形で用意する。

考え方のもっと細かい所は、キリが無いから上で出てるサイトでもなんでも見たほうがいいが、
大枠として簡単に言うなら、「ボーンの移動量に合わせて頂点を移動させる」 と言うより、「ボーンローカル座標空間を、回転させる」 感じ
それが再帰的に連なると。 以上スレチ気味御免
666デフォルトの名無しさん:2012/02/14(火) 14:12:50.36
glDeleteTexturesの第二引数ってアドレスで渡すような形になってるけど、
値が同じなら、glGenTexturesで渡したアドレスと同じでなくてもいいんだね

int tex1 = 0;
glGenTextures(1, &tex1);

 (中略)

int tex2 = tex1;
glDeleteTextures(1, &tex2);

これで普通に解放されてて驚いた
今までクラス間でポインタのバケツリレーやってたわ・・・
667デフォルトの名無しさん:2012/02/14(火) 14:23:08.63
独り言はよそでお願いします。
668デフォルトの名無しさん:2012/02/14(火) 14:40:32.30
解らないなら素直にそう言えよ
669デフォルトの名無しさん:2012/02/14(火) 14:44:25.65
目くじら立てるほどのことか?
670デフォルトの名無しさん:2012/02/14(火) 14:48:09.23
にわかの茶々は今に始まったことじゃない。
671デフォルトの名無しさん:2012/02/14(火) 14:52:08.86
なんか知らんが氏ね
672デフォルトの名無しさん:2012/02/14(火) 15:07:25.97
>>663をそろそろ・・・
673デフォルトの名無しさん:2012/02/14(火) 15:14:23.20
独り言はよそでお願いします。
674デフォルトの名無しさん:2012/02/14(火) 15:15:35.50
freeglutしか使ったことない
675デフォルトの名無しさん:2012/02/14(火) 15:17:14.16
>>666
glGenTextures が、アドレス受け取って書き戻しをしてるから、
対応する関数の glDeleteTextures でも、同じシグネチャにしてみた… って所じゃね。多分だけど
676デフォルトの名無しさん:2012/02/14(火) 15:36:37.62
ポインタ渡しして値比較してるだけか
677デフォルトの名無しさん:2012/02/14(火) 15:38:38.73
openglutも長いこと止まってないか?
678660:2012/02/14(火) 16:05:52.47
>>665
(; ゚д゚)お、おk。
ボーン周りというのは飽くまで、ツール上でそういう扱いや見え方してるけど
実体は、アニメーションしたいから付けた付加情報とかタグとかみたいなもので
ボーンと各頂点の関連付けについても同様で、そういうデータを自分で用意するんですよという事か。

それで、ツール上で書き込んだ論理的なボーンとかその関連付けを
自分のプログラムで読み込んだとき、
計算しやすいような持ち方にして持ちましょうということか。

OpenGLというより、スキンメッシュの概論みたいな相談になってしまって申し訳ありません。
アドバイス、ありがとうございました。
679デフォルトの名無しさん:2012/02/14(火) 16:21:58.90
複数のテクスチャをまとめて一度に削除できるように配列のサイズと先頭アドレスを渡す形になってるだけじゃないの
680デフォルトの名無しさん:2012/02/14(火) 16:44:45.96
Cの配列の仕様と書き出し用ポインタがぐちゃぐちゃでややこしくて発生した悪い例
681デフォルトの名無しさん:2012/02/14(火) 22:50:34.50
え、ややこしいのか?
682デフォルトの名無しさん:2012/02/14(火) 22:52:31.68
Cの配列はこれ以上ないくらいシンプル。
683デフォルトの名無しさん:2012/02/15(水) 00:56:25.77
だからポインタと配列の比較でって言ってるじゃないか
配列単体のことは言ってないよ
684デフォルトの名無しさん:2012/02/15(水) 01:01:47.87
Cの配列はそんな高級言語的な目でみるもんじゃないでしょ。
685590:2012/02/15(水) 07:13:25.93
ポインタも配列も構造体も全てメモリ操作の構文糖衣
686デフォルトの名無しさん:2012/02/15(水) 18:56:11.21
なんだ雑魚か
全て要件が違うだろ
687デフォルトの名無しさん:2012/02/15(水) 22:14:39.27
配列=複数の同じ型の変数がメモリに順番に並んでいる物

ポインタ=変数のアドレスを格納している変数

構造体=いろいろな型の変数、ポインタ、あるいは構造体を複数、含める事のできる機構
最近では関数も含める事ができるしコンストラクタ等もあって、ほとんどクラスみたくなってる
688590:2012/02/15(水) 22:35:41.38
1バイトのデータを格納できる領域がたくさんシーケンシャルに並んだメモリというものがある

そこに、1バイト〜64バイトのひとつの枠をあてがうのが間接演算子(*)によるアクセス

1バイト〜64バイトの1種類の小枠が複数並んだ枠をあてがうのが配列によるアクセス

1バイト〜64バイトの複数種類の小枠を任意に並べた枠をあてがうのが構造体によるアクセス
689デフォルトの名無しさん:2012/02/15(水) 22:44:23.34
590は本物の阿呆だった
算術・論理演算は!&の構文糖衣理論並みの発言
690デフォルトの名無しさん:2012/02/16(木) 16:05:46.18
freeglutは64ビットのアプリにもつかえますか?
691デフォルトの名無しさん:2012/02/16(木) 18:38:45.80
64bit用のがどこかにあったと思う
692デフォルトの名無しさん:2012/02/16(木) 18:49:52.87
どこですか?
693デフォルトの名無しさん:2012/02/16(木) 19:40:00.90
どこも何も本家から辿れるとこにあるしお 寿司 ttp://files.transmissionzero.co.uk/software/development/GLUT/freeglut-MSVC.zip
694デフォルトの名無しさん:2012/02/16(木) 23:28:44.30
質問。
GLSLシェーダコードに置いた、attribute 変数に対して、CPU側、glVertexAttribPointer で頂点ごとに変化する内容を渡そうと
任意配列を対応付け、glDrawArrays …ではなく、glDrawElements で描画させようとしています。

ここで疑問。 果たして、「VertexShaderにやってくる配列要素の順序は、何順になるのか」 です。
単純に頂点配列を一直線に並べて glDrawArrays する分には、結果的に頂点の順序でやってくるだろうと思うのですが、
glDrawElements …つまり、頂点インデクスの配列で渡した場合、シェーダに来る順序は、

1.それでも実際の頂点配列の順
2.インデクス配列の順

どちらになるでしょうか…。
695デフォルトの名無しさん:2012/02/16(木) 23:36:38.94
? 頂点シェーダに来る頂点の順序とか考える意味が何処にある?
696694:2012/02/16(木) 23:39:58.29
文章だけだと伝わりづらいかもしれないので、例と補足。

A B
 □    A,B,C,D の4頂点がある四角形を描画しようとして、   
C D

単純に頂点配列で A,D,C,A,B,C と6つ並べた配列に対して、
例えば attribute を、値[0],値[1],値[2],値[3],値[4],値[5] のような配列で渡せば、
B の頂点が VertexShader に来る時、そこでは 値[4] の値が参照出来る、のはわかるのですが、
これを、
.       0, 1, 2, 3
頂点データ: A,B,C,D / 頂点インデクス: 0,3,2,0,1,3 と並べて、
attribute に、値[0],値[1],値[2],値[3],( 値[4],値[5] ) のような配列で渡した時、
VertexShader で参照出来る attribute の順番は、「頂点順」 か、または 「インデクス順」 なのか、と言う話です。
697デフォルトの名無しさん:2012/02/16(木) 23:40:20.91
むしろ全部の頂点を同時にやってクレ
698694:2012/02/16(木) 23:41:39.09
>>695
え? 頂点ごとに異なる内容を渡すのに attribute を使うので、
むしろ 「どの順序で来るのか」 がはっきりしないと、意味が無いかと
699694:2012/02/16(木) 23:44:54.66
あれもしかして俺、attribute の用途、間違えてる…??
700デフォルトの名無しさん:2012/02/16(木) 23:50:04.98
glVertexAttribPointer は頂点と一対一対応してるんだよ。
701デフォルトの名無しさん:2012/02/16(木) 23:53:39.28
順序ってのがわかりづらいな
>>696の場合、
インデックス:0,3,2,0,1,3
頂点:A,D,C,A,B,D
属性:値[0],値[3],値[2],値[0],値[1],値[2]
こうなる。
ちなみに頂点座標も属性の一つだぞ
702694:2012/02/16(木) 23:57:12.66
>>700
ありがとうございます! つまり、

頂点データ: A,B,C,D ([0]〜[3]) / 頂点インデクス: 0,3,2,0,1,3 ([0]〜[5])
とある場合、それは glDrawArrays だろうが glDrawElements だろうが、
やってくる順序は、[0]〜[3] になると言う事ですね!

つまりこの例で言えば、attribute に対応付ける配列要素は、値[0],値[1],値[2],値[3] のみで、
そして VertexShader にやってくる順序は、 値[0], 値[3], 値[2], 値[0], 値[1], 値[3] になると。

確かに言われて見れば、CustomVertex の仕様を考えてみても、それが自然に思えてきました。
ありがとうございました。
703694:2012/02/17(金) 00:00:29.53
ああリロードしてなかった。

>>701 ありがとうございます! 納得出来ました。

>ちなみに頂点座標も属性の一つだぞ

確かに、おっしゃる通りだと思います。要は 「頂点も、色も、その他も」 配列にして全て
シェーダにブチ込んでしまって、それらについて描画する、と言う状態を想像すると、
とても晴れやかです。 ありがとうございました
704デフォルトの名無しさん:2012/02/17(金) 00:16:46.40
>>694君はOpenGLの仕様書の
2.6 Primitives and Vertices
から
2.8 Vertex Arrays
まで読み直したほうがいいと思う。

GPUには複数のVertex Shaderがあって
複数の頂点が同時にVSで処理される。

OpenGLは基本的に1頂点に頂点属性が一つに纏められる。

Objファイルだと一つの三角形に位置、法線、UVに対して別々のインデックスを指定できるけど
(glBeginのような古い機能を使わない限り)OpenGLだとそれができないのだ。
705デフォルトの名無しさん:2012/02/17(金) 00:31:40.57
珍しくOpenGLスレらしい話が展開されている
706デフォルトの名無しさん:2012/02/17(金) 01:05:35.44
俺にはわからん
707デフォルトの名無しさん:2012/02/17(金) 02:44:50.46
>>706君はOpenGLの仕様書の
全 ペ ー ジ
を読んだほうがいいと思う
708デフォルトの名無しさん:2012/02/17(金) 17:18:10.93
いい仕様書をくれ
説明書みたいなブラックボックスはいらん
709デフォルトの名無しさん:2012/02/20(月) 16:06:09.25
>>693
それって64ビットアプリじゃなくて32ビットアプリで
64ビットOSでも実行できるってだけじゃないんですか?
710デフォルトの名無しさん:2012/02/20(月) 16:43:29.26
>>709
何言ってんだ?
と思ってダウンロードしてみたけど、32ビットも64ビットも両方入ってたよ
711デフォルトの名無しさん:2012/02/20(月) 17:04:23.34
>>710
mingwのほうです。
712デフォルトの名無しさん:2012/02/20(月) 17:16:36.34
なんか小出しにされると疲れるな。
みつからないなら自分でソースからビルドしたら?
713デフォルトの名無しさん:2012/02/20(月) 17:19:51.89
mingwの人はどうしてるんですか?
みんな自分でビルドしているならそうします。
714デフォルトの名無しさん:2012/02/20(月) 19:32:51.22
みんなそうしてなくても、こうしてる間に自分でビルドすればいいじゃん

後で見つかったら、それから差し替えるかどうか検討すればいい
715デフォルトの名無しさん:2012/02/21(火) 00:16:35.67
mingwなんて使ってる人いたことに驚いた
716デフォルトの名無しさん:2012/02/21(火) 00:44:21.12
いや使う事もある
717デフォルトの名無しさん:2012/02/21(火) 01:21:29.86
vcとgccの中間のどっちつかずの子ってイメージあるなあ
718デフォルトの名無しさん:2012/02/21(火) 02:02:37.87
>>717
おい。 MinGW に含まれるコンパイラって、名前通り GCC じゃないのか
719デフォルトの名無しさん:2012/02/21(火) 13:31:34.36
gccだよな
720デフォルトの名無しさん:2012/02/21(火) 22:06:53.12
んだね.クロス環境で作ってるからどうしてもwindowsだとMinGW使わざるを得ない
721デフォルトの名無しさん:2012/02/22(水) 00:22:58.79
使わざるを得ないというほどのものじゃない気がするが

実際MinGWなんて久しく触ってない
722デフォルトの名無しさん:2012/02/22(水) 01:23:03.60
Cygwin 上でコンパイル
723デフォルトの名無しさん:2012/02/22(水) 03:55:41.79
覇王翔吼拳を使わざるを得ない
724デフォルトの名無しさん:2012/02/22(水) 10:07:01.41
それなりの需要も理解できないのか
725デフォルトの名無しさん:2012/02/22(水) 12:17:23.54
Vスタ使うならDX使うだろ普通。
726デフォルトの名無しさん:2012/02/22(水) 17:44:39.14
なんか子供が新しいものを手に入れて、ドヤ顔で見せてる様を思い浮かべた
727デフォルトの名無しさん:2012/02/22(水) 20:13:13.64
いつもの単文の人だろうけど
煽るなら煽るなりにもっとクオリティを追求して欲しい
728デフォルトの名無しさん:2012/02/23(木) 09:30:24.21
mingwの64のfreeglutコンパイルしました。
普通は最適化が-O2だけど-O3にしてコンパイルしました。。
語尾に32の付いたライブラリーをリンクしたのが気になるけれど
よく分からないんで放置しておきました。
729デフォルトの名無しさん:2012/02/25(土) 08:29:44.97
静的リンクのライブラリーのとき-lopengl32というオプション等をつけたら
コンパイル通るんですけど。
libopengl32.aなんて名前のファイルをパソコンの中を検索してもひとつも
見つかりませんでした。opengl32で検索してもそれらしきファイルは見つかりませんでした。
-lopengl32は一体どういう意味なのか教えてください。
730デフォルトの名無しさん:2012/02/25(土) 09:02:39.66
探し方が悪い
731デフォルトの名無しさん:2012/02/25(土) 09:28:49.85
いやほんとに無いです。
opengl32.dllならありますが
これは関係ないでしょう。
732デフォルトの名無しさん:2012/02/25(土) 10:46:31.80
あるじゃん
733デフォルトの名無しさん:2012/02/25(土) 11:11:24.73
dllにもlib .aファイルと同じ効果があるというとは知りませんでした。
ありがとうございました。
734デフォルトの名無しさん:2012/02/25(土) 16:41:25.38
>>733
>>730>>32は適当さんだから信じちゃだめ
735デフォルトの名無しさん:2012/02/25(土) 17:24:55.16
>>733
dynamicライブラリとstaticライブラリの違いくらい勉強してからレスしましょう
736デフォルトの名無しさん:2012/02/25(土) 17:26:09.45
>>733は分かった上での皮肉だと思うんだが
動的リンクならdllからlib作れるけど静的リンクなら無理だね
本当にリンクできているんなら探し方が悪いんだろう
737デフォルトの名無しさん:2012/02/26(日) 10:58:05.58
mingwならC:\MinGW\libにlibopengl32.aが普通に入ってるぞ
738デフォルトの名無しさん:2012/02/26(日) 14:22:36.00
glutSolidCube(☆1)→glTranslate/glRotate/glScale→glutSolidCube(☆2)

(☆1)と(☆2)の各頂点をGL_LINESでむずびたいのですが
glTranslate/glRotate/glScaleする前後のglutSolidCubeの各頂点の座標を得るにはどうすればよいでしょうか
前後のどちらか片方はわかるんですが両方得るためには自前で行列演算しないとだめですか?
739デフォルトの名無しさん:2012/02/26(日) 14:33:59.56
>>738
> 前後のどちらか片方はわかる

なぜ?
740デフォルトの名無しさん:2012/02/26(日) 14:52:59.26
>>739は本当に3Dプログラミングしたことあるんでしょうか・・・
例えば☆2でglutSolidCube(1.0f);とすれば
(-0.5, -0.5, -0.5)〜(0.5, 0.5, 0.5)を対角とした立方体として描画されますよね?
ここで☆1から☆2の各頂点への線分を引きたい場合は☆1の頂点座標をどうにかして得てGL_LINESすればよいです。
逆に☆1描画時にGL_LINESする場合も☆1の座標は固定でわかりますので☆2の各頂点座標をどうにかして得れば
頂点間の線分を描画することはできます。
「このどうにかして」という部分はOpenGL抜きで考えれば自前でアフィン変換をすれば得ることは可能ですが
OpenGLレイヤで簡単に取得することが可能であればそれを知りたいんです。
741デフォルトの名無しさん:2012/02/26(日) 15:06:59.79
>>740
そういう意味でしたか

> 前後のどちらか片方はわかるんですが両方得るためには

「得る」というのが、OpenGL の何らかの関数を使って得ることができている
という意味だと解釈してました

だから、どうやって得ることができているのか、
なぜそれが両方ではできないのか不思議だったんですが、
「glutSolidCube の仕様上、値が分かる」という意味だったんですね

もの凄く不快な思いをさせてしまったような気がします
ごめんなさい

もう消えます

742 忍法帖【Lv=40,xxxPT】 :2012/02/26(日) 15:07:55.46
>>740
OpenGLの仕様書 ver2.1のChapter6を読み直せばOK
743デフォルトの名無しさん:2012/02/26(日) 15:09:21.10
gluProject と gluUnProject と glGetDoublev を使ってごにょごにょすればできないこともない
744デフォルトの名無しさん:2012/02/26(日) 15:20:10.23
>>741
すみません煽りかと思って過剰反応してしまいました…
消えないでください…
745デフォルトの名無しさん:2012/02/26(日) 15:38:14.38
>>742
Chapter6というとStateのところだと思うんですけどやはりGetFloatv等でモデルビュー行列を
取得して自分で何とかするしかないということであってますか?

>>743
プロジェクション行列までは考えなくても済むような気はします
746デフォルトの名無しさん:2012/02/26(日) 16:37:13.48
>>745
OpenGLの古典機能だけしか使わないのなら
モデルビュー行列を取得してラインの終点(☆2の頂点)を
自分で計算するのが一番楽だと思う。
glmのようなベクトル・行列ライブラリを使えばそんなに苦労はしないと思うし。
Vertex Shader使ってもいいのなら、他の方法もいろいろ考えられるけど。

ちゃんと自分の納豆できる手法を教えて欲しいのなら
どういう状況でプログラムを作っているのか具体的に書くべきだと思う。
(俗に言う5W2H)

・どうやってプログラムを作るか?
少ない手間で実装したいor実行速度優先
・どのversionのOpenGLが使えるのか?
古いグラボでも動かしたいかなど
・なんの為に開発しているのか
学校の宿題
女子校生にOpenGLを教えるための教材開発
国プロ
メガデモを作って海外のデモパーティで発表する
747デフォルトの名無しさん:2012/02/26(日) 17:07:30.27
女子高生にOpenGL教えてもらいたいです
748デフォルトの名無しさん:2012/02/26(日) 17:46:19.87
基本的にOpenGLの行列演算系命令は使わない方がいいと思う
簡単なサンプルプログラムを作れる程度の機能しかないので
真面目に書き始めたらglLoadMatrix以外は忘れて
別途ベクトル・行列演算ライブラリを使うべき
○○はできるんですか?どうやるんですか?とか悩んでる時間がもったいない
749デフォルトの名無しさん:2012/02/27(月) 18:06:05.55
>>748
ふと思ったがOpenGLの行列演算系命令って速度的にはどうなん?
750デフォルトの名無しさん:2012/02/27(月) 22:48:47.26
当然ドライバ依存だから単にどうかと言われてもわからないけど
常識的に考えればSSEくらいは使ってくれてるんじゃないかな
CPUで計算するわけだし特別速かったりはしないだろう
751デフォルトの名無しさん:2012/02/28(火) 00:50:19.28
glmで良くない?
標準のは有り得ないでしょ
752デフォルトの名無しさん:2012/02/28(火) 09:23:44.64
単純な移動拡大回転だけならGLの命令使った方が良かったりしないかな。
glLoadMatrixって逆行列の計算で遅くならんかね。
計測してないけど。
753デフォルトの名無しさん:2012/02/28(火) 12:28:38.07
なにが言いたいの?
754660:2012/02/28(火) 13:02:36.45
>>661, >>662
亀ですが…
( ´∀`)おかげさまで↓の動画のように実装できました。
本当にありがとうございました。
ttp://ichigo-up.com/cgi/up/qqq/nm48833.mp4
755デフォルトの名無しさん:2012/02/28(火) 16:09:18.13
>>734
ありがとうございます。
openglではなく、libopenglで検索したら見つかりました。
先頭文字からの検索だったみたいです。
756デフォルトの名無しさん:2012/02/28(火) 16:53:03.93
734にありがとうと言う精神が凄い。
757546:2012/02/28(火) 22:23:48.08
とりあえずBCPadでcl.exeを使うことで解決しました。
みなさんありがとうございました。
758デフォルトの名無しさん:2012/02/29(水) 00:13:46.90
>>752
glLoadMatrixを使うと逆行列が計算されて重いってことになるんだったら
行列演算系の命令だって変わらないかそれ以上に重くなるはずじゃないか?
実際のところどっちにしろ本当に必要になるまで逆行列は計算されない
シェーダでgl_NormalMatrixとか使ってれば描画時に一度計算されるだけだろうし
その場合はglLoadMatrixを使ったかglRotateしか使ってないかは関係なく逆行列を計算するだろうね
759デフォルトの名無しさん:2012/02/29(水) 00:34:33.39
>>758
でもScale,Rotate,Translateは逆行列が簡単に生成できるでしょ?計算するまでもないっていうか。
いやGLの内部で実際どんな処理がされてるかは知らんけどさ。
まぁLoadMatrixにしても、4行目が0,0,0,1なら逆行列の計算も軽いだろうけど。
760デフォルトの名無しさん:2012/02/29(水) 06:09:54.47
モデルビュー行列を直接設定できるのはglLoadMatrixだけだよな?
761デフォルトの名無しさん:2012/02/29(水) 22:00:23.90
glLoadIdentity → glMultMatrix っていう方法もないこともない
762デフォルトの名無しさん:2012/02/29(水) 22:36:54.53
直接
763デフォルトの名無しさん:2012/03/03(土) 20:59:43.51
スレチかもしれないけど助けて下さい
古いゲームやろうとしたら起動出来なくて
スレみたら古いOpenGLのサポートが打ち切られてるからじゃないか
みたいな話しが出てたんですが
古いOpenGLがサポートされていないグラボでもゲーム起動出来るようになるような
そんな魔法のおまじないはありますか?
それとも古いグラボ買ったりするしかないんでしょうか
764デフォルトの名無しさん:2012/03/03(土) 21:14:24.04
ソフトやスレの実名出せばいいのに、わざわざ回答が得られないように質問をする
馬鹿ですね
765デフォルトの名無しさん:2012/03/03(土) 21:22:41.80
スレチだと分かってるのなら、スレチでないスレを探せばいいと思うが
766デフォルトの名無しさん:2012/03/03(土) 22:32:28.53
調べた中ではここ以上に適していそうな所がなかったので・・・
手間を省くために知りたい部分だけ具体的にして出して
解決案を求めたつもりだったのですが逆効果だったようですね
あまりスレ上の常識やお約束的なものを知らないもので
スレ汚しすいませんでした
767デフォルトの名無しさん:2012/03/03(土) 22:55:40.45
> あまりスレ上の常識やお約束的なものを知らないもので

そういう事じゃなくて
少なくともゲームで遊ぶ事を語る板でスレを探すべきだろ

ここはプログラム板なんだがな
768デフォルトの名無しさん:2012/03/03(土) 22:57:14.15
OpenTKのGLControlでvsync onにすると30fpsくらいしか出ないんだけど
フォームの中だとこういうもんなのか?

GameWindowってのもあるみたいだけど
60fps出したいならこっち使えってことかね
769デフォルトの名無しさん:2012/03/04(日) 05:11:11.10
それにしても酷い民度だな
さすがOpenGL
770デフォルトの名無しさん:2012/03/04(日) 13:23:45.61
>>768
vsyncの意味理解してないだろ
771デフォルトの名無しさん:2012/03/04(日) 13:28:40.14
>>766見て、このコピペ思い出したわw

女『車のエンジンがかからないの…』
男『あらら?バッテリーかな?ライトは点く?』
女『昨日まではちゃんと動いてたのに。なんでいきなり動かなくなっちゃうんだろう。』
男『トラブルって怖いよね。で、バッテリーかどうか知りたいんだけどライトは点く?』
女『今日は○○まで行かなきゃならないから車使えないと困るのに』
男『それは困ったね。どう?ライトは点く?』
女『前に乗ってた車はこんな事無かったのに。こんなのに買い替えなきゃよかった。』
男『…ライトは点く?点かない?』
女『○時に約束だからまだ時間あるけどこのままじゃ困る。』
男『そうだね。で、ライトはどうかな?点くかな?』
女『え?ごめんよく聞こえなかった』
男『あ、えーと、、ライトは点くかな?』
女『何で?』
男『あ、えーと、エンジン掛からないんだよね?バッテリーがあがってるかも知れないから』
女『何の?』
男『え?』
女『ん?』
男『車のバッテリーがあがってるかどうか知りたいから、ライト点けてみてくれないかな?』
女『別にいいけど。でもバッテリーあがってたらライト点かないよね?』
男『いや、だから。それを知りたいからライト点けてみて欲しいんだけど。』
女『もしかしてちょっと怒ってる?』
男『大丈夫だから。怒ってないから。大丈夫、大丈夫だから』
女『何が大丈夫なの?』
男『バッテリーの話だったよね?』
女『車でしょ?』
男『ああそう車の話だった』
女『ちゃんと聞いてる?』
男『要するに車のエンジンが掛からないんでしょ?』
女『なんでそんな偉そうなの?』
772デフォルトの名無しさん:2012/03/04(日) 15:14:06.50
>>771
いやぁ、何度見てもイラっとするコピペだw
論理的な思考ができる女とじゃないと結婚はできん
773デフォルトの名無しさん:2012/03/04(日) 15:16:46.22
何で?
774デフォルトの名無しさん:2012/03/04(日) 15:18:16.62
少しずつ長くなってるようなw
775デフォルトの名無しさん:2012/03/04(日) 15:20:20.52
>>770
PC再起動したら60fps出るようになったわ
776デフォルトの名無しさん:2012/03/04(日) 15:21:49.22
>>773
自分の要求を遠回しに言って察してもらおうとする
典型的な女思考の女はめんどくさくて嫌いだから
777デフォルトの名無しさん:2012/03/04(日) 15:25:52.34
>>773
論理的思考ができないやつは、男、女に関係なく話にならんだろうw
778デフォルトの名無しさん:2012/03/04(日) 15:29:29.41
もしかしてちょっと怒ってる?
779デフォルトの名無しさん:2012/03/04(日) 15:33:32.21
>>778
うんwww
780デフォルトの名無しさん:2012/03/04(日) 15:34:01.33
なんでそんな偉そうなの?
781デフォルトの名無しさん:2012/03/04(日) 15:36:15.07
>>780
どこが?w
むしろ逆にききたいねw
782デフォルトの名無しさん:2012/03/04(日) 15:39:33.93
喧嘩が成立するのは仲のいい証拠
783デフォルトの名無しさん:2012/03/04(日) 15:42:23.39
何の?
784デフォルトの名無しさん:2012/03/04(日) 16:15:31.14
え?
785デフォルトの名無しさん:2012/03/04(日) 16:17:01.37
さて、ここはどこの板で、何のスレだ?
786デフォルトの名無しさん:2012/03/04(日) 16:25:59.01
ごはんなら昨日食べたでしょう?
787デフォルトの名無しさん:2012/03/04(日) 19:13:09.93
OpenGLって、C++以外で、C#やJava、Objective-Cでも動かすのは珍しくないんでしょうか?
C#はXNAがありますし、JavaやObjective-CもAndroidやMacがありますよね?
788デフォルトの名無しさん:2012/03/04(日) 19:42:15.03
何言ってんだお前
789デフォルトの名無しさん:2012/03/04(日) 21:56:42.04
>>787
言語とミドルウェアとハードウェアぐらいの区別は
出来るようになった方がいいんじゃないかと思った。
790デフォルトの名無しさん:2012/03/05(月) 11:05:45.25
レイヤーが違いすぎる
791デフォルトの名無しさん:2012/03/05(月) 19:36:10.62
どう見ても>>771と同じ状況とは思えないんだが
質問したらなんか煽られて答えて貰えそうにないし
大人な対応してさようならって感じ
まぁ、正しい判断だったと思うわ
792デフォルトの名無しさん:2012/03/05(月) 19:37:59.67
とっくに終わってる話題を掘り返すなよ
793デフォルトの名無しさん:2012/03/09(金) 22:02:59.66
opengl使ったゲームのソースくだしあーん
794デフォルトの名無しさん:2012/03/09(金) 23:46:51.73
795デフォルトの名無しさん:2012/03/09(金) 23:48:24.92
796デフォルトの名無しさん:2012/03/10(土) 00:56:58.03
わーいありがとー
797デフォルトの名無しさん:2012/03/11(日) 18:49:17.61
いいってことよ
798デフォルトの名無しさん:2012/03/12(月) 20:15:54.47
64bitのマシンで動かすと、
「DLL 'opengl32.dll' の 'glGenBuffers' というエントリ ポイントが見つかりません。」
というエラーが出るんですが、どうすればいいのでしょうか。
32bitだと正常に動きます。
GLSharpを使ってC#で開発しています。
799デフォルトの名無しさん:2012/03/12(月) 20:20:49.03
GLSharpは知らないけど、64bit版のOSでも32bitのDLLを使うなら、
プラットフォームをAny CPUとかじゃなくてx86にする。
たぶん。
800デフォルトの名無しさん:2012/03/12(月) 20:21:08.97
64ビットのexeで32ビット版のDLLを読み込もうとしてたりしない?
64ビット版のDLLを使うか、exeのビルドターゲットを32ビット (x86) にしないといけない
801デフォルトの名無しさん:2012/03/12(月) 20:40:54.07
>>799,800
レスありがとうございます。
ビルドターゲットをx64にしていました。
x86にしようと思います。
802デフォルトの名無しさん:2012/03/12(月) 23:54:44.88
glGenBuffersがopengl32.dllにね...
GLSharpがx86なんじゃないの
803デフォルトの名無しさん:2012/03/13(火) 11:27:51.96
VisualStudio2010からはこの手のトラブルを避けるために
デフォルトがx86になってるんだがな
804デフォルトの名無しさん:2012/03/16(金) 22:27:54.77
Openゲロ
805デフォルトの名無しさん:2012/03/16(金) 23:27:26.12
黙れ
806デフォルトの名無しさん:2012/03/17(土) 00:57:58.69
了解です。
807デフォルトの名無しさん:2012/03/17(土) 01:42:04.34
次から発言に気をつけてくれればいいよ
808デフォルトの名無しさん:2012/03/17(土) 05:19:34.55
あ?
809デフォルトの名無しさん:2012/03/17(土) 17:00:20.50
れ?
810デフォルトの名無しさん:2012/03/17(土) 17:07:41.59
こ?
811デフォルトの名無しさん:2012/03/17(土) 17:45:38.74
黙れ
812デフォルトの名無しさん:2012/03/17(土) 17:59:06.47
承知しました。
813デフォルトの名無しさん:2012/03/17(土) 17:59:58.58
だ?
814デフォルトの名無しさん:2012/03/18(日) 03:02:18.37
普通に動いてると思ったプログラムが別PCに持ってくと
メモリリークしまくってて笑え・・・ない・・・
デバイス関連の注意点のまとめとか無いもんかね
815デフォルトの名無しさん:2012/03/18(日) 09:59:46.00
>>814
お、ちょっとどういうケースなのか詳しく
816デフォルトの名無しさん:2012/03/18(日) 10:20:13.93
どうせ開発ンヴィディアPC、動作不良レイディォンPCってとこだろ
817デフォルトの名無しさん:2012/03/18(日) 10:29:41.32
メモリを沢山つんでて多少リークしても普通に動いてるPCから、
ちょっとでもリークすると笑えない別PCに持ってっただけとか
818814:2012/03/18(日) 11:15:46.23
>>815
メインのRadeonや知り合いのGeforceでは問題無かったけど
Corei5積んだサブPCのIntelHDだとリークしちゃうみたいで
エラーチェックには引っかかってないようだったけど
とりあえずシェーダ使わないようにしたらリーク解消されたってとこ
具体的なところはよく分からない
819デフォルトの名無しさん:2012/03/18(日) 12:12:51.62
>>818
よく分かってないのは怖いな
なんか分かったら教えてくれ
820デフォルトの名無しさん:2012/03/18(日) 23:52:33.31
Radeon HD搭載のノートでは問題なく動いてるのを
5年前のIntel GMA950なノートに持っていくとテクスチャの色がおかしくなった
gl
821デフォルトの名無しさん:2012/03/18(日) 23:55:45.47
glGetErrorでもエラーはないみたいなんだが
S3TCテクスチャ圧縮の強制をONにしたら正しく動作するようになった
ttp://www.intel.com/jp/support/graphics/sb/cs-030506.htm

メモリが足りなかったんだろうな
そんな大量にテクスチャを使ってるわけじゃないので納得できんが
822デフォルトの名無しさん:2012/03/19(月) 01:42:41.09
メモリーリークしてたってのはどういう状態だったの?
メインメモリーがリークしてたんだよね?
823デフォルトの名無しさん:2012/03/21(水) 13:59:23.14
不動小数点で曖昧なところにじゃなくて画面の座標の右から何番目のピクセルに点を打てとか
やりたいんだけどOpenGLじゃそんなことできませんよね?
824デフォルトの名無しさん:2012/03/21(水) 14:06:11.56
glBitmap とかあるぞ。骨董品だけど
825デフォルトの名無しさん:2012/03/21(水) 14:37:34.53
ちゃんと計算すれば普通にできる
826デフォルトの名無しさん:2012/03/21(水) 15:44:34.72
>>823
不動小数点なんて言う非標準の型でなく、きちんと浮動小数点数の型を使えばいいと思うの。
827デフォルトの名無しさん:2012/03/21(水) 16:14:14.15
>>823
できるよ
828デフォルトの名無しさん:2012/03/21(水) 21:15:18.82
次に必要になる数値は 0.375 だ。
829デフォルトの名無しさん:2012/03/21(水) 21:37:27.78
>>828
エスパーわろた
830デフォルトの名無しさん:2012/03/21(水) 22:04:19.10
全スクリーンを覆うポリゴンをレンダリングして
フラグメントシェーダで今のフラグメントのスクリーン位置を取得して
目的の位置ではなかったらdiscard;って書けばOK&OK
831デフォルトの名無しさん:2012/03/21(水) 23:31:52.26
>>828
w
832デフォルトの名無しさん:2012/03/22(木) 00:04:49.46
>>828
glTranslatef (0.375, 0.375, 0.);

これだな。
833デフォルトの名無しさん:2012/03/22(木) 09:01:56.17
何故0.375なのかくやしく。
834デフォルトの名無しさん:2012/03/22(木) 09:08:25.99
くっそうくっそう!
きりのいい数値だと微妙にズレる!
0.5 でもやっぱ駄目だ! 畜生!
その半分 0.25 引いてみるか? 微妙に駄目じゃん!
そのまた半分 0.125 足してみる!
ずれないぜ! やったよカーチャン!
って感じなのかね?

ところで Direct3D だと 0.5 なの? これ
835デフォルトの名無しさん:2012/03/22(木) 10:02:34.15
>>834
ぐぐったらこんなMSDNが
http://msdn.microsoft.com/en-us/library/windows/desktop/bb172357(v=vs.85).aspx
836デフォルトの名無しさん:2012/03/22(木) 11:31:41.98
OpenGL ESとEGLを使ってマルチスレッドレンダリングを行いたいのですが、
wglでいうwglShareListsのようなテスクチャの継承は、
どうやって行えば良いのでしょうか。
837デフォルトの名無しさん:2012/03/22(木) 23:08:45.72
なんだDXも同じか。
838デフォルトの名無しさん:2012/03/22(木) 23:11:04.96
>>836
eglCreateContextの第3引数に共有したいContextをぶっ込むとか
839デフォルトの名無しさん:2012/03/23(金) 01:39:20.73
ゲフォとらでおん!のGLの性能差ひどいな。
ttp://news.mynavi.jp/special/2012/kepler/004.html
840デフォルトの名無しさん:2012/03/23(金) 11:48:46.31
>>838
出来ました! こんな単純な方法だったんですね…。
教えて頂き、ありがとうございました。
841デフォルトの名無しさん:2012/03/23(金) 21:34:02.49
GTX 680 おっせーな
互換性の GeForce とスピードの Radeon か
842デフォルトの名無しさん:2012/03/24(土) 04:35:10.43
GTX 680 おっせーなと言われたら、
Geforce 8800GT で鼻歌歌ってポリポリしている俺は
843デフォルトの名無しさん:2012/03/24(土) 06:25:31.60
>>842
ついこの前まで俺もそんな感じだったわ
ボードがまるコゲになって交換したけど(´;ω;`)
844デフォルトの名無しさん:2012/03/24(土) 10:07:06.33
>>842
だっせーwww
俺でさえ9600GTだぜw
845デフォルトの名無しさん:2012/03/24(土) 10:16:34.43
いや、8800GT > 9600GTだから。つーか、8800GTのセカンドソースが9800GTだから。
846デフォルトの名無しさん:2012/03/24(土) 10:19:05.88
Wildcat3使いがうらやましそうにそちらを見ている!
847デフォルトの名無しさん:2012/03/24(土) 10:37:52.77
>> 8800GT > 9600GT
え・・・そうなん・・・・orz
848デフォルトの名無しさん:2012/03/24(土) 10:50:42.96
intel915で十分だ
849デフォルトの名無しさん:2012/03/24(土) 16:17:14.05
ttp://news.mynavi.jp/photo/special/2012/kepler/images/graph20l.gif

ここまで差があると8800GTとあまりかわらないんじゃね?
850デフォルトの名無しさん:2012/03/24(土) 23:36:59.83
難しいなOpenGL
学習に時間かかりそう
851デフォルトの名無しさん:2012/03/25(日) 00:30:35.35
OpenGL以前の算数基礎学習が足りないと予想
852デフォルトの名無しさん:2012/03/25(日) 12:53:31.84
OpenGL ES 2.0で座標aから座標bまでcフレームで移動するとかってできますか?
今は(b-a)/c*現在のフレーム数で移動していますがわざわざ変数を使わないでやりたいです
853デフォルトの名無しさん:2012/03/25(日) 13:00:02.24
そういうのはOpenGLの管轄じゃないです
854デフォルトの名無しさん:2012/03/25(日) 14:10:46.04
vertex shader を使えばできなくはないけど、それが普通かどうかは知らない。
855デフォルトの名無しさん:2012/03/25(日) 14:13:24.40
OpenGLでbitmapを書き換える処理はありますか?
drawbitmapに該当するものす。
命令名のヒント下さい。
856デフォルトの名無しさん:2012/03/25(日) 14:24:44.45

どういう事がしたいのかな?
857デフォルトの名無しさん:2012/03/25(日) 14:30:12.45
drawbitmapが遅かったのでOpenGLで画面の描画だけでなく
そのbitmapの変更も高速にできないものかと思ったので。
858デフォルトの名無しさん:2012/03/25(日) 15:00:07.45
フレームバッファオブジェクト的なもの?
859デフォルトの名無しさん:2012/03/25(日) 15:03:49.40
ええと多分そうです。
裏画面の書き換え(ビットマップイメージのコピー)です。
860デフォルトの名無しさん:2012/03/25(日) 16:24:08.30
androidスレで聞けよ
861デフォルトの名無しさん:2012/03/25(日) 22:05:26.42
画像Aと画像Bをブレンドさせて
画像Aの画像の色、alphaで画像Bの形にするにはどうしたらいいでしょうか
イメージとしてはこんな感じですhttp://i.imgur.com/Ng7dd.png
862デフォルトの名無しさん:2012/03/25(日) 22:30:05.20
シェーダにテクスチャを2つ放り込んで、フラグメントシェーダで計算して出力
863デフォルトの名無しさん:2012/03/26(月) 11:14:35.42
>>861
( ゚д゚)イメージのURL先が403Forbiddenになってて見れないぞ?
864デフォルトの名無しさん:2012/03/26(月) 11:39:14.68
>>863
そんなことない
865デフォルトの名無しさん:2012/03/26(月) 12:00:21.63
□+a=a
866デフォルトの名無しさん:2012/03/26(月) 18:12:58.04
>>861は昔だったらまずステンシルって答えが出てたろうね
867デフォルトの名無しさん:2012/03/26(月) 19:42:37.60
>>861
画像Aと画像Bをブレンドさせたいのか
画像AのRGBと画像Aのalphaで画像Bを表示させたいのか

なんにせよシェーダー使えば簡単
868デフォルトの名無しさん:2012/03/26(月) 22:47:31.42
何かあればすぐシェーダーシェーダーか。
昔のプログラマーなら AND と XOR 使うだろ。
抜き色って言うんだよ。
869デフォルトの名無しさん:2012/03/26(月) 22:57:29.77
透過マスク処理もできんのか?
スプライトも知らんのだろうな
870861:2012/03/26(月) 23:04:45.86
皆さんありがとうございます

ググりましたが
簡単にはできないんですね

Blendfancみたいな感じで出来るかと思ってました
871デフォルトの名無しさん:2012/03/26(月) 23:05:53.37
昔のプログラマが AND と XOR 使ってたから、
今のプログラマもシェーダー使わず AND と XOR でやれという意味?

って言うか、昔のプログラマが AND と XOR 使ってたことと、
今シェーダーを勧めることに何か関係があるの?

昔のプログラマーなら・・・ってのは、どうでもよくないか?
872861:2012/03/26(月) 23:06:08.57
>>867
後者です
873デフォルトの名無しさん:2012/03/26(月) 23:06:47.87
>>868
だからそのシェーダの中で、AND/XOR すればいいだろっての
シェーダって、なんだと思ってるんだよw
874デフォルトの名無しさん:2012/03/26(月) 23:08:07.05
>>871
今ならシェーダー使った方が速い
ま、そんな時代もあったんだよ
875デフォルトの名無しさん:2012/03/26(月) 23:08:23.56
初歩の質問なんですが
OpenGLは定まったテクスチャを描くのはいいようですが
自由なbitmapを描く時は毎回 for で数値化してテクスチャ作ってから描画するので
かえって時間がかかるということになるんでしょうか?
876デフォルトの名無しさん:2012/03/26(月) 23:12:59.63
for で数値化ってなんじゃい?
877デフォルトの名無しさん:2012/03/26(月) 23:13:20.88
CPUで計算せずにシェーダに計算までさせて描かせるという手もある
878デフォルトの名無しさん:2012/03/26(月) 23:15:14.30
なぜBITMAPに拘るのかわからんな。
テクスチャそのものに直接オフスクリーンレンダリングすればよし。
879デフォルトの名無しさん:2012/03/26(月) 23:19:21.72
>>876
表示のビットマップからテクスチャ生成するソースでこういうのを見たので

public Texture makeTexture(Bitmap bitmap) {

//画像データの生成
ByteBuffer bb=ByteBuffer.allocateDirect(size*size*4);
bb.order(ByteOrder.BIG_ENDIAN);
IntBuffer ib=bb.asIntBuffer();
for (int y=result.getHeight()-1;y>-1;y--) {
for (int x=0;x<result.getWidth();x++) {
int pix=result.getPixel(x,result.getHeight()-y-1);
int alpha=((pix>>24)&0xFF);
int red =((pix>>16)&0xFF);
int green=((pix>>8)&0xFF);
int blue =((pix)&0xFF);
ib.put((red<<24)+(green<<16)+(blue<<8)+alpha);
}
}


>>878
テクスチャそのものに直接描画できるわけですか。
880デフォルトの名無しさん:2012/03/26(月) 23:24:29.91
>>875
エスパーすると、
「画像ファイルなどをロードして、それをテクスチャを使うのはいいようですが(?)、
メモリ空間にビットマップ領域を確保して、そこに計算で描き込んだ内容をテクスチャとして利用すると
かえって時間がかかるという事になるんでしょうか?」

って聞いてる予感がするが、それ、OpenGL 固有の話じゃない。

>>878
多分、BITMAPと言う画像フォーマットの話じゃなくて、
メモリ上の画像領域(=ビットマップ)の事だと思う。 ※用語がわからなくても、Win32API などで、DIB や DDB 扱った事あればわかると思う
881デフォルトの名無しさん:2012/03/26(月) 23:25:35.74
>>879
まずそもそも、コンピュータ上で、画像ってどうそういうデータ、どう扱われる物かは、
わかってるよな?
882デフォルトの名無しさん:2012/03/26(月) 23:26:51.39
メモリ上のデータならポインタ使って変更すればよろし。
883デフォルトの名無しさん:2012/03/26(月) 23:31:10.51
>>880
おおよそそうです。

surfaceviewと自由な内容のbitmap使ってやってたことをOpenGLに置き換えたいのですが
>>879のソース見てかえって遅くなると思ったもので。
884デフォルトの名無しさん:2012/03/26(月) 23:33:55.61
>OpenGLは定まったテクスチャを描くのはいいようですが
>自由なbitmapを描く時は毎回 for で数値化してテクスチャ作ってから描画するので

>for で数値化してテクスチャ作って
この作ったテクスチャが
>定まったテクスチャ
だと思うが?
なんでテクスチャを毎回作り直す必要があるんだ?
885デフォルトの名無しさん:2012/03/26(月) 23:35:56.07
>>884
bitmapの内容が毎フレーム変わるからです。
2Dで使ってます。
886デフォルトの名無しさん:2012/03/26(月) 23:41:55.46
2DもOpenGLで描ける
解決
887デフォルトの名無しさん:2012/03/26(月) 23:46:06.90
>>886
bitmapもということでしょうか?
そてれともテクスチャの内容を(別の描画方法で)自由にできるということですか?
888デフォルトの名無しさん:2012/03/26(月) 23:56:22.89
bitmapなんか使わずに、最初から最後まですべてをOpenGLで描くんだ
何か問題ある?
889デフォルトの名無しさん:2012/03/27(火) 00:00:31.07
リアルタイムでテクスチャにレンダリングして
その結果を使って最終的な絵を出すのは割と一般的な手法だと思うんだが
890デフォルトの名無しさん:2012/03/27(火) 00:07:37.03
ググって2.0以上でないとできないともでてきましたが
テクスチャにレンダリング方法を調べてみます。
どうもありがとうございます。
891デフォルトの名無しさん:2012/03/27(火) 00:12:42.71
>>887
フラグメントシェーダで描けばよろし
892デフォルトの名無しさん:2012/03/27(火) 00:17:08.32
>>891
どうも、調べてみます。
893デフォルトの名無しさん:2012/03/27(火) 00:18:45.88
>>890
ちなみに、根本的な話だけど、例え OpenGL 経由で描画しようがなんだろうが、
自由に生成する内容をテクスチャに書くとしても、結局同じような処理するだけだから、
そこを勘違いしないように

例えば DIBの 先頭ピクセルからループで処理するのと、
テクスチャの 先頭ピクセルからループで処理するのと、
同じような事をしたいなら、結局経由が違うだけで同じ処理するよ。考えてみればわかる事だが
そして、何かのライブラリで簡単に1行で書けるとしても、裏では同じ事してるので、
それはそういう物。 そこだけ曖昧に、勘違いしないように


894デフォルトの名無しさん:2012/03/27(火) 00:20:37.48
あと、>>879 のコード見て気づいたけど、C/C++ じゃなくて Javaで行おうとしてるとして、
JavaやC#でそのレイヤの処理は、元々向いてないので遅くなっても当たり前
895デフォルトの名無しさん:2012/03/27(火) 01:00:30.70
>>872
なら単に1枚のテクスチャをアルファ反転で描画したいってことか
黒いところは描画して白い部分は透明
glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
896デフォルトの名無しさん:2012/03/27(火) 07:20:31.45
シェーダー使えた方が色々応用が利いて良い
せっかく良い題材なんだから、練習がてらシェーダーを学ぶ事を勧める
897デフォルトの名無しさん:2012/03/27(火) 07:38:48.10
シェーダーってちょっと古いPCだと動かなくなるみたいなイメージあるんですけどどうなんですか?
898デフォルトの名無しさん:2012/03/27(火) 07:49:17.57
ちょっと古い程度なら動く

望む処理速度が出るかどうかは、シェーダーの組み方と、
どのくらいを望んでいるかに依るから何とも言えない


それと、イメージでものを語るな
実際に自分で動かしてみるか、実際に動かした事例を見なさい
899デフォルトの名無しさん:2012/03/27(火) 08:21:47.85
シェーダー使うまでもない今回の例のようなケースが多くて
未だにシェーダーを使ったことがない私が通りますよ。
900デフォルトの名無しさん:2012/03/27(火) 08:54:36.95
2Dなら固定機能で十分な場合が殆どかもなぁ。
シェーダーでないと書けない処理ってでてこんな…。
固定機能一掃しちゃったDirect3Dならともかく、OpenGLは残したわけだし。
まぁ暗号みたいなステート操作まみれのコード書くのは嫌だから、俺はシェーダー使うけど…。
901デフォルトの名無しさん:2012/03/27(火) 10:36:05.54
むしろ2Dこそシェーダが楽
902デフォルトの名無しさん:2012/03/27(火) 14:24:38.21
2Dでのシェーダの話題のようなので、以前書いたサンプルを貼ってみる http://kuramo.ch/webgl/videoeffects/
WebGLだけど、シェーダはGLでもESでもだいたいそのまま動くんじゃないかしら。ソース汚いですけど。

あと、こんなのも
http://sourceforge.jp/projects/javie/devel/
903デフォルトの名無しさん:2012/03/27(火) 22:54:13.72
よく読まずにリンク先見てMMD on WebGL完成したのか! と思ったらそうじゃなかった
ttp://edv.sakura.ne.jp/mmd/20111107/
904デフォルトの名無しさん:2012/03/28(水) 00:20:15.22
なんで最近3Dやりたがるプログラミング初心者多いんだ・・・
段階的に知識養うってことを知らなすぎる・・・・
905デフォルトの名無しさん:2012/03/28(水) 00:51:24.73
いいんじゃないの。なんか3Dカッコイイ!てのも原動力になるよ。
906デフォルトの名無しさん:2012/03/28(水) 00:53:42.55
今月の日経ソフトに入門的なのが載ってるな
907デフォルトの名無しさん:2012/03/28(水) 00:57:04.43
簡単に絵が出て動いて楽しいからプログラム入門にちょうどいいよ
908デフォルトの名無しさん:2012/03/28(水) 01:40:25.85
マジレスするとSurfaceViewのが簡単だし入門にちょうどいい
909デフォルトの名無しさん:2012/03/28(水) 01:48:59.54
processingでも良い
910デフォルトの名無しさん:2012/03/28(水) 02:05:45.95
原動力になるならいいが、コピペで済まして、すべて他人任せなヤツも多い
911デフォルトの名無しさん:2012/03/28(水) 02:08:47.64
部品の再利用を否定するとかソフトウェア工学完全否定ですか
912デフォルトの名無しさん:2012/03/28(水) 02:42:10.68
部品の再利用じゃなくて、怠惰の方
その区別を出来ないか、言い訳に利用する人が多いってこと
913デフォルトの名無しさん:2012/03/28(水) 02:59:57.14
遊びでやっててそんなに努力とかする気ないよみたいな人もいるだろうし、
気に食わなかったらスルーしたり、からかったりすればいいんじゃない
914デフォルトの名無しさん:2012/03/28(水) 09:30:22.82
車輪の再発明やジェネリックプログラミングの話と
不思議仕様を含んだブラックボックススパゲッティの話を
一緒にするのはやめようぜ
915デフォルトの名無しさん:2012/03/28(水) 13:18:31.13
OpenGLは遊びじゃねえんだよ!!!!!1111
916デフォルトの名無しさん:2012/03/28(水) 14:46:52.27
OPEN GL, IT'S SERIOUS BUSINESS!
917デフォルトの名無しさん:2012/03/28(水) 19:09:54.18
なんだよこの流れww
918デフォルトの名無しさん:2012/03/28(水) 20:56:29.49
>>915
遊びにも使えるよ
919デフォルトの名無しさん:2012/03/28(水) 23:15:51.93
ここまで俺の自演
920デフォルトの名無しさん:2012/03/28(水) 23:16:25.56
もうそうおちゅっちゅ
質問。環境はWindowsXPSP3 と Windows7HomeSP1

OpenGL でオフスクリーンレンダリングを行う要件があるんですが、動作コストの面で、
win32のDCを頼りにする wgl系の手法(wglCreateContext&wglMakeCurrent)と、
OpenGL オフィシャル(拡張)である、framebuffer/renderbuffer を用いる方法と、どちらが手続き内でコストが低いでしょうか

もしも、ライブラリ手続きの面でそれほどコスト差が無く、顕著に現れるのはそれ以外の自前コードだ、と言う場合
出来ればオフィシャルで行きたいと思っています。よろしくお願いします。

>>922
それはだから framebuffer の例です
普通にFBOでいいんじゃね。
どっちかが使い物にならないくらい遅いとかは聞いたこと無いが
気になるなら両方作って比較してみたらいいかと。
そのレンダリングした結果をどうしたいかによるんじゃね?
動作コスト云々の前に、まず目的によって使い分けが生じると思うんだけど。
GeForce GTX 590 より 580 の方が良い結果が出て
Radeon HD 6990 より 6950 の方が良い結果が出る世の中。
GPUによって、得意、不得意な処理があるんじゃねーの?
デュアルGPUはクロック下げてるからマルチGPU非対応の旧ソフトだとそりゃ悪いよ
OpenGL ES2.0はglPushAttrib, glPushClientAttribないみたいなんだけど手で一個一個やれって?
>>929
無印OpenGLでも3.0以降コアから外された。(ARB_compatibilityで残ってはいるけど)
glPushAttribの方は高価だから元々避けるべきとされてる。
なんで、どのみちステートマネージャは作らなきゃいけない。
なんかえらい難しいですね。
これ考えた人バカですか?
オフスクリーンレンダリングでテクスチャの一部から先の一部へコピーする方法ありますか?
それを解説してあるいいHPないでしょうか?
先の一部って何だ?コピー先の事か?
glTexCoord2でコピー元の座標を指定して後は普通にコピー先テクスチャに
オフスクリーンレンダリングすればいいだけだろ
>>930
ありがとです
そうなんですか はふぅ・・
>>933
できるんですね。わかりました調べてみます。
>>931
えらく難しいと思ってる自分は賢いのかいw
>>836でマルチスレッドでのレンダリングを質問した物なのですが、
生成したスレッドの最初に eglCreateContext の第3引数に
共有したいContextを入れてeglMakeCurrentしたのです。
これがGoogleのangleprojectではちゃんとレンダリングされたのですが、
QualcommのAdreno SDKやARMのOpenGL ES Emulatorでは上手くいきませんでした。
そもそもangleprojectで確認してたのが悪かったのですが、
レンダリング出来るようにするにはどうしたらいいでしょうか。
>>937
一般的にはその方法で問題ないはず。
実装毎に上手くいかない場合にどうすればいいかはメーカに聞くしかないんじゃないかな。
あとエミュレータは細かいところまで実装されてない場合があるのであまり信用せずに実機で確認してくれ。
おお、Open GLスレを発見。
「実例で学ぶゲーム3D数学」
OPEN GLで卒論制作するつもりで、数学的なところを
勉強したいんですけど、上の本わかりやすいですか?
結構数学苦手なので、困ってるんですけど…
何か他にもよさげな本があれば紹介お願いします。
そこそこわかりやすかったと記憶している。
授業でやってた頃はなんに使うのかわからなかったけど
高校〜大学の数学物理力学等の教科書は結構役に立った
ここで質問スべきかどうか迷ったけど幾つかアドバイスくだしあ
Windows Vista 32bit、ATI Radeon HD 4850でGLSL のビット演算はできた
同じPCでWindows 7 64bitをデュアルブートしてドライバを確認するとHD 4800になっていて
ビット演算がサポートされていない模様
(シェーダのコンパイルは通るが入力に関係なく0が返ってきている)
ラデオンのHDバージョンがオペレーティングシステムによって変わって見えるものなの?
GLSLで確実にビット演算をさせる方法はある?
ちなみに後者は#extension GL_EXT_gpu_shader4 : enableも試してみたが駄目
ドライバ更新してないんじゃないの?
一応更新したつもりだったがあやふやだったからそうなのかも
PC触れるようになったら確認してみます
>>940
>>941

939です。
レスありがとうです。関係している本買います。
数学関係は、手取り足取り掛け算から教えてくれるぐらいの物を、わかりやすいと思う人もいれば、
そんな馬鹿冗長な物ウザいだけだと、公式と証明羅列して、そこに補足入るくらいがシンプルでわかりやすい、って人もいるので
「何がわかりやすいか」 なんて、自分で読んでみないで他人に感想聞いた所で、正解なんてわからない
いや普通の話。
947942:2012/04/08(日) 14:52:29.80
942だけど、ビット演算は普通に動いていて、全く別の所で躓いていました、失礼失礼・・・
そうだと思ってました
>>938
お答えくださり、ありがとうございます。
なるほど、間違ってはいないはずですか。
まずはエミュでGL環境を整えてから実機で試そうとしてたので、
実際に実機で確認出来るようになったらまた色々と探ってみます。
GLSLで二つの3Dモデルに対して別々のシェーダーを適用したいのですが、
別々のシェーダーと言っても一部共通する部分があります

イメージとしてはこんな感じです(フラグメントシェーダー)
モデルX : 計算a + 計算b
モデルY : 計算a’ + 計算b

計算bはどちらのシェーダーにも共通する計算なのですが、
この様な場合でも二つのシェーダーのソースのどちらにも
同じ計算bを書く必要があるのでしょうか
YES
ということは、VRAM上に全く同じ命令データが
複数置かれることも普通にあり得るということですか

非常に無駄な感じがしますが、仕方ないのですね

これは仕方ないとして、せめてシェーダーのソースコード上では、
このようなコピペを回避する手段は何か無いのでしょうか
機能毎にモジュールに分けておいたソースをロードしてコンパイルし、
リンカがそれをひとつのシェーダーにリンクするとか
コーディングルールをがちがちに決めておいて文字列操作で何とかすれば良いんじゃね
NO
>>954
私の >>952 へのレスですよね

VRAM上に全く同じ命令データが複数置かれることはないという意味でしょうか

それとも、コピペを回避する手段は無いといういみでしょうか

あるいは両方でしょうか
OpenGL3以前のGLSLではCPUでの関数呼び出しみたいな事ができないので
関数は全部展開されていた。
OpenGL4だと関数呼び出しができるらしいけど詳しくは知らん
Direct3Dは9の頃、静的リンカあったけど、最適化阻害する割にメリットがコード分割できるってだけだったから、全く使われず10であっさり消えたな。
11で動的リンカっぽい機能ついたけど使われてんだろか…。
マァ同じ命令データが複数置かれるといっても、画像に比べたら無いに等しいし、パフォーマンスへの影響の方がでかい。

とりあえずOpenGLでコード分割するには、#includeを自前で実装して、コンパイル前に展開するしかない。
異種バージョン間とか考えるとかなりめんどくさそうだが、
単純に文字列展開するだけで済ますならそんな難しいもんでもないよ。
コピペを回避するには、基本的には自分でGLSLのコードを弄って
共通に使われる関数を複数のGLSLのコードに自動的に配置するような処理が必要になる。

そこでオススメなのがboost::waveだ!
waveはC言語で使われるプリプロッサを実装したものだが
waveに付属の以下のサンプルはGLSLのコードを処理できるようになっている。
wave\samples\custom_directives
このサンプルコードを使えばヘッダファイルに共通処理を書いて
#include "common.glsl"
みたいな事がGLSLでできるようになる。

ちょっと話は変わるが、最近Revisionという大きなデモパーティが開催された。
http://revision-party.net/
ここで作品をダウンロード可能
http://pouet.net/party.php?which=1550&when=2012
ここのスレのみんなはメガデモに興味ないかい?
今でもAMIGAのデモやってるんだな。
>>958
横からだけど、boost::wave とかノーマークだった。
これいい。素敵。ありがとう
みなさん、ありがとうございます

自分のマシンで使える OpenGL が 3.1 までなので、
GLSL の機能だけでコピペを回避するのは諦めざるを得ませんね

>>958
すいません、質問には関係ないと思って開発言語は伏せていました
Haskell でプログラムしてます

プログラムソース内で(所謂シェーダーツリーみたいに)
グラフでシェーダーを組み立てられる仕組みを作って、
それでコピペを回避する方向でがんばってみます
そんぐらいコピペしろよ
cppとかLLでも簡単にできない?
>>962
コピペ自体は簡単にできますが、コピペ元を変更した場合、
全てのコピペ先を同様に変更しなければならず、
その時に変更漏れしてしまう可能性があります

そういう事を防ぐのが、いろんなプログラム言語で実現されている
モジュール化機能の役割の一つだと学んできたので、
GLSL には少しショックでした
HLSLみたく実行時にコンパイルできないのかGLSLは?
>>965
実行時にコンパイルします
むしろつい最近まで実行時にコンパイルするしかなかったっていう
後追いのくせに細かいところは結構gdgdだよなぁ
968デフォルトの名無しさん:2012/04/11(水) 22:16:19.78
灼熱のファイヤーダンス
969デフォルトの名無しさん:2012/04/11(水) 22:46:20.16
Haskellとかつまんねー言語捨てろし
970デフォルトの名無しさん:2012/04/11(水) 22:56:47.37
ほしぞらまですべててにいれた♪
971デフォルトの名無しさん:2012/04/12(木) 10:19:41.02
シェーダにプログラムから定数を渡したい時って、uniform変数へ渡すのと、
attribute変数の定数として渡すのと、どう使いわけたらいいんでしょうか。

投影行列みたいなのはuniform変数が使われているサンプルをよく見かける
のですが、頂点ごとの計算に使うような定数は、attribute変数の定数として
渡した方がいいんでしょうか。 今一使い分けがわかりません。よろおねm(_ _)m
972デフォルトの名無しさん:2012/04/12(木) 21:57:12.16
>>261 の質問者とは別人ですが、似たような質問をします

レンダリングコンテキストAがカレントの時に VBO を作り、
頂点データをVRAMに転送します

別のレンダリングコンテキストBがカレントの時に別の VBO を作り、
先ほどと全く同じ頂点データをVRAMに転送します

これで2つの全く同じ頂点データを元にして、
同じ3Dモデルを別々のウィンドウに別々の角度で表示したりできるのですが、
この場合、VRAMには2つの全く同じデータがダブって入ってる事になりますよね

これではあまりに無駄なのですが、
頂点データをVRMA内で共有する方法は無いでしょうか

wglShareLists などはディスプレイリストは共有するけど、
VBO は共有できないような気がするのですが、共有できるのでしょうか

[環境]
OpenGL 3.1
973デフォルトの名無しさん:2012/04/12(木) 22:15:42.70
>>972
「wglShareLists VBO」でググるとできそうな感じだけど、ダメだった?
974デフォルトの名無しさん:2012/04/12(木) 22:29:08.40
>>973
いえ、開発言語がHaskellなのでwglShareListsそのものを試す環境にはないのですが、
Haskellで GTK + OpenGL の組み合わせを提供するライブラリに、
他のレンダリングコンテキストとリソースを共有するレンダリングコンテキストを作る関数があって、
それで試したところ上手くできなかったので、もっと根本的に別のやり方があるのかと思いました

同じようにレンダリングコンテキスト同士のリソースを共有するwglShareListsでできるのでしたら、
Haskellの方でもできると思うので、関数の使い方に問題があるのかもしれません

理屈では可能なのですね、もう少し考えてみます

ありがとうございました
975デフォルトの名無しさん:2012/04/12(木) 23:07:47.23
attributeは頂点ごとのデータ、つまり頂点「属性」。uniformは頂点ごとに変わらない「一様」なデータ。
976デフォルトの名無しさん:2012/04/12(木) 23:37:43.03
>>975
レスありがとうございます。attributeが頂点ごとのデータというのは理解しています。

自分が聞きたかったのは、glVertexAttribPointerではなくて、glVertexAttribで指定する変数の方です。
これは全頂点で同じ値になりますよね。これと、glUniform〜 で指定する変数との使いわけについてです。
説明が紛らわしくてすみません。
977デフォルトの名無しさん:2012/04/12(木) 23:45:58.38
>>976
それはglVertexとglVertexPointerと同じような関係じゃない?
つまり実用的にはglVertexAttribはあまり使わないんじゃ。
まぁ人によると思うが。
978デフォルトの名無しさん:2012/04/12(木) 23:54:27.30
>>977
あそうなんですか。
例えば頂点の色を全部同じにしたい時は、glUniform〜じゃなくて、glVertexAttribで指定する
ものなのかなと思ったりしたんたですが。
そういう場合でも、glUniform〜で渡してやる方が一般的なんですかね。
979デフォルトの名無しさん:2012/04/13(金) 11:27:58.63
ググり方が悪いのかわからなかったので…
glutInitDisplayMode(GLUT_RGBA|GLUT_SINGLE);
のGLUT_SINGLEとは何ですか
980デフォルトの名無しさん:2012/04/13(金) 11:31:34.15
シングルバッファ
つまりダブルバッファを使わないということ
981979
なるほど!
ダブルバッファを読んだらよくわかりました
ありがとう