1 :
デフォルトの名無しさん :
2009/07/12(日) 06:55:24
850:デフォルトの名無しさん :sage:2009/06/26(金) 01:22:49 毎年恒例の、課題提出時期の質問ラッシュな予感!
>1 乙
glMultMatrixf では float [16] なのに、GLUT の vvector.h では [4][4] なのが辛いなあ
そんな内部ヘッダを中途半端に流用するから悪いんだろ MULTMATRIXマクロでも使ってろってこった
>>8 vvector.hなんて知らないけど、これじゃだめ?
glMultMatrixf( &(matrix[0]) );
>>10 それも良いけど、行と列の取り方が違うから、一度行列を転置させなきゃいけなくて、
些細なことだけど、結局手間は変わらないんだよね残念ながら
なんで GLUT 付属のマクロでOpenGLと扱いが違うのか謎
うっへ、自己解決したスマソ 計算の順番変えれば良いだけだよな……
というか回答を鵜呑みにするならglMultTransposeMatrixで足りるはずだが
ごめ、そんな関数が有るって今知った ホントスレ汚しスマン
前スレの終盤にくらべたら、水滴が落ちた程度のことだ。
カラーに関しては、 void BottomColor(GLdouble* bColor, GLdouble **vertex) { GLdouble color[][3] = { { 1.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0 }, { 0.0, 0.0, 1.0 }, { 1.0, 1.0, 0.0 }, { 1.0, 0.0, 1.0 }, { 0.0, 1.0, 1.0 }, }; int face[][4] = { { 0, 1, 2, 3 }, { 1, 5, 6, 2 }, { 5, 4, 7, 6 }, { 4, 0, 3, 7 }, { 4, 5, 1, 0 }, { 3, 2, 6, 7 }, }; int i; for(i=0; i < 6; i++){ if(vertex[face[i][0]][1] < 0.0 && vertex[face[i][1]][1] < 0.0 && vertex[face[i][2]][1] < 0.0 && vertex[face[i][3]][1] < 0.0) break; } bColor[0] = color[i][0]; bColor[1] = color[i][1]; bColor[2] = color[i][2]; } こんなんでどうにでも成る 回転に関しては、ちょっと何やってんのか分かんない
>>16 移動回転するなら行列演算のが簡単で、元ソースみたいな頂点を自力で変更する方法はあまり良いとは言えないんじゃないかな
もちろん調べてるだけってならかまわんけど。
glRotate*やglTranslate*で移動回転して、ワールド欲しければMODELVIEW等をgetすればいいし。
接地が一番下向いてる面ってことなら法線とY軸との内積が最小(-1)ってやるのがてっとり早いような
19 :
デフォルトの名無しさん :2009/07/15(水) 21:35:44
glewを使ってマルチサンプリングでアンチエリアシングをしようとしているのですが、
うまくいきません。それで一つ質問があるのですが、以下のURLの一番下のサンプル
http://www.codesampler.com/oglsrc/oglsrc_14.htm#ogl_multisample_transparency では、GetDC→ChoosePixelFormat→SetPixelFormat→wglCreateContext→wglMakeCurrent
という通常の手順でカレントのレンダリングコンテキストを設定した上でglewInit()を呼んで
GLEWを初期化しています。
そしてwglMakeCurrent(NULL, NULL)→wglDeleteContextといったんコンテキストを削除した上で
wglChoosePixelFormatARBを実行し、
再度GetDC→SetPixelFormat→wglCreateContext→wglMakeCurrent
とカレントのレンダリングコンテキストを設定しています。
サンプルがやろうとしていることの意味は理解できるのですが、
他のサイトにはSetPixelFormatは同じウィンドウに対して一度しか呼べない、という記述もあります。
上記サンプルでは2度呼んでいるのですが、これは間違っているのでしょうか。
それとも「同じウィドウに対して一度しか呼べない」というのは
「同じDCに対して一度しか呼べない」という意味でしょうか?
>>19 どのみちそのサンプルでは同じDCに二度SetPixelFormatしてるね。
wglがらみの問題はOSで挙動が異なることが多々あるから動くならいいやというスタンスしかない気もする。
今回の件は、最初のコンテキスト生成のためにダミーのウィンドウとDCを臨時で作って、
用が済んだらすぐ削除してはどうだろうか
glPolygonOffset( factor, units ) でポリゴンのスクリーン Z 座標にオフセットを 加えることができますが、OpenGL の仕様書には オフセット値 = m * factor + r * units と書かれています。 このときの r は implementation-dependent constant と書いていますが、この値を 取得したり計算する方法はあるでしょうか?
22 :
19 :2009/07/16(木) 21:25:41
>>20 どうも。ダミーのウィンドウを作る線でやってみようと思います。
話しは変わるけれど、テンプレの
>>4 のFTGLは日本語(ワイド文字)使えるよね。
>>22 FTGLはワイド文字で日本語いけますね。速いし簡単だしでとても便利。
ただ、フォントファイルに MSGOTHIC.TTC みたいなフォントコレクションを指定すると、
face indexが指定できないせいで等幅かプロポーショナルかとか選択できなくて困るんですよね。
指定できるようにするのなんて簡単だと思うんですが、なんでそうなってないんでしょう・・・。
(もし指定する方法あったら教えてください)
>>23 うーん、FTGLはよく使うけど等幅の選択みたいなことはしたことないというか
そういう関数は見あたらないなぁ。
opengl 初心者ですが、 visual studio で作成したGUIからの入力でopengl での描画を更新したいんですが 可能でしょうか?
可能です。
どうやって?
openGLプログラムと、GUIプログラムのプロセス間通信で やったけど、できれば一つのプログラムで行いたいのですが。
Windowsのプロセスって、自分と通信できないんだっけ?
>>28 スマンが質問の意味が判らない。
OpenGLプログラムって何のことを指してる?
GUIアプリでOpenGLを使うだけだと思うのだが。
わからない人はだまっててください。
そして 実際にコンパイルできるソースを書いてくれませんか? だな
33 :
デフォルトの名無しさん :2009/07/18(土) 13:35:31
>>30 GUIアプリのプロセス内でGLコンテキストを持つウィンドウを作るのが常套手段だよなあ。
GLUTとか使ってると面倒かもね。
またいつものキチガイだろ。スルーしろよ。
36 :
25 :2009/07/18(土) 18:54:03
ここまで物議をかもすとは思わなかった。 CGの形を変える変数をGUIで打ったら、 それに応じて表示を変えるということをしたいのです。 glutMainLoop();に入ると、マウスやキーボードからの入力は受け付けるけど GUIからの入力をどうやって反映させるのか?と思いまして。 VisualStudio2008 expressでGUIを作り、CGの形を決める変数と紐付けられたリストボックスの項目を選択すると 下の関数に入るという風にしました。 private: System::Void listData_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) { とりあえずプロセス間通信で変数をOpenGLのプログラムに送り glutDisplayFunc(display);のコールバック関数 displayで受け取り CGの形を変えるようにしました。 これで問題ないけど、できればプロセス間通信無しで行いたいと思うのですが。
>>36 GLUT使わずに自前でコンテキスト作成すればいいじゃない
>>36 なんでプロセス間通信とか、わざわざ面倒臭い道を選ぶんだよwwww
と言いたいところだけど、自前でGLのコンテキスト作るのも慣れないと面倒だからねぇ。
えーと、そのGUIのプログラムとやらに、GL用のウィンドウを追加するのが早いと思うよ。
ただ、GLUTを使わないでやることになるので色々と追加でお勉強が必要になる。
まずはGUIプログラムとは別に、Win32API(&wgl)で簡単なOpenGL表示テストアプリを
作ってみることをオススメする。それをGUIプログラムに持っていけばいいかなと。
「OpenGL win32api」とかでぐぐれかす。
GLUTつかうとこういう罠があるからねぇ。 かといって、コンテキスト云々もWinでOpenGLが目的じゃないんなら余計な手間だし、 GLUTに依存してるコード書き直すのも面倒だと思うんで今のままでいいんじゃないかな。
>>36 なんでもいいならAntTweakBarが楽だよ
41 :
デフォルトの名無しさん :2009/07/18(土) 20:07:34
GLUTをVisual Studio 2003 でやっているんだけど オートコンプリート等のインテリセンスが機能しないから 効率が悪いんです 2008 Expressだとオートコンプリート機能はつきますか? もしくはオートコンプリート機能を追加する方法はありますか? 質問がひどければ謝ります
VS2003でも2008でもインテリセンス動くでしょ? ただ、2003も2008もたまに機嫌を損ねるのか、インテリセンス動かなくなるけど。 あれ全然分かんないんだよなー。なんで動かなくなるのか、 動かなくなったらどうすれば回復するのか・・・。
43 :
36 :2009/07/18(土) 20:27:13
アドバイスありがとうございました。 そうですか。GLUTから変えるしかないということで。 今のプログラムはとりあえずこのままで使っていって、 別のopengl プログラム作るときにはコンテキスト作成するようにします。 AntTweakBarも楽に出来るなら見てみます。
>>25 GLUTを使わないで自分でGLコンテキストを作る、
openGLに対応したGUIを使う(MUIからQtまでいろいろ)
ダイアログボックスにしてopenGLとは分離してしまう
とかかな
>>40 前スレで知ってちょっと見ただけだけど、AntTweakBarはGLUTと相性悪くね。
openGLのモデル描画を変更があったときだけ再描画したいときとか困るし
>>36 あれ、よく見たら、もしかして.NetっていうかC++/CLI(C#と混合?)でやってんの?
だからプロセス間通信なのか・・・。
だとしたら、win32apiとか使えないかも。C++/CLIは使ったことないけど。
.Netの事は良く知らないけど、OpenGLを描画するためのコンポーネントとか無い?
まずはそれを検索してみると良いのでは。
あるいは、GLUT使ってるんならCかC++は使えるんだろうから、
C++/CLIを使うのはやめてC++でGUIも書くとか。
wxWidgets+wxFormBuilderとか、Qt(GPL版)とか使えば、GUIの作成も手っ取り早いよ。
まぁもっとも、手っ取り早いのは慣れた人だけで、wxもQtもそれなりの勉強時間は必要だけど。
わからない人はだまっててください。
47 :
デフォルトの名無しさん :2009/07/19(日) 14:17:53
>>45 「.net openGL」でググっただけでいかようにもなりそうだが。
日本語でも英語でも。
>>47 おおう。ホントだ! しかも何コレ簡単だし楽そうだなぁ。
今度小さなテストアプリ書くときは.Netでやってみるか〜。
>>46 w
質問です。 初期処理にて glEnable(GL_DEPTH_TEST); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); とやり、描画ループのバッファクリアのタイミングで glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); としているのですが、ポリゴンが面の片側にしか描画されません。 こういった場合にまず疑う or 検証すべき箇所はどこでしょうか。 他にオプション関係で初期処理中に行っている事といえば、 glEnable(GL_POINT_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); あと、頂点の並びが個人的にイメージしやすいので glFrontFace(GL_CW); としています。よろしくお願いします。
GL_CULL_FACEの意味をちゃんと調べたほうがいい
カリングやってるからじゃね?
52 :
49 :2009/07/22(水) 23:59:57
>>50 ,51
ありがとうございます。
そこは確かに怪しいのですが、カリングOFFでも状況変わらずでした。
たとえば、辺の長さ1の立方体を、Z軸の真ん中で分断するような面↓を作り、
GLfloat vert[] = {
0.0f, 0.0f, 0.5f,
0.0f, 1.0f, 0.5f,
1.0f, 1.0f, 0.5f,
1.0f, 0.0f, 0.5f
};
GLfloat texPoints[] = {
0.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f,
1.0f, 0.0f
};
glBindTexture(GL_TEXTURE_2D, someTexID);
glTexCoordPointer(2, GL_FLOAT, 0, texPoints);
glVertexPointer(3, GL_FLOAT, 0, vert);
glDrawArrays(GL_QUADS, 0, 4);
とでもしてみて、立方体から北側となる{0.5f, 0.5f, -2.0f}辺りの視点
から上記のvert面を確認します。すると立方体の南面、東面、西面を裏側から
観る事になるのですが、この時、南面と東面の裏側にだけ、意図しない
黒いポリゴンが表示されるのです。分断面そのものは期待通りに描画されます。
どなたか似たような経験をされた方がおられれば、と思って質問しました。
53 :
49 :2009/07/23(木) 00:11:48
すみません、話が飛躍してしまったので追記といいますか、補正です。
そもそも最初にこちらで質問したかったのは、
「画面内に意図しない黒いポリゴン面が描画される原因」でした。
それで、よく見てみると、その変な黒いポリゴン面が描画されるのは
「透明部分を含むテクスチャ」を使用している面(の背後)でした。
テクスチャ画像の透明部分から、当然、向こう側が透けて見えるわけですが、
その向こう側には別のテクスチャの裏面が描画されているわけです。
そこで、その遠いテクスチャの裏返しが描画されているのなら納得できるのですが、
見えているのは真っ黒なポリゴン面でした。それで
>>49 のような質問を
させて頂きました。
>>52 で書いたのは、そういった話をすっ飛ばして、
透明テクスチャの周囲で描画がおかしくなる、という現象の説明でした。
説明が飛び過ぎてよくわからないですね。すみません。
透けるの透けないの、黒いの白いの東西南北、さっぱりわからん ゴチャゴチャ言ってないで、うまくいかないシンプルなプログラムを丸ごとどっかにupしろ つか、課題なら授業中に講師に聞け
ただの描画順の話でないの? 透明とか半透明を含むポリゴンは奥から手前の順番になるように描かないとだめだよ
光が当たらないと真っ黒になるよね
57 :
49 :2009/07/23(木) 09:12:53
皆さんありがとうございます。
>>54 結構巨大なソースになりつつあるので、全体をアップするとは考えても見ませんでした。ちょっと時間を用意して、できる事なら該当箇所を切り出して見ます。本当にもう、課題だったら先生に聞けて楽なのですが……。ありがとうございました。
>>55 ,56
そのあたり、あまりきちんと理解せずに組んでいるかもしれません。特に透明が絡んだ時の描画順については全く意識していなかったので、調べて見ます。ありがとうございました。
前スレで外部モジュールのnvoglnt.dllでエラーが発生する件で質問をしていた者です。 問題が解決したので、ご連絡します。 ===状況=== GLUTを用いてマルチウィンドウを実装したソフトを動かしていると、不定期なタイミングでnvoglnt.dllでエラーが発生する。 問題のモジュールが呼ばれる順序が kernel32->glut32->opengl32->nvoglnt となっていた為、問題箇所を特定することが出来ず、デバッガーで追うことが出来ない(追う方法を知らない) ===問題点=== 複数のウィンドウを連動させる為に、 「dispAの描画が発生したらdispBの描画も行う」 という処理を実装する際に以下のようなコーディングを行っていました。
59 :
58 :2009/07/23(木) 18:32:29
何かのデータ処理を行う関数(){ /* データ処理を記述 */ /* dispAの描画を実行 */ dispA(); } dispA(){ glutSetWindow( dispA ); /* dispAの描画処理を記述 */ ・・・ glutSwapBuffers(); /* dispBの描画を実行 */ dispB(); } dispB(){ glutSetWindow( dispB ); /* dispBの描画処理を記述 */ ・・・ glutSwapBuffers(); } dispAの描画を行う箇所が複数存在していて、ソースを簡略化するために 上記のようにdispA()の中でglutSetWindow( dispA )を実行するようにして、 dispAを呼び出したい場所ではdispA();と一行記述すればいいようにしていました。 この記述方法だと、何かのデータ処理を行う関数()が実行されると強制的にdispA()が実行されてしまうのが問題で 下記のようにglutPostRedisplay();をコールすることで描画タイミングをハードウェアに任せるように記述することで問題が解決しました。
60 :
58 :2009/07/23(木) 18:33:24
何かのデータ処理を行う関数(){ /* データ処理を記述 */ /* dispAの描画を実行 */ glutSetWindow( dispA ); glutPostRedisplay(); } dispA(){ /* dispAの描画処理を記述 */ ・・・ glutSwapBuffers(); /* dispBの描画を実行 */ glutSetWindow( dispB ); glutPostRedisplay(); } dispB(){ /* dispBの描画処理を記述 */ ・・・ glutSwapBuffers(); } 前スレが見えなくなってしまったので、アドバイスを頂いた方の番号が分からないのですが、本当にありがとうございました。
glutについて質問したいのですが、あまりにもレベルの低い 内容なので、ここで質問して良いものか迷っています。 glutに関して初心者が集うようなスレッドはありますか。 あれば紹介して欲しいです。なければここで質問させてほしいです。
ここでどうぞ
>>62 早いお返事ありがとうございます!
どの程度説明すれば伝わるか分からないのですが、とりあえず…
1.x,z軸に沿った平面を作りまして
2.その平面の上から平面に向かって垂直にスポットライトを当てまして
3.平面の光が当たっている部分が丸く明るくなっているのを確認しまして
平面は拡散反射にしているのに、何故かカメラを上に平行移動させると
丸く明るくなっているところが手前にずれてきて楕円になってしまうのです。
イメージ的にはカメラが上に上がるにつれてライトがこちらを向いてきている
ような…
因みに、カメラはライトの真上ではなくて斜めから向けてます。
長々と分かりづらい文章ですみません。
必要でしたらソースコードとか動画とか載せますんでお願いします。
私としては平面図形とライトが何故か別々の動きをしていて
それを何とかできれば…と思っているところです。
どう考えても必要だからまずソースうpれよ
65 :
61 :2009/07/24(金) 22:22:50
>>64 それもそうですね。
見づらいでしょうが、よろしくお願いします。
#include <GL/glut.h>
GLdouble vertex[][3] = {
{ -0.5, 0.0, -0.5 },
{ -0.5, 0.0, 0.5 },
{ 0.5, 0.0, 0.5 },
{ 0.5, 0.0, -0.5 },
};
int face[4] = { 0, 1, 2, 3};
GLdouble normal[] = { 0.0, 1.0, 0.0 };
GLfloat light0pos[] = { -1.0, 5.0, 0.0, 1.0 };
GLfloat spotDir[] = { 0, -1, 0 };
GLfloat lightred[] = { 1.0, 0.3, 0.3, 1.0 };
GLfloat white[] = { 1.0, 1.0, 1.0, 1.0 };
int flag_right = 0;
int flag_left = 0;
void display(void)
{
int i,j,k;
static double d = 0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
/* 視点位置と視線方向 */
gluLookAt(0.0, 6.0+d*d, 50.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
66 :
61 :2009/07/24(金) 22:25:18
/* 光源の位置設定 */ glLightfv(GL_LIGHT0, GL_POSITION, light0pos); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, white); /* 土台の描画 */ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, white); for( i=0; i<40; i++){ for( j=0; j<40; j++ ){ glPushMatrix(); glTranslated( i-20, 0, j-20); /* 1*1の平面 */ glBegin(GL_QUADS); glNormal3dv(normal); for (k = 0; k < 4; k++) { glVertex3dv(vertex[face[k]]); } glEnd(); glPopMatrix(); } } glutSwapBuffers(); if ( flag_right ) d = d + 0.05; if ( flag_left ) d = d - 0.05; if ( d < 0 ) d = 0; } とりあえず入りきらなかったので初期化関係その他は省きました。 全部必要だったりします?
>>65 起動させてみたけど、ただ単にカメラを上げるにつれ、ライトとカメラのなす角度が小さくなってゆく訳で、
特に異常はないけど?
> 前にずれてきて楕円になってしまう
むしろ楕円だったのが真円に近くなってくるだろ、d増加につれ
どこでスポットライト? ソースチラ見でわかんなかったから、ちょっとコード足したら普通に点光源で動いたが ソース出すなら、めんどくさいから全部出したほうがいいんじゃね PROJECTIONによっては楕円に見えるかもしんないし
69 :
61 :2009/07/25(土) 03:31:13
>>67-68 ありがとうございます。
正常に動いてますか…
いよいよどこか勘違いしてる気がしてきました。。
以下、残りです。
void resize(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, (double)w / (double)h, 1.0, 500.0);
glMatrixMode(GL_MODELVIEW);
}
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glFrontFace(GL_CCW);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightred);
glLightfv(GL_LIGHT0, GL_AMBIENT, lightred);
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 30);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spotDir);
glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.01);
}
70 :
61 :2009/07/25(土) 03:34:16
void mouse(int button, int state, int x, int y) { switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN) { flag_left = 1; glutIdleFunc(idle); } else { flag_left = 0; glutIdleFunc(0); } break; case GLUT_RIGHT_BUTTON: if (state == GLUT_DOWN) { flag_right = 1; glutIdleFunc(idle); } else { flag_right = 0; glutIdleFunc(0); } break; default: break; } }
71 :
61 :2009/07/25(土) 03:35:02
int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(resize); glutMouseFunc(mouse); init(); glutMainLoop(); return 0; } 手間をかけさせるような真似をしてすみません。
スクショみせてみ、何に不満なのか
やっぱライトの設定があったか init()の中のGL_SPOT_DIRECTIONをdisplayのGL_POSITIONと同じ場所で ライトの設定はgluLookAtの後でやらないとビュー座標になる
74 :
61 :2009/07/25(土) 20:59:41
ちょい質問 メインスレッドで描画してたプログラムの描画命令部分をスレッド化しようとしてる それで描画命令部分をそっくりそのままスレッド化したら、 プログラム起動 -> 描画スレッド呼出(1回目) -> スレッド破棄 -> スレッド呼出(2回目) … この呼出2回目以降描画されなくて困ってるんだけど、原因に心当たりないかな? HDC、HRCの設定と破棄は描画スレッドでやってる 1回目は何の問題もなく描画されてるから、原因がさっぱりわからなくて困ってる・・・
エラーチェックしろよ
Google 3D ギャラリーの3DモデルをOpenGLで読み込みたいんですが参考になるページありませんか?
80 :
デフォルトの名無しさん :2009/07/29(水) 13:26:15
なんか藻前等凄いなw OpenGLって文書があんま充実してないのに、よく生き残ってるよな。 以前はもっと使いやすいHOOPSとかいう3Dグラフィクスライブラリなんか あったんだよ(すげー使いやすいかた)。 ほんと、このスレで得意げになってGLのコードすらすら書いてるヤシって ただもんぢゃねー
HOOPSっておいおい……
LinuxやFreeBSDだとOpenGLしかないからな。 DirectXがあったところできもいので使わないけど。 ただOpenGLやDirectXにかわるスマートで見通しのいいAPIがあっても良いと思う今日この頃。
DirectX あの命名規則はなんとかならんの?
OpenGLやDirectXにかわる・・・幻と消えたFahrenheit・・・ どんなAPIになる予定だったのだろう
85 :
m9('v`)ノ ◆6AkAkDHteU :2009/07/29(水) 20:30:52
>>81-84 レスどうもです。
思うのはね、もうちっとMayaなんかとの連携がスムーズになっていても
よかったんじゃないかなぁ・・・って。
だって、モデリングして、それ取り込んで、それからコードづらづら
書くなんてさ、15年前のGLと大差無いんですもん。
Unityとかoolong(だっけ?)なんていう技術が生まれてはいるんだけど、
なんか使い肉そぉ。
EclipseとかVisual Studioとかの統合開発環境が
これだけ発達したんだから、もちっとOpenGL自体も他の技術との親和性を
高めて欲しい。PS3とかで3Dゲームばりばり作ってる人には、SCEが
フレームワーク準備してあげてるんでしょ?
そういうフレームワークがOpenGL自体に欲しいのよね。ホントこの状態で
ばりばりOpenGLのコード書く連中って神がかってるwお世辞ぢゃなくて。
フレームワークなんて探せばゴロゴロ出てくる。 個人の趣味レベルのものから商業レベルのものまでな。 使いこなせるかどうかは別として。
87 :
デフォルトの名無しさん :2009/07/29(水) 20:46:57
gltexsubimage2Dを使ってテクスチャの書き換えをして オブジェクトに落書きみたいなことをしたいんだけど この場合透明な色に書き換えることってできる?
よけいなことをしないのがopenGLのいいところ だからこそ、それぞれの分野で足りないところは自分で補えるし、使いやすい。 つか、得意げになってとか神がかってるwとか、お世辞ぢゃなくてバカにしてんだろ?w
>>85 そりゃOpenGLはグラフィックス用のアセンブリ言語と呼ばれる位だから。
高レベルなことをしたいならそれなりのフレームワークを使えばいい。
有名どころではOpenSceneGraphとかOGREとか。他にも沢山ある。
90 :
デフォルトの名無しさん :2009/07/30(木) 01:01:52
>>87 ごめんなさい。質問読み返したらわけが分からなかったので再質問
テクスチャ貼ってる正方形のオブジェクトに真っ白のテクスチャを貼っている状態(この状態だと見た目は白の正方形)のものがある
ここで貼っているテクスチャをglTexSubImage2Dを用いて一部を塗り替える
塗り替えた部分を透明(オブジェクトの背景まで透ける)にするためにはどうしたらいいですか?
なんでアルファ使わないの?
92 :
デフォルトの名無しさん :2009/07/30(木) 02:00:06
>>91 アルファ値を設定しても反映されないんです
オブジェクトの色とか設定するときには反映されるんですが
gltexsubimageで大きさ1*1にして1ピクセル分の要素(RGBA)を設定してるんですがRGBしか反映されません
どんな原因があるでしょうか?
コードが間違っているんだろ
そもそもblendがらみの設定をしてない・おかしいとか、 texの大きさを2^nにあわせるのに失敗しているとか、 1ピクセル分の要素の元のメモリ側の配列と、glでテクスチャイメージとして送る際の設定が噛み合ってないとか いろいろありそう
質問者は再現コードを提示すべき。 言ってることとやってることが違うのは良くあることだから。
アルファ付きのテクスチャフォーマットを指定してないとか
97 :
m9('v`)ノ ◆6AkAkDHteU :2009/07/31(金) 05:16:34
>>89 「ここがダメだよ、OpenGL
>>85 補足」
いや、ほら、OpenGL と Open GL ESじゃはっきり言って別物だしさ、
だって、openシーングラフなんてOpenGL ESじゃ使えねーし。
なんか背後の設計思想が未熟だよ。俺だったら、もっと抽象度高めて
ESだろうが、バージョンが変わろうが、もっと透過度っつーのかな、
ともかく上手につくるね。
GLがポータビリティ高いなんて、大嘘だよ、絶対騙されるなよ。
もうJavaもObjCも、OpenGLと連携できますじゃなくて、自前のAPI設計
しろよ。やっぱできねーんじゃねーのかなw
>>97 当然それぞれの仕様書は読んでるんだろうけど、気に入らないのはどの部分?
設計思想ってことは冒頭かな?
具体的におかしいとこ挙げてどう変わるべきか
書かなけりゃアンチが騒いでるだけにしか見えないよ
「6AkAkDHteU」で検索すると面白いよ!
>>97 ううん・・・一言で言っちゃえば、
6AkAkDHteUさんにとって必要なのはOpenGLではない
ってだけの話のような。
抽象度の高い、透過的なライブラリなら他にあるでしょ多分。知らんけど。
ちなみに自前のシーグラフライブラリは、ちょっと手直ししたらESでも
いい感じに動いたよ。全然複雑な事やってないから、てのもあるけど。
winからiPhoneにそのまま持っていけて、便利便利。
でもって今はGL2.1/ES2.0で動くシーングラフライブラリを一から組み直し中。
シェーダ中心になると、高レベルレイヤの組み方からして変わってくるから
GL1.x/ES1.xまで透過的に扱えるよう設計するのは、僕には難しかった・・・。
無理すればやれないことはないんだろうけど、手間の割に益無さそうだし。
要するに、OpenGLが何のために定められている仕様なのか、理解できてないってことだな
103 :
m9('v`)ノ ◆6AkAkDHteU :2009/07/31(金) 12:09:35
>>101 断言しる、藻前の技術力、相当なもんだ。
>>100 と
>>102 については、もう「はぁ」って感じぃ〜
プログラミングのパラダイムって変わったんだよ。簡単に言うと、
EmacsからEclipseへってことだ。
とにもかくにも、OpenGLのバージョン間での透過性だけじゃなくて、
他のツールとの透過性も意識しなきゃもう時代遅れよ。GLには
フレームワーク化の努力が決定的に欠けていた。
扱うためには、
>>101 みたいな技術力持ってなきゃいかんっつぅのは
もうAPIとして失格。
一言で言うと、3Dっていう概念を狭く取りすぎてるんだ。
もっと視野を広げて、シェーディング、モデリングを他のツールと
上手に連携しながら行う一つの環境っつぅか、パッケージの構築に
注力しなきゃいかん。
>>101 はどうよ? おまえ、凄いけど、もちっと遠くを見てOpenGL批判できる
ぐらいでなきゃだめよ。つーか、お前ぐらいの技術力あるヤシにこそ、
そういう思想を身につけてもらいたい。
以上だ(一応、京大院卒)。
104 :
デフォルトの名無しさん :2009/07/31(金) 12:14:25
「6AkAkDHteU」で検索すると面白いよ!
フレームワークってのは枠にはまってるうちはいいが、 枠から外れることをする必要がでると途端に難しくなる フレームワークはフレームワークでいくらでも存在してていいが、 OpenGLのようなハードウェアと直接対話するローレベルなAPIも選択肢としては欲しい
おまえら釣られすぎだろ キチガイに構うなよ
てかシーングラフと3DCG関数群って 全然レイヤの違う話じゃないか。 何いってんだが。
病院行きだな。 俺もスルーしよっと。
夏だねっ!
110 :
m9('v`)ノ ◆6AkAkDHteU :2009/07/31(金) 18:32:51
>>107 スレ違いかもしらんが・・・・行くよ、サンロクマルで・・・
まじ倒すよ、プレステを。
>>103 ぜひそのフレームワーク実装してくれ。
OpenGLもDirectXも使わずになw
OpenGLを批判できる俺かっこいいまで読んだ
113 :
m9('v`)ノ ◆6AkAkDHteU :2009/08/01(土) 07:38:47
>>111 DirecXなんてさらに閉じた環境だな。オープン系なんて呼ぶなよ、ヴォケ。
まぁ、OpenGLの設計思想は完全な失敗だったね。
モデラーとの連携性悪すぎ、「動的スクリプティングの拡張」も無し、
OpenGL ESとのシームレスな継続性も酷いもんだ。
でもな、日本からこういった技術って生まれないよな。
>>105 の言うハードウェアとの「直接対話」って、結構見落とせない部分で、
その点ぢゃOpenGLの功績は評価できるレベルだと思う。でも90年初期から
進化がなかったよ。
ちょっとさ、俺の言うことに反論できないんぢゃ、どの情報工学科からも
ドクターなんて絶対取得できないぜ。>ALL
OpenGLのポリゴンの上で動画(AVIとか)を再生したいのですが可能でしょうか。 参考になるコードありませんか。
>>114 普通に出来る。
mplayerなどはOpenGLバックエンドがあるからそのコードでも参考に。
>>113 結局、技術力&理解が無い上っ面だけの理屈ヤローじゃんw
>モデラーとの連携性悪すぎ、「動的スクリプティングの拡張」も無し、
あのなOpenGLは低レベル描画APIで有って、
そんなのを求めてる時点で技術の無いクレクレ房なだけじゃん
どっかのミドルウェアで、モデラーと連携して動的スクリプティングの拡張してあって
GLとDXの切り替え付いてれば、GL選択して使えよw
>OpenGL ESとのシームレスな継続性も酷いもんだ。
ESってのは組み込み向けなんだよ、前提としてるハードが全然違うの
ネーミングの文句言うならともかく、お前はES、ESと言いたいだけだろw
って感じ
OpenGLとOpenGL ESを同列に扱おうとしてる時点で
C++とアセンブラを同じ目線で語って文句言ってるようなもんだ
”アセンブラは酷いもんだ、クラスとか無いし”ってな感じww
相手すんなよ
>>116 トン
NeHeも探してたんですがLesson35にもありました。
そのサンプルも見てみます。
>>113 設計思想を理解できてないくせに設計思想を語るのやめようぜwww
まず、仕様書を第一章から5分でいいから読んでみろ。
普通の英語力なら今お前が理解できていない内容について
すべてを物語っている一言に到達できるだろう。
お前が言っているのはお米をつくっている農家に対して
「これからはおにぎりだ、海苔がないなんて考えられない、
お米なんてつくったってダメじゃん、アハハ〜」
といっているのと同じことだってことだ。
理解できたら自分のバカさ加減を認識してとっとと去ね。
理解できなかったら自分の理解力のなさを認識してとっとと去ね。
さて、これで俺もあらし認定決定だし、消え去るといたしますかなw
>>113 OpenGLってのは3Dソフトウェアから見れば最下層のAPIで、
3Dじゃないソフトウェアで言うなら、BIOSみたいなもんだよ。
APIやプログラミングモデル自体に不満(ステート変更が頻雑になるとか
バッファの扱いが面倒だとかシェーダの直行性が保てないだとか)があるなら
ともかく、そんな高レベルの話はOpenGLの範疇外だよ。
BIOSに対して「スクリプトで拡張できない!」とか言い出すヒトはいないでしょ。
(あ、でもBIOSがスクリプトで拡張できたら面白いナ・・・)
あと、ESとの継続性(?)って、具体的に何が不満なのかな。
全く同じソースコードが動くようにするなら、わざわざESなんて作る必要性が
無いわけで(笑)ある程度書き換えないといけないのは当たり前かと。
それよりも、API名やプログラミングモデルが共通なので今までのノウハウが
そのまま使えるというのが重要なんだと思いますが。
>>117 OpenGLとOpenGL ESの違いを、C++とアセンブラの違いに例えるのは
いかがなものかと・・・。
>>121 > (あ、でもBIOSがスクリプトで拡張できたら面白いナ・・・)
っ Extensible Firmware Interface
> API名やプログラミングモデルが共通なので
1.1赤本くらいしか読んでいなかった人は面食らったと思う。俺とか。
まあすぐに適応したけどラッパー類の構造はかなり書き直しが必要だったな。
OpenGLがC++だとしたらESは生Cくらいの印象かなあ。
>>122 EFIは、スクリプティングとはちと違うような。
スレ違いになるけどEFIって現状どうなってるんだろ。普及してんのかなw
ラッパの書き直しのとき、ESでは使えない機能の場合は置いておいて、
例えばglDrawElementsでインデクスのtypeにGL_UNSIGNED_INTが使えない
みたいな制限があった場合、どうしました?
1.ラッパのAPIを、GL_UNSIGNED_SHORTまでに制限する
2.ラッパの内部でintのインデクスをshortに作り直す
僕はもう面倒臭いんで1.を採用することが多いんですがw
>>123 俺はmacも使うからEFI搭載マシンを使っていることになるな。
かといっていじれないから恩恵は受けていないのだがw
2にすると一つだけ問題があって、PSPとかiPhoneみたいなハード側の制限が厳しい環境だと、
最適化が甘いと露骨にパフォーマンスを悪化させるという点ですかね。実際2をやるんだけどさ。
多分最適な方法はラッパ側でtypedefしちゃって対象ごとに切り替えちゃうことなんだけど、
Cは精度が落ちる暗黙の変換が緩いので想定外のバグを生む可能性は知っていないとならない。
125 :
m9('v`)ノ ◆6AkAkDHteU :2009/08/01(土) 19:41:09
>>117 先ず日本語ちゃんと使えるようにしような。その語学力じゃOpenGLは
ちとキツイだろ?
つぅか、おま、OpenGLの思想どころかエンジニアリングって何なのか
理解できてねぇつーか、理解不能なんだな。オタク工学部出身だと
したら5流大出だろ(俺、いちお京大院修了済み)。
俺はOpenGLがGLだった頃から知ってんだ。
言語は言語にとどまっちゃいかんのよ、その先へ行かなきゃ。Javaは
それで失敗したけどな。
OpenGLにはフレームワークっていぅ概念さえないぢゃん。だめだよ、
この程度ぢゃ・・・・はっきりいって駄作だ。
もう触れるなよ、約束だ
じゃね
> OpenGLがGLだった頃 何時だ
古参を気取るようなおっさんが「ぢゃ」とか使ってるのは気持ちが悪い。
>>125 おまえ、「フレームワーク」って言葉を最近覚えて気に入っちゃったみたいだけど
言葉の意味ちゃんと理解してる?w
OpenGLはグラフィックハードウェアの機能・構成に対するフレームワークとして
十分その役割を果たしているだろ。
あと、ここのスレの奴らがいろいろ教えてくれてるの、ちゃんと読んでるか?
読んでて
>>125 のレス出してるなら理解力0のバカ(関西における意味で)だぞ。
もう一つ、GLの頃から知っているって主張するのは、かなり前から知っているけど
なんにも理解できていないんですって主張しているようなもんだから、やめときなw
相手する奴も同罪
125がバカだとは思うが、openGLはフレームワークではないだろ。 べつにフレームワークが偉いわけでも、そうでないといけないわけでもないし 低レベルなステート操作なAPIだからこそ息が長く汎用性もあるとも言えんじゃね
そんだけ長い間この分野に関わっておきながら、いまだ機能の階層構造という 概念の理解に到達しない人間がいるということに驚かされる。 しかもそれでエンジニアリングを語るとか、一体どうなってるんだ。京大パネェ
京大修士が2chのスレでこれほど痛い書き込みをするほど余裕が 無いとはにわかに信じがたい話だ
136 :
m9('v`)ノ ◆6AkAkDHteU :2009/08/01(土) 22:02:05
>>134 いや、俺は京大学派に属してても、亜種っつぅかさ、系統図じゃ上のほうに
属してるんだ。
多いよ、APIだからどうのとかいってさ、言語ないしは計算機環境の
設計にまで思い至らない連中がさ。NECや富士通とかの技術者がその程度
なんだよ。
低レベルI/Oの処理とかさ、バカなこと言ってねぇで、もっと視野広げると
楽しいよ。ほんと。ま、無理だろうけど。
ここでグチグチ言われても鬱陶しいだけなんだが。 なにが気に食わないのかしらないが、自分で行動を起こせばいいだろ
136は134の日本語が理解できないようだ
京大院卒→ 京大院修了済み→ 京大学派
要は京大に喰い付いて欲しいんだろ。 学があるだのないだのみたいな。 お前ら好きだろそういうの、がんばれよ。
じゃあここで東大院CG系研究室の俺が颯爽と
じゃあ東工大院でCGとは全く関係無かった俺はひっそりと
学歴の話はスレ違い、そろそろ余所でやってくれ
>>141 ラジオシティ法の命名の件で愚痴る先生の研究室ですねわかります。
146 :
131 :2009/08/02(日) 00:02:00
>>133 >openGLはフレームワークではないだろ。
うん、まあね。
「OpenGLのパイプラインの処理モデルをホストのシステムと協力して実現できる
ことがグラフィックハードウェアに課せられている」という意味で書いたんだけど、
これって現実的にはなんの制限にもなってないよねw
そもそもGPUなんてなくたってCPUに処理させちゃっていいってことなんだし。
まあ、バカをバカにしてみたかったバカの発言ってことでお許しくださいw
>>136 は
>>129 に指摘されて言葉改めたのか?w
もうちょっと頑張れよwww
てか、お前何話してんの?OpenGLの話しようぜ。
>>145 いや、元自分の研究室の学生と結婚しちゃった新進気鋭の若手先生のとこかもw
>>141 ,145,148
こんなに東大のCG研の人間がいたらそりゃあ馬鹿は袋叩きに遭うわけだwww
ここでもう一人東大関係者登場。 東大は駒場の馬鹿のせいで全学2chへの投稿が弾かれているはずだ。 お前らフシアナも出来ないはずですよ! m9('v`)ノ
いあ、解除されてる。試しにふしあなしてみろ。
珍しく伸びてるから何かと思えば
♪Et de l'Étoile à la Concorde, un orchestre à mille cordes ♪Tous les oiseaux du point du jour chantent l'amour ♪Aux Champs-Elysées, aux Champs-Elysées ♪Au soleil, sous la pluie, à midi ou à minuit ♪Il y a tout ce que vous voulez aux Champs-Elysées
なにこの街の遊撃手のCM
あの見事な車のCMのか
glReadPixelsとかglTexImage2Dとかを使う回数はやっぱり抑えたほうがいいの?
必要なだけやればいい。 他の方法で代替できるならそうしたほうが良い場合もある
glDrawPixelsとテクスチャ付き矩形で比較すると、同時間で描画できるピクセル数が10倍以上違うのが普通。 Vista世代のオンボカードでもglDrawPixelsじゃ1フレームで画面の1/4程度(500x500)の面積しか描けない。 バスが細いネットブック向けだと200x200がせいぜいじゃないかな。
glDrawPixelsにはそれを使うのに適した時があるから、テクスチャ矩形と速度比較しても意味無い てか、オンボカードってなに?
オンボカード失礼しました まあ、基本的にはキャッシュすればいいものはキャッシュするに越したことはないということですわな
PBO使えばおk
OpenGL 3.2発表されたらしいね。Geometry Shaderも入ったとか。 これでAMDも言い訳できまい。さっさと実装汁。
質問です。 マルチテクスチャの機能を使って、4枚のテクスチャを混ぜようとしていますが、 2枚のテクスチャを混ぜることはできたものの、3枚以上を混ぜる方法が分かりません。 ググったりしてみたのですが、見つけたサンプルは2枚のものばかりでした。 どなたか、3枚以上のマルチテクスチャマッピングを教えて下さい。 シングルパスでできれば、さらに嬉しいです。
AMDまだGS実装してなかったのかよw
>>165 シェーダーで
使わなくてもできるだろうけど、個別の調整とかその後の拡張を考えたら、素直な実装はシェーダーの時代かと
>>165 2枚が出来るなら3枚でもできるんじゃね?
glActiveTextureのGL_TEXTURE0とかGL_TEXTURE1とかなってるところを
GL_TEXTURE2とかGL_TEXTURE3に増やして同じことやればいいだけ
ちゃんと2枚のサンプルを理解していればいけるはずだ
なんか今年はOpenGLに勢いが感じられるね。
170 :
デフォルトの名無しさん :2009/08/05(水) 19:21:28
main関数内のglutMainLoop(); に入ったらすぐにエラーか何かでプログラムが終了してしまいます。 何が原因なんでしょう? 下のようなメッセージが出ているのですが関係あるんでしょうか? 'C:\WINDOWS\system\glut32.dll' を読み込みました。バイナリはデバッグ情報と一緒にビルドされませんでした。 'C:\WINDOWS\system32\nvoglnt.dll' を読み込みました。バイナリはデバッグ情報と一緒にビルドされませんでした。
WebGLが面白そうだ
複数のパスを使ったシェーダーを記述するのに使う標準形式ってないんですか? COLLADA FXというのがあるみたいですが、どういうものなのかよく分かりません。 自分のプログラムに使えるんでしょうか。 シェーダーを記述するのに使うツールって何使えばいいんでしょうか。 現在AMDのRenderMonkeyしか知りません。NVIDIAはFX Composerというのがあるみたいですが HLSLのみで、GLSLは対応していなかった気がします。
Texture Unitが二つしかない環境で開発してるとか?<165
>>170 エラーか何かで終了するだけじゃわかりません。正常終了かもしれません。
そのメッセージは関係ありません。
>>172 特に標準形式といったものはない
とにかく複数のパス用のシェーダを通せばいいだけなので何でもいいとも言える
COLLADAでもいいけど読み込むのは結構面倒
GLSLじゃなくてCgでもいいならCgFXが読み込みは楽だよ
int main(void){ /* コールバックとか色々中略 */ glutTimerFunc(16, timer, 0); glutMainLoop(); } void timer(int value){ glutPostRedisplay(); glutTimerFunc(16, timer, 0); } GLUTの解説サイトによくあるコードなのですが、 glutTimerFuncをこのように利用すると、メモリリークする症状が見受けられました。 他の関数での末尾再帰はコンパイラで最適化されて起こりません。 関数の仕様なのでしょうか?
スクリーンの特定の領域だけをアップデートする方法はありませんか
glScissor()を使え
>>175 メモリーリークなどしません。原因は他にあるのでデバッグしてください
>>175 timer()が末尾再帰しているとでも言いたいのか?
そもそも末尾再帰なんて全く関係ない。普通にデバッグしろ。
おおかたDisplay関数あたりで肥大してんじゃねーの?
>>172 CgFXをVisualStudio用のHSLS記述アドオンのInteliShadeで書いてる。
今の所ソースの色分けと関数の折りたたみと組み込み型、関数のインテリセンスぐらいしか利かないけど、
3.2が出るのが待ち遠しい。
>>177 ありがとうございますだ
特定のピクセルに点を打ちたいときはどうすればいいんでしょう
pixelAt(int x, int y)
のような感じでスクリーンの左上からx,yの位置にあるピクセルに点を打ちたいのです
>>182 手っ取り早いのはglRasterPos+glDrawPixels/glBitmapの組み合わせ。
ただし基本的にはノース経由のバスで座標データがやり取りされるから、そこがボトルネックになって遅くなるのは確か。
すでに送ってあるテクスチャとかをpix to pixに書くには、
射影行列をロールバックしてorthoな射影で書いて、
その後射影行列を元に戻すといった操作が有効。
auxバッファに蓄積してglCopyPixelsを使うという手もある
>>182 glRasterPos2*()/glWindowPos2*()とglDrawPixels()でいける
glScissor()もそうだが、もうこういうことは全部シェーダーでやる時代なんだよな
>>183 >>184 glRasterPos2fとglDrawPixelsで動作を実現できました
ありがとー
GSLS ESにて、画像の2値化を シェーダでやってみたいのですが可能でしょうか。 無知な初心者で申し訳ございませんが、 ご教授お願い致します。
二値化したい画像をテクスチャとしてバインド ピクセルシェーダで二値化しつつ描画 でおk
>>187 さん
ご回答ありがとうございます。
処理フローはなんとなくイメージできたのですが
"ピクセルシェーダにてニ値化する"点について
詳しくご解説して頂けませんでしょうか。
>>188 vec3 tcol = テクスチャから拾ってきた色;
if (どっちの色?(tcol)) (
gl_FragColor = 色1;
) else (
gl_FragColor = 色2;
)
ってやるだけ
>>189 さん
ご解説ありがとうございます。
あとは、参考書片手にやってみます。
ご丁寧にありがとうございました。
191 :
189 :2009/08/08(土) 16:23:07
ゴメン突っ込まれる前に一つ言い訳させて ifの複文の{}が()になってるのは単なる打ち間違いデスorz 自分の使ってるキーボード、(){}[]が全て同じキーなもので(修飾キーで打ち分ける) しかも古いCRTのフォーカスが甘くなってて打ち間違いに気付かなかった もういい加減LCDに買い換えるか・・・
このスレではGSLSとかHSLSって書くの流行ってるの?
OpenGLでWebサイトを表示したりできないでしょうか。 ポリゴンの上にHTMLをレンダリングしたいのですが。
OpenGL利用してる方々、衝突判定について、質問させて頂きます(あえて、数学板ではなくて)。3次元座標上の 一点が移動前と移動後で、ある平面上の三角形と衝突しているかどうかです。 移動前の座標:P0=[x0, y0, z0]、移動後の座標:P1=[x1, y1, z1] 平面:aX + bY + cZ = D 上にある三角形[x2, y2, z2], [x3, y3, z3], [x4, y4, z4] 1)まず平面を通過したかどうか判定 2)平面上の通過点を求める 3)その通過点が三角形内部にあるかどうを判定 で、質問は1)なんですが、教科書によると、平面の法線ベクトルN=[a, b, c]とP0、P1の内積を使ってP0・N + D とP1・N + Dの積が負だと1)の判定に合格するのですが、どうしてDを足すのかが理解できません。 衝突判定で悩んだ方、どうかお助けください。よろしくおながいしますだ。
それ足すんじゃなくて引くべきじゃないか? aX + bY + cZ + D = 0なら兎も角
196 :
デフォルトの名無しさん :2009/08/09(日) 11:12:39
>>195 さん、どうもありがとうございます。教科書によるとDは加算になっています。
float locationToPlane(float triangle[3], float againstLocation[3]) {
float normal[3];
triangleNormal(triangle, normal); // 平面の法線ベクトル算出
float A = normal[0] * triangle[0];
float B = normal[1] * triangle[1];
float C = normal[2] * triangle[2];
float D = A + B + C;
return DOT(normal, againstLocation) + D; // DOTは内積の計算
}
上のようになっていて、(P0・N + D)×(P1・N + D) < 0 だと平面を通過したことになるそうです。
この方法(アルゴリズム)を是非理解したいのですが、みなさんよろしくおながいしますだ。
>>196 >>195 のいうように、その場合の
平面の方程式は「aX + bY + cZ + D = 0」で
「aX + bY + cZ = D」が間違ってるんだろ。
しかし、
>>196 のコードは意味不明だなぁ。
教科書が間違ってるか、194さんが教科書を読み間違ってるかのどっちかでしょうねぇ。
平面の方程式を aX + bY + cZ = D と置いたなら、表裏判定は aX + bY + cZ - D > 0 ? になるし、
aX + bY + cZ + D = 0 と置いたなら、表裏判定は aX + bY + cZ + D > 0 ? になりますよ。
>>196 のコードは
>>194 の1)とは関係無いっぽいし、なんか194さん勘違いしてるんじゃないかな。
>>197 さん、どうもありがとうございます。
>>194 の平面式の部分は私が書いたのですが、教科書の著者は aX + bY + cZ - D = 0 を念頭に置いていたみたいですね。
>>195 さんが正しいです。すみません。
>>196 のC言語関数は、aX + bY + cZ - D = 0 に通過前の点 P0=[x0, y0, z0] を代入しているのだと思います。内積という言葉が教科書で使われていましたから、それで混乱してしまって。
でも、同じように通過後の点 P1=[x1, y1, z1] を代入して、result0×result1 < 0 だと平面通過判定合格なんですが、どうしてそうなるのかがわかりません。証明を知りたいんですが、どなたかよろしくおながいしますだ。
>>198 おお、どうもありがとうございます。
Cの関数
>>196 で使っているtriangleは平面上にありますので、それで法線ベクトル[a, b, c]を算出してるんです。
すみません、
>>198 さんのおかげで理解できました。表裏判定してて、それで積が負になると平面通過判定合格なんでつね!
みんなありがとう!!!恥かいたけど、聞いてよかた。 ^^;
|↑(a, b, c, D)・↑(x, y, z, 1)/sqrt(a^2+b^2+c^2)| が平面 0 = aX+bY+cZ+D と点(x, y, z) の距離を表すって知ってるかな? 分からないなら手計算で解いてみ(実はコレ小学校で習うけど)。
>>Cの関数
>>196 で使っているtriangleは平面上にありますので、それで法線ベクトル[a, b, c]を算出してるんです。
細かいことなんでスルーでいいんだけど、平面上の1点から法線は出せないだろ。
少なくとも3点無いと。
> float triangle[3] こりゃ確かにおかしいなw float triangle[3][3] とかしないと
>>202-203 みなさん、本当ご親切にありがとうございます・・・・
また、わからなくなってしまいました。ちょっと他のコードも調査してみます。
^^;
>>202-203 さん、わかりました。教科書
>>196 間違ってます!引数のとこで配列サイズ指定する必要無し
ですね!正しくは、3を9に変えるか、3を消去するかですね。
float locationToPlane(float triangle[9], float againstLocation[3]) {
float normal[3];
triangleNormal(triangle, normal);
float A = normal[0] * triangle[0];
float B = normal[1] * triangle[1];
float C = normal[2] * triangle[2];
float D = A + B + C;
return DOT(normal, againstLocation) + D;
}
>>205 > float D = A + B + C;
ここでそうするなら
> return DOT(normal, againstLocation) + D;
ここでは引け
>>205 だね〜。
で、あとは例えば、
その関数locationToPlane()に、againstLocationとして3頂点のうち1点を渡してみて
ちゃんとゼロが変えればOKだね。
>>206 さん、どうもです。教科書、間違いだらけですね。 ^^;
しかし、
>>205 の問題ってGCC警告出してくれないんですもん。
それ書籍とかじゃなくて誰かの落書きじゃないのか?
>>205 でも、typedefさえしないのけ。
typedef struct {
float x, y, z;
} point;
openglってこういうことしねーよな。実行速度なんて変わらんよ。
readabilityっていう概念0だな。
そもそもOpenGLの話しじゃないからな
いや、openglのコードって、vertex扱うのもfloat[3]だろ。 けっきょく配列のindex使ってんだから、構造体使っても速度同じ変わらんって。
線形代数ライブラリは、車輪の再発明多いし 標準化してもらってもいいかもね。 つーかboost::ublasが以外に使いやすいんでお勧め。 matrix4x4程度で速度が出るのかはわからんが。
>>213 でもグラボ(OpenGL対応の)って、日本のメーカーもつくってんだからさ、 NECとか富士通(も?)、日本からこういう技術を発展させるような動きって 出てこないのかね。 東大を始め、CGの世界じゃ日本の研究機関ってプレーヤーでさえ無いんだよな。
>>213 線形代数ライブラリは、CPUのベクトルユニットを使う/使わないの判断が
個々人に委ねられるというのも大きいし、標準化はし辛いんじゃないかな。
それに、頂点列やピクセルデータは単なるfloat(とかbyteとか・・・)の配列である。
っていうのがOpenGLのポリシーであるように感じられる。
自分で作っても大した規模にならないし、面倒なら
>>3 あたりやboost::ublasを使えばいいし
ってことで、今後も標準化は無いんだろーなーと。個人的にも必要性を感じない。
あー、京大の人のコメントは要りませんよ。
使うときには普通に
>>210 みたいにするけど、openGLの仕様で決まってると不便じゃないかな
CやC++専用じゃないんだし
俺もちょっと前にそれで悩んだ。 C用で、そこそこのパフォーマンスが出て、非GPLでとなると選択肢はほとんど無いのよね。 結局、 #define LOOP4(m) m(1) m(2) m(3) m(4) #define LOOP44(m) \ m(1,1) m(1,2) m(1,3) m(1,4) \ m(2,1) m(2,2) m(2,3) m(2,4) \ m(3,1) m(3,2) m(3,3) m(3,4) \ m(4,1) m(4,2) m(4,3) m(4,4) #define LOOP444(m) …… みたいなマクロを定義して、 #define VEC_DEF_ITER(i) typedef GLfloat vec##i[i]; LOOP4(VEC_DEF_ITER); #undef VEC_DEF_ITER #define MAT_DEF_ITER(i, j) typedef GLfloat mat##i##j[i][j]; LOOP44(MAT_DEF_ITER); #undef MAT_DEF_ITER と自前で作っちゃった。
>>217 だめだだめだ、そんなんreadabilityゼロだ。
日本はCGの世界ぢゃ、全然相手にされてないんよ。
俺、素粒子の物理屋だけどさ、欧米のCG関連の学会出てごらん。
日本の論文なんて引用ゼロに近いし、なんかsiigraphなんかでも通過してる
日本人研究者の論文ってほんとお情けで通してもらったってのがミエミエ。
ひどいよ、特に曲線曲面の理論発展には日本人の寄与度ゼロだと断言できる。
>>215 京大もこの分野ぢゃ東大と同じく、プレーヤーでさえないよ。
物理畑じゃお互い世界で認められてるけどな。
また変なのが釣れた……
東大 京大はNG推奨
またというか同じ人だろうな
GLには哲学が無いよ。設計者がシリコングラフィックス社っていう、糞ベンチャーの 先駆けにいた三流エンジニアだからな。 抽象化のなんたるかが分かってねーし、設計っていう概念もないからフレームワーク化にまで 頭が回らないつーか、お粗末で頭が回転しない。 それで日本だが、こんな出来損ないの技術を信奉してる連中が拡大再生産されてる現状を俺は 憂う。別に京大を棚に上げるわけぢゃないが、東大をはじめ、CG関係の教育がマジ貧しい。特に 高等教育がぜんぜんだめだ。GL学生に教えてイェーイ、マテマティカ大金出して(国立だと税金)買って 線分画面にさせるスクリプト学生に書かせただけで(しかも2Dで)イェーイなんての ばっかだ。 CGの分野じゃ日本は完敗よ。数学力の問題だとネラどもは言うかもしらんが、そうじゃないんだ。 設計っていうのはな、つまるところ哲学・抽象的思惟能力に左右されるんだ。 物理屋の俺に指摘されてもハッとこない連中、特にNECやSCE、富士通、あと ジャパネットたかたあたりで細々と開発してる連中、おまえらはプレやーでさえない。
じゃあスルーして、お前ら結局ベクトル型どうしてるの? boost::ublasって固定長ベクトルできないよね? なんか無駄しちゃってる気がするんだよね。
コピペ乙
いや、物理屋に言わせるとさ、日本のCG関連の技術者・研究者、税金ドロボー してんぢゃねーっつぅの!!! まじで。 研究でCG関連の技術俺等も使うこと、多いんだけどさ、お前等マジ何してんだよ って感じぃ。
>>223 3次元ベクトルは自作したのを使ってる。
皆さんに質問です。最近OpenGLを使って3Dのアプリケーションを作って 遊んだりしています。その過程で、グラフィック関係の記事やblogを見 てシェーダーというものがあるのを知りました。私はこれも興味をひか れているですが、ネット上の記述や説明では私には理解できません。 シェーダーとは何のためにあり、どんなことができるのでしょう? OpenGLでコードを描くよりも優れているのでしょうか?
>>227 調べたら普通に概念程度ならわかる気がするけど。
簡単に言えば、シェーダーを自前で書かない場合はOpenGL標準のライティングでしか絵を表現できないけど、シェーダーを自分で書くことによって自分好みのライティングにできる。(←これをプログラマブルシェーダーと言う。)
OpenGLに対応するシェーダーとしてはGLSL等があって、それらはOpenGLと組み合わされるものであって単独で何かができるものではない。
ここではライティングについて言ったけど、実際にはシェーダーの応用で2次元・3次元ともに様々な表現ができるようになる。
技術の外延が分かってないなあという意味では、 床井先生のところでバンプマッピングを静止画で出してたのは、あんま意味ないかなと思った。 「どの方向に光源があってもそれっぽいテクスチャが付く」ことが技術の肝だから、 光源に対して物体を動かしたときにこそ質感に大きな差が出るんだけどね。
>>227 まず、OpenGLのパイプラインアーキテクチャは分かるかな?
バーテックスシェーダは、「頂点単位の座標変換とライティング計算」を一般化したもの、
フラグメンテシェーダは、「フラグメントに対するテクスチャ適用」ステージを一般化したもの
なんだけど、上の括弧書きした部分が何を言ってるのか分からないようだと、シェーダの利点を
挙げても、???って感じになっちゃうと思う。
>>216 C以外でも使えるよう十分に低レベルなAPIにしたら、
逆にJavaでそのままのカタチでは使えなくなってしまったという罠ww
難しいもんだねぇ‥‥
あと放ったらかしになってる
>>193 なんらかのHTMLレンダラで絵を作るとこまでいけば、それをテクスチャにして表示できますよ
‥‥ってもしかしてGLでHTMLのレンダリングそのものをやりたいって話?
GLSLで書いたシェーダプログラムって、 画面描画の際に勝手に動いているって解釈で会っていますか?
>>232 大体合ってるw
VSなら頂点一つずつ、FSならフラグメント一つずつごとに、
同じシェーダがそれぞれ動作するよ
>>233 さん
ありがとうございます。
OPENGL ESで画像を表示しようとしたらglDrawPixelsが
サポートされてなくて困っています。
だれか解決案を教えて頂けませんか。
テクスチャを作って描画するしかないねぇ
>>235 むしろ、ESでないとしても、同じ画像を何回も表示するならテクスチャに貼ってVRAMにキャッシュしておくこと推奨だよな。
Orthoに戻すのが面倒ではあるが。
>>229 バンプの意味は「どの方向に光源があっても」じゃなくて、
「張られた面がどの方向を向いていても」それっぽい影がつくってことだと思うけど。
だから静止画でも立体に張ってれば効果はよくわかるからいいじゃんよ。
どちらにしろバンプマッピングはグリグリ回してみないと実感はしにくいね。 発展して視差遮蔽マッピングになってしまうけどDirectX SDKのサンプルにわかりやすいのがあったな。 OpenGLとしてもOpenTKのフォーラムに視差遮蔽マッピングのサンプルがあった。
鶏を割くに焉んぞ牛刀を用いん
尼で頼んでたOpenGL Library、発売日とっくに過ぎてるのに中々発送しねーなと思ってたら、 発送予定日が23日になったとかメールが来た。 夏休みに読もうと思ってたのにkonozamaかよ。
>>237 VRAMにキャッシュ?!
mallocのことでしょ?
なんか特別な操作するの?
>>242 ええー‥‥。
237さんの言ってること‥‥分からないですか??
>>244 そんな意地の悪いこと言わなくても・・・
んあー。意地悪かったのだろうか。 ごめん、別にそういうつもりは無かったんだけど‥‥ちょっと、ビックリしちゃったもんで。
別に意地悪じゃないだろ。 glTexImage*()が何をするのかを全く理解していないようだから しっかり赤本読んでおけ。
お前等、また同じ過ち犯してるよ。 木を見て森を見ずだ! もっと視野ひろげようよ。 そんなどこのメモリに領域確保しようが、そんなこん抽象化して 使いやすくしとかんきゃ、そらもうAPIとして失格なんよ。 まぁ、OpenGL作った連中に頭が上がらんのが殆どだからな。 東大を始めCG関連、日本の技術は貢献度ゼロだ。よっておまえらの 程度が低いのも当然だな。 設計が何かってわかってないよ、設計とは何かが。
>>249 だからー。おかしな人に触れちゃダメだってばー。
どうせ何言っても無駄なの分かってるでそ?
ここまで自演
またバカが湧いているのね。 小学校の夏休みが終わるまでしばらくこんな感じか。
>>249-253 おまえら、結局思想的に、つーか哲学がねぇんだよ。
だからOpGLをありがたーく使ってりゃいいんだよ。
まぁ、NECや富士通の技術者なんてこの程度かこれ以下
なんだろうなw
哲学がねーよ、哲学が。
お、今日はコテがついたw
マウスで中のオブジェクトを動かすのってどういう方法がオススメですか?
>>256 ごめんなさい
マウスで中の→マウスで描画領域の中の
です
ピックアップでggrks
openglレベルだと「セレクション」じゃないかな? 私は使ったことないけど
というか沢山あるオブジェクトの中から一部だけをピッキングしたいなら セレクションを使うけど、シーン内のオブジェクト全体をを回転/移動/ スケーリングしたいだけなら、virtual trackballが便利。適当にググれば コードでも数式でも出てくると思う。
>>260 256-257からどっちの意味なのか読み取れないからメンドクセと思って
私はレスしなかったけど、あなたは親切だねぇ。
(ちょっと話それますよ)
セレクションて最初はすっごい便利なんだけど、段々アプリが成長して
構造が込み入ってくると、そのうち限界がくるんだよね。
そうなるとシーングラフが欲しくなってくる。というかシーングラフってほとんど
ピック処理とか当たり判定だけのために欲しい。(描画だけならSGイラネw)
‥‥が、シェーダ流行な昨今、シーングラフはバーテックスシェーダと相性が悪い。
(gl_Position = ftransform(); なシェーダなら問題無いですけど)
その辺うまくやってる方っていらっしゃいます?
当たり判定用オブジェクトは表示データとは別、って割り切るしか無いのかなぁ。
すまん。ピッキングの実装にセレクションが使われるものと 思ってるんだけど、あってる? そういう考えで、「openglレベルなら」って書いたんだけど。
>>262 >ピッキングの実装にセレクションが使われるもの
ピッキングの実装にセレクションを利用することができる、という意味では合ってるし、
ピッキングの実装にセレクションを利用する必要は無い、という意味では間違ってるかな。
>>259 の書き方には特に問題無いと思うます。
windows XP、デュアルディスプレイ環境で glutFullScreenでフルスクリーン化をしているんですが、 メインディスプレイでフルスクリーン化してしまいます。 サブディスプレイでフルスクリーン化したいのですがどのような方法がありますか?
>>265 FindWindow()かなんかでウィンドウハンドルをとってきて
SetWindowLongとかSetWindowPosで枠無しにしてサブディスプレイのフルスクリーンに合わせる
サブウィンドウのサイズはEnumDisplayMonitors()で拾ってこれるみたい
検証してないんでglutの内部で持ってるウィンドウ情報と実際のウィンドウがずれるからなんか問題おきるかも
大丈夫な気もするけど
267 :
デフォルトの名無しさん :2009/08/13(木) 23:58:10
AndroidでOpenGL ESの勉強始めたんだけど、 AndroidにはglRenderMode()がなくて、セレクションとか フィードバックが使えないみたい。 OpenGL ESの1.0とか1.1ぐらいだと、 ピックアップする方法ってみんなどうやってるの?
>>266 おお、検証してみます
ありがとうございます
>>267 ピックは本来GLと関係無い処理なので、純粋に幾何学計算で交差判定をします。
一応、オブジェクトごとに固有の色(IDの代わり)でレンダリングしてglReadPixels()する
という方法も無いではないけど‥‥。
WinVista/C++でopenglモデル管理クラスDLLを作って、 その中でglGenLists(a)を呼び出すと常に0が返ってきて しかもプログラムが落ちるという現象が起こってるんですが、 DLLだとopengl32.dllのスタティック領域にアクセスできないとかなんでしょうか?
271 :
270 :2009/08/14(金) 11:27:57
補足として。ソースはこんな感じです。全部だと長いので要所のみ class APIENTRY model { private: GLuint id; public: model() { id = glGenLists(1); //常時0 //wglコンテキストを呼んでいる場合エラー落ちする } ~model() { glDeleteLists(id,1); } void render() { glCallList(id); //描画されず } void modeling(...){...} };
glGetErrorの戻り値は調べた?
>>271 全然要所になってないぞ。どこでそのクラスをインスタンス化しているかが重要。
まさかMakeCurrentもせずにやってるとか言わないよな?
274 :
270 :2009/08/14(金) 12:52:34
ためしにクラスを用いず
int main()
{
using namespace std;
GLuint hoge = glGenLists(1);
cout << (unsigned int)hoge << endl;
cout << glGetError() << endl;
};
としたところ、hoge=0、エラー=1282でした。
Vistaのopengl32.dllが悪いんでしょうか。。。
>>272 エラーを調べたところなぜかGL_INVALID_OPERATION(1282)が返ってきました・・・。
>>273 Listを使わず直接描画させた場合は正しく描画できましたので、
デバイスコンテキスト/ピクセルフォーマット設定/レンダリングコンテキスト/コンテキスト関連付け等は
とりあえずあってると思います。
>>274 全然分かってないな。コンテキストが無いとdlistは作れない。
276 :
270 :2009/08/14(金) 13:00:51
>>275 解決しました!
コンテキストのある間しかglにアクセスできないんですね・・・。
ありがとうございます!
>コンテキストのある間しかglにアクセスできない 当たり前だー! って感じなんだけど、初心者的には結構罠だったりするね そしていまだに、たまにやらかす俺様もダメぽorz
OpenGL ESでシェーダプログラムを組んでたんですが、 ベクトル型変数への加算をfor文で行ってたら、 シェーダプログラムが落ちちゃうんですが 仕様なんでしょうか? 以下のエラーメッセージが表示されます。 Expression: ("Buffer too small", 0) ループの回数を減らすと落ちないんですが・・・
エラーの時にエラーメッセージが出てプログラムが停止するのは仕様じゃね。 デバッグすればいいじゃない
>>278 ループできないハード/プロファイルでループしたら
ループは展開されてその分レジスタがいるよ
実行できる命令数に上限があるからじゃ?<落ちる
「Expression: ("Buffer too small", 0)」でググるとシェーダーとか関係なさそうなんだけどどうなんだろね。仕様かねw
ディスプレイリストをOpenGLコンテキスト間で共有していて、 共有しているはずなのに、 テクスチャの更新を行うとき有効になっていたコンテキストによって glTexSubImage2Dが失敗するのは何故だ、と思っていたら テクスチャのクラスで、glTexSubImage2Dする前にglBindTextureするのを忘れていた のが原因だった。これのせいでどれだけ時間を無駄にしたか・・
前スレ147あたりにオフスクリーンレンダリングについてまとめられていますが、 ・OpenGLの拡張が使えない古いPCでも動く(どんな環境でも動作する) ・ウィンドウが表示されていなくても使用可能 なもので、いい方法はないでしょうか。新しめのPCだったら間違いなくFBOを使っているんですが。 glReadPixelsは後者を満たせないようなので無理です。 glCopyTexImage2Dでオフスクリーンレンダリングが出来るというのはどう言う事なんでしょうか? 147 名前:デフォルトの名無しさん[sage] 投稿日:2008/11/08(土) 21:19:41 ・PFD_DRAW_TO_BITMAP ・glReadPixels ・glCopyTex[Sub]Image2D ・pbuffer拡張 ・render texture拡張 ・FBO(Frame Buffer Object)拡張 ・PBO(Pixel Buffer Object)拡張
>>284 普通glReadPixelsやCopyTexSubImage*はオフスクリーンレンダリングとは
言わないな。
FBOが理想だけど、それがサポートされていないような古いカードでもpbuffer
はサポートしていることが多い。それすらサポートしてないならAUXバッファを
使うけど、そんな古いカード/ドライバだとアクセラレーションが効くかどうかも
怪しいな。
render to texture拡張はFBOが出る前はWindows上で流行ったけど他の環境では
サポートれない場合が多い。
PFD_DRAW_TO_BITMAPはWindows専用、X上だとglxCreatePixmap()でOpenGLレンダリング
可能なPixmapを作成可能だが、少なくともXの場合はハードウェアレンダリングに
ならない。
>>284 突き詰めればOpenGLの初期化手段が環境に依存するし
GLUTとかクロスプラットフォームのライブラリを使えば必ずウィンドウがおまけで付いてくる。
ある程度あきらめるか、複数の実装をコンパイルタイムとランタイム両方で切り替えるか、
要件満たしてない環境ではMesa使って下さいってことにするしかないよ。
>>285 > 普通glReadPixelsやCopyTexSubImage*はオフスクリーンレンダリングとは
言わないってことはないよ。バックバッファに書いてスワップせずにコピーするんだから。
コインに似ている形を作りたいのだけど 組み方がわかりません。 あとものを上下に動かすプログラムを教えてください。
まずコインを3次元スキャンして立体データを得るところから始めよう
290 :
デフォルトの名無しさん :2009/08/17(月) 07:13:09
OpenGLの勉強をしたいのですが、いい入門書を教えてください。
292 :
284 :2009/08/17(月) 22:36:40
>>285 >>287 あまり古い環境ではあきらめる事にします。Mesaなんてのがあるのは初めて知りました。
FBOがサポートしていなかったらpbufferとかを使うことにします。
ありがとうございました。
FBOだけでいいよ。使えない環境を見つけるほうが難しい。
OpenGLのレンダリングステートを全て保存して復元する方法ってないでしょうか。 何をしたいかというと、自分のプログラムに 他の人が作ったプラグインを使って拡張できる機能を付けたいんです。 でもそうしようと思うと、glEnable/Disableや行列の設定を変えたりしたせいで、次のプラグイン の処理に影響が出ないようにする必要があります。初めはディスプレイリストを共有して やろうと思っていたんですが、コンテキストの切り替えが思ったより高コストで無理でした。 20回ぐらいで10FPS程度に落ちます。 なので、Singletonを使い1つのコンテキストを全てのプラグインで共有するようにしようと思ったんですが、 レンダリングステートを保存/復元するプログラムを作ろうにも、 レンダリングステートを設定する関数が多すぎて把握し切れません・・・。 何か良い解決策はないでしょうか。
プラグインを諦める
どうせ優先度とか表示・非表示とかアプリ側からいろいろ指定したりしたく なるので真面目にやるならコンテキストのラッパをプラグインに渡す 手を抜くならglPushAttribじゃね
297 :
294 :2009/08/17(月) 23:17:55
手抜きしたいのでglPushAttribを使います。 MANページでPushで検索してみたら glPushAttrib glPushClientAttrib glPushMatrix glPushName があるようですが、Nameはセレクションモード?で使うようなので使うのは上の3つだけですね。
プラグイン作成の手引きに、 「みんなのコンテキストです。変更した設定は元にもどしておいてください。」 って書いておけばいいんじゃね
ソレダ!
>>298 それは腐ったプラグインのデバッグやるはめになる死亡フラグだろ・・・
デバッグするのは「腐ったプラグイン」の作者じゃん
Listってモデルビュー行列のみなんでしょうか Listでモデルとライティングは呼べる事は確認できたんですが カメラ座標をListで登録して呼べないですかね?
いや、登録できるよ? glMatrixMode切り替え忘れてるんじゃない?
304 :
302 :2009/08/18(火) 10:58:17
>>303 登録
glMatrixMode(GL_PROJECTION)→glGenLists(...)→glNewLists()
→カメラ設定云々→glEndLists()
呼び出し
glMatrixMode(GL_PROJECTION)→glCallList(...)
のような形になるのでしょうか?
あとそれで思ったのですが、もし登録時に
glGenLists(...)→glNewLists()→glMatrixMode(GL_PROJECTION)
→カメラ設定云々→glEndLists()
とすれば、glCallList時にglMatrixMode()の切り替えが必要なかったりします…?
ディスプレイリストは関数呼び出しを纏めてるだけだから、 登録時のアトリビュートがどうこうとかは関係ないよ。 特定の行列を変更したいならディスプレイリストの中でglMatrixModeを呼び出せばいい。
306 :
302 :2009/08/18(火) 11:31:16
>>305 ありがとうございます、おかげで解決しましたm-_-m
Windows上の開発でOpenGLで3Dゲーム作る場合何言語が必要?
日本語
英語も
あと、スワヒリ語もやっとくと、いざという時に便利
311 :
デフォルトの名無しさん :2009/08/19(水) 19:14:31
つまんないレスしてないで、真面目に答えろよカス。お前のそういう所が嫌いだ
2ちゃんでまともな答えを期待する方が間違い そもそもの質問内容からして馬鹿過ぎるし
ポリゴンの一部にテクスチャはるにはどうしたらいいんでしょう? マジで助けて・・・
どうしてそんな悪い質問の典型みたいな質問をしてくるんだ...
OpenGL ESについて、ご質問させてください。 プログラマブルシェーダを使って、 指定した画像のエッジ強調などの処理を行っているのですが、 画像処理の結果を画面に描画しないことは可能でしょうか。 プログラマブルシェーダは画面描画契機で動作するので、 描画無しでプログラマブルシェーダによる画像処理は 不可能と考えているのですが・・・。
>>315 簡単な方法としては、フレームバッファをスワップしなければ、描画結果は画面に出ないでしょう。
もっといいのは、Frame Buffer Objectを使う方法ですが。
ただ、「描画無しで」プログラマブルシェーダを動かすのは無理ですけどね。
描画しても画面に出さなければいいわけで。
>>317 それが判らないなら君はこのまま一生掲示板で誰にも答えてもらえない人生を送るだけだから。
良い質問の書き方 これこれこういことをやりたくて、こういう環境でこういうふうにやってみました。だけど、これがこうなって、こうなります。 ここを参考に、ここをこうしてみて、こうなることを期待したのですが、こういう症状がおきます。 どこかやりかたがまずいのでしょうか?
>>313 無理なので、ポリゴンを分割してください。
あるいはGL_DECALとかでテクスチャを貼って、不要な部分はテクスチャの
アルファを0にしておけばそれらしく見えるかも。
>>316 さん
ありがとうございます。
esCreateWindowでウィンドウを作成した上で
描画しないとプログラマブルシェーダを動かすのは無理そうすね。
>>318 >>319 なるほど、そういうことですか。
あんまり書き込みとかしてこなかったんで・・・すいません。
>>320 ありがとうございます。やってみます
glreadpixelsでフレームバッファの情報を取ってきて BMPファイルに出力なんてことを考えているんですが、 glreadpixelsで取ってこれるフレームバッファの情報は ウィンドウに表示されている画像っで認識合っていますか。 ウィンドウを非表示にしている場合はglreadpixelsを使っても 動作しないという認識で合っていますか。
リファレンス読んでから、そういう質問はしようね。
MathGL++、なんで俺のような日曜プログラマでも気づけるようなバグが放置されてるんだ…… GLMatrix.hの > inline T cofactorm13() const { return cofactor_maker(m2,m7,m8, m3,m4,m10, m10,m6,m11); } は > inline T cofactorm13() const { return cofactor_maker(m2,m7,m8, m3,m4,m10, m0,m6,m11); } が正しい。逆行列で妙な値を出すからおかしいと思ったらまったく。 最新版ver.はconfigureやMakefile使えって書いてあるのに付いてないし
直接言えよ。お前は馬鹿か?
確認した、情報thx。 9も間違ってるね。
330 :
デフォルトの名無しさん :2009/08/21(金) 16:43:39
すみません教えてください。 トランプみたいな板があって裏表に違うテクスチャを張りたいのですが この場合表用、裏用の2つのポリゴンを用意しなければ行けないのでしょうか?
332 :
デフォルトの名無しさん :2009/08/24(月) 12:43:17
Blenderで作成した3DデータをOpenGLで表示するには どうすればいいでしゅか?
まずBlenderで作成した3Dデータのファイルフォーマットの仕様を調べます 次にその仕様に従ってデータを読み込むプログラムを書きます 最後に読み込んだデータをOpenGLで描画します
すばらしい完璧な回答だ
>>332 wavefront objにexportして、GLUTについてるsmoothっていうdemoの入力にすれば表示される
遅くてもいいからとりあえず表示したい時ならばだけど
336 :
デフォルトの名無しさん :2009/08/25(火) 11:18:14
完璧な回答にはレスが付きにくい レスが欲しければ少し頭をひねれ
339 :
デフォルトの名無しさん :2009/08/25(火) 21:57:30
>>337 いや、俺もいい回答だと思うよ。実に論理的だし何も間違ってない。
そうかね、 質問者が望んでいない形、(第三者にとって)情報としても価値ない そんな回答にも見えるがね。
前スレで基地外が発生したことを考えれば、意地が悪くなるのも仕方ないというか。 まあ楽したいなら普通はOpenSceneGraphとかを使えと思う。
>>333 は確かに意地悪だとは思うけど、
>>332 みたいな質問をする人って
実際のところ
>>333 程度のことすら理解できてないんじゃないかって気もする。
なんか関数一発で表示できるとでも思ってるんじゃないかと。
だね
エスパー不要であることを暗黙に知らせるのには 「適当なローダかラッパのライブラリはありませんか」と聞くことだろうな。
>>340 質問者が望んでいないかどうか良く分かるね
情報としての価値が無いのはあなたにとっての話しでしょ、初心者には有益な情報だと思います
質問者にとって文末が「調べる」や「書く」で終わる回答は常に望まれた回答では無い
自分で調べるのは嫌なのか なまけものめ
blenderのデフォルトのフォーマットでっていうのが そもそも非推奨じゃなかったか? 仕様書とかもなかったような
今日からオープンGLやるよ(´・ω・`)
350 :
デフォルトの名無しさん :2009/08/27(木) 22:18:34
【衝突判定】についておたずねします。 立体図形の中を上下左右自由に行き来できるようにしたのですが(OpenGLで)、 衝突判定がどうしてもできないで困っています。 すべての三角形のデータでメッシュを構成してあって、視点移動が起きた時に 移動の前後で三角形に衝突したどうかを調べてます。 まだ素人なので衝突しているはずがない三角形についても衝突判定をしています。 みなさん、衝突判定のために立体データはグループ分けみたいなことをされてるん でしょうか? もう三次元モデルのファイルを作り上げてしまったので、グループ分けしないで 衝突判定するには全てのメッシュについて判定を行うしかないのかと悩んでます。 じょうずなアルゴリズムをご存じのかた、どうかご指導を。 <(__)>
スレ違い
352 :
デフォルトの名無しさん :2009/08/27(木) 23:15:32
>351そんなん言わんで答えてあげたら?
353 :
デフォルトの名無しさん :2009/08/27(木) 23:18:10
おおざっぱな判定でよければAABBが最強
> まだ素人なので衝突しているはずがない三角形についても衝突判定をしています。 > 衝突判定がどうしてもできないで困っています。 矛盾してるな
正しい衝突判定が、だろ 分かってるくせに
衝突判定といっても、高速性が求められる場合もあれば、正確性が求められる場合もあるし、 迷路ゲームみたいにカメラが動くだけで物体は固定の場合もあれば、 群集やパーティクルみたいに大量の物が動きまくって判定しないといけない場合も。 どうしてますか?って聞かれれば、ケースバイケースで、うまいことやってますとしか答えられないような
衝突判定って実は難しいって事だけまずは知っておけ。
bulletつかうとか
360 :
デフォルトの名無しさん :2009/08/29(土) 20:24:55
お返事が遅れてすみません。350です。
「長渕剛にだったら喧嘩余裕で勝てるよ」って他で書いたら
めちゃくちゃな反応されてたもんで。
先ずむかつくのが
>>358 だな、馬鹿丸出しだし。
>>351 については木黄山強に顔射でもされるといいよ。
つーか、役に立たんな2chは・・・
夏休みの宿題終わったのか? 2chばっかやってると後悔すっぞ
第三者のいたずらレスだろう
面白いと思ったんだろうか
真剣な人間にはヒントの宝庫だけどな、このスレ
365 :
デフォルトの名無しさん :2009/08/29(土) 20:54:29
2cnなんだから、多くを求めないどこようよ。
変なのが消えて、また過疎スレ化するのかな・・・ そういえば夏も終わりだねぇ
たしかに衝突判定は難しい。 俺も衝突判定については、何年も悩んで 試行錯誤を重ねた。 それで、ひとつの解に辿り着いた。 それは、全然難しくない、 むしろ簡単、至極基本的な方法だった。 悩んだ自分にむかつくので教えませんが。
落ち穂拾いが少しできたし。 自分の知識の再確認をする機会にはなったかも。
glBufferDataARB glBufferData などのようにARBが後ろに付くものとそうでなものがありますが、機能的に 違いがあるのですか?
ほとんどはない 一部引数とか違うものもあったはずだが、覚えてないや サポートされてるOpenGLのバージョンやらなんやらによって どちらか片方しか使えない場合があるので、 可搬性を考慮するなら両対応しておきたい
ARBは Architecture Review Board の略で、標準でない拡張機能的な意味合いを含んでいるから、 両方あって、特に拘る必要がなければARBが無い方を使っといた方がいんでね?
「ARB」の拡張機能は次バージョンでの採用候補的な意味合いが強いから、 ARB→無印で仕様が変わることはほとんどないね。
その拡張がサポートされているかどうか確認したうえで、ARB使った方が サポートできるグラボが増えていいと思っているが、そんな単純ではないのか? glBufferDataに対応していれば、glBufferDataARBにも対応しているはずだよね?
ARBの方が関数名長いし、きっと早いんだろうなと思って使ってた俺アホだな
サポートしたい最低のOpenGLバージョンを決めて、そのバージョンで標準化 しているものについてはARBやEXT取って使えばいいよ。でないとキリがない。 どの機能がどのバージョンでARB拡張になってどのバージョンで標準入りしたか は一度整理しておくと良いけど。
使いたいものがあれば動くしなきゃ動かないで十分じゃね
ゲーム作ってるんだけど、シーンが変わったときに glTexImage2DとかglNewList/glEndListなんかを たくさん呼ぶのでそこで描画がもたつきます。 描画は止めたくないからglTexImage2Dとかだけ 描画とは別のスレッドで呼びたいんだけど、 エラーになってしまう。どうしたらいいのかな?
古典的すぐるが一気に呼ばない
>>379 もしたとえば1フレームに一枚テクスチャを作るとか決めると、
逆に余裕があるときにロードがどんどん早く進まなくてちょっと困るなあ……
そのへんうまく調節するように書いても、
複雑さが増すわりには根本的な解決にならないし。
普通の市販のゲームはどうやっているんだろう?
NowLoading的な画面で予め確保すればいいんじゃないの
NowLoading画面が静止画ならそれでOKなんだけど、 たとえば「NowLoading」の文字が点滅してたりすると NowLoading画面の時も描画は止められないんです。 その点滅が不規則で、どうやらロードの合間に適当に描画を挟んで ごまかしてるっぽいゲームもあるけど、 もっとしっかりしたアニメーションをするNowLoading画面を出してるゲームもあって、 どうやっているのかな、と。
ファイルの読み込みと圧縮の展開だけ別スレッドでやって glTexImage2Dだけメインスレッドでやれば軽いんじゃない それか読み込み展開ルーチンそのものを細切れに動かせるように作るとか
NowLoading 画面を別スレッドにすればw 昔は割り込みでアニメさせてたりしたなー
>>glTexImage2Dだけメインスレッドで 手元のプログラムはまさにそれになってけど、ときどきもたつく。 glTexImage2D や glNewList を細切れに呼び出すとロードが遅くなるし、 何よりコードが煩雑になるのが嫌で…… 静止画でNowLoadingが一番シンプルだけど、ユーザにフリーズか?と思われるかもだから、 プログレスバー的な意味でも何かアニメーションしたいな シンプルで根本的な解決策はないということかな
>>385 プログレスバーを出すだけならFPSを一定に保つ必要は無いし簡単でしょ。
実際PCのゲームだとそういうのが多い感じ。
387 :
sage :2009/08/31(月) 20:21:18
glLoadIdentity()ってglPushMatrix()+glPopMatrix()のペアと 同じって考えていいの? 座標がどうなっているのか、本当に理解しにくい。
>>387 だいぶちがうよ。
push/pop は変換行列の状態を保存しとくのだけど、
LoadIdentity は変換行列を単位行列にかえる。
popはpushしたときの状態に戻るのであって、いつも単位行列に戻るわけじゃないよ。
>>386 以前やったゲームに、ロード画面で
キャラクターがCD-ROMを運ぶアニメーションをするのがあってさ。
ちゃんと一定のスピードで。そういうのがやってみたいんだ。
ロード画面ごときに、そこまで細かい演出しないゲームのほうが多いけど。
>388 どうもです。 glLoadIdentity()呼んだ直後でglPushMatrix() って無意味なんでつね。 やっと分かったような。
んー、ホントに GL の関数が遅いの?
>>390 無意味ってわけじゃないよ。単位行列を保存しておきたいのならLoadIdentityの次にPushMatrix使うよ。
例えばオブジェクトA, Bって順番で描画するときにAにだけ変換行列かけたい場合に
LoadIdentity
PushMatrix
オブジェクトA描画
PopMatrix
オブジェクトB描画
ってな感じに使える。
オブジェクトA描画の前に「変換行列をかける」を忘れていた。
>392 わかりやすいです、どうもありがとう!
>>392 > オブジェクトA描画
LoadIdentity
> オブジェクトB描画
と等価だよな
>395 ありがと。 今日OpenGLのばぐ取りしてたら、以前ここで質問したことその まま忘れてて、今やっとデバッグできた。 ここに居る連中すごいね、俺が数日かけてデバッグするのを ちょっとみて「そこ[3]じゃなくて[9]だ」って指摘してたしな。
みんなきっと、似たような間違いを経験してるんだよw
398 :
デフォルトの名無しさん :2009/09/02(水) 22:46:15
質問です サイズ512*512の24bitbmpをテクスチャとして正方形のオブジェクトに貼ろうとしているのですがうまくいかず 真っ白(オブジェクトの色)になってしまいます 64*64〜256*256の画像ではうまくいきます 複数の枚数のテクスチャを読み込んで複数のオブジェクトに貼ろうとしているのですが 例えば512*512の画像と256*256の画像を二つのオブジェクトに貼ろうとした場合 最初に512*512の画像をgentextureして続けて256*256の画像を同じようにしてそれぞれ貼り付けると両方とも真っ白になります しかし順番を逆(256*256の画像をgentextureしてから512*512の画像をgentextureする)にすると前者だけうまく貼れて後者は真っ白になります サイズの制約も守っているので理由がよく分かりません 分かる方よろしくお願いします
PS3薄型と旧型の違い 旧型PS3: Linuxインストール機能内蔵でPS3をPCとして使うことができる。 PPC Linux用の無料のソフトがいっぱい動く。 また、Cellの開発ツールも無料で入手できるので自分でCellのプログラムを作って実行させることができる。 ドルビーTrueHD、DTS-HDMAはリニアPCM変換で対応。 HDD〜80G。実勢価格30000円程度 薄型PS3: Linuxインストール機能は除去された。 ブラビアリンク機能でブラビアと連動した電源のON OFFができる。 ドルビーTrueHD、DTS-HDMAのビットストリーム出力対応。 HDD120G。低騒音・発熱・消費電力。実勢価格29980円
>>398 一応、確認。
glBindTexture()したあと、
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
は指定してる?
あとグラボの種類は?
401 :
デフォルトの名無しさん :2009/09/02(水) 23:17:02
>>400 parameteriによる指定はしてます
対象のPCが手元に無いので詳細は今分かりませんが
nVidiaの古めのグラボ(AGP接続だったはずなので)です
402 :
デフォルトの名無しさん :2009/09/03(木) 22:32:48
>>400 すいません
確認してきましたが違いました
GIGABYTEから出てるGeForce6600搭載のビデオカード(PCIーE接続)でした
>>400 >>401 先にCAD(blenderか何か)でモデリングしてテクスチャー貼っておいて、
それをOpenGLのほうで読み込むっていう手法をとらないの?
404 :
デフォルトの名無しさん :2009/09/03(木) 23:45:47
カメラ行列からカメラのxyz角度出したいんだけど、 カメラ行列ってどうやって求めるんでしょう? 行列から角度もとめる関数は作ったものの肝心の行列がわからん。 参考サイトでもいいので教えてください。
GetDoubleとかの関数でProjectionMatrix取得すればいい。でもカメラの角度ってことはModelviewMatrixか。
406 :
デフォルトの名無しさん :2009/09/04(金) 01:24:56
>>403 少し自分のやりたいこととは違ってしまうので
上記のようにテクスチャ作って貼り付けたいです
なぜ512*512の画像だと読み込めないのか原因も分かりませんし・・・
glGetError()でチェックしてるか?
GL_MAX_TEXTURE_SIZEで問い合わせてみるかOpenGLExtensionViewerとかでサポートしてるテクスチャサイズを確認してみたら?
画像を読み込むプログラムが間違ってんじゃないの? ソースをupしないなら、あーじゃないのこーじゃないのってナゾナゾの域を出ないような
GeForce6600でできないはずがない。 作成:glGenTextures、glBindTexture、glTexParameteri、glTexImage2D 描画:glBindTexture、glVertex*、glTexCoord*、(glDraw*)
411 :
デフォルトの名無しさん :2009/09/04(金) 23:49:29
なんとなく、どこかでメモリ確保サイズを超えて読み込んでるとか、 glPixelStorei(GL_UNPACK_ALIGNMENT, -); が間違ってるとか、そんな気がする。
色を元に戻すのってglColorf(1.0, 1.0, 1.0, 1.0);使うしかないの? glLoadIdentity();じゃ元通りにならないんだよね。orz
glPushAttrib(GL_CURRENT_BIT)/glPopAttrib() 色だけなら現在値を記録しておいて戻したときにglColor呼び出しても良いと思うけど
>>409 ソースはここのプログラムのビットマップ読み込みの部分をそのまま使用しています
http://www.t-pot.com/program/69_medianfilter/index.html CBitmapクラスを利用して読み込んで、呼び出した別クラスでは直後にtex_idでBindしてparametoriで設定しています
貼り付ける部分はこんな感じです。正方形を示す頂点vertex配列で作ったオブジェクトにテクスチャを貼り付けようとしています
tex1 = SBitmap::Load(texture2);
glBindTexture(GL_TEXTURE_2D, tex1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
〜〜〜〜
glPushMatrix();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D , tex1);
glColor4fv(color);
glBegin(GL_QUADS);
glNormal3fv(normal[0]);
for (i = 0; i < 4; i++)
{glTexCoord2dv(texcoord[i]);
glVertex3fv(vertex[face[0][i]] );}
glEnd();
glDisable(GL_TEXTURE_2D);
glPopMatrix();
読みにくくてすいません。他に示すべきところがあれば補足します
俺の環境ではクランプモードについても毎回指定しないとテクスチャが表示されなかったこともあった。
現在のレンダリングコンテキストが OpenGL 2.0 と互換性があることを「ステートから 判断」するにはどうしたらよいのでしょうか? glGetString(GL_VERSION) で取得したバージョンのメジャー番号が 2 のときは互換性 があると思いますが、3 以上のときは Deprecated があるのでバージョン番号だけでは 判断できないと思うのですが。
>>415 Loadが返す値tex1が0では無いことはチェックしてる?
>>418-419 Loadが返す値は0になってました
やはりCBitmapに問題があるんでしょうか?
>>415 のソースは何か問題ありますか?
使う画像は24ビットbmpと制約をかけて使用しています
>>420 0025: int CBitmap::_CheckSize(unsigned int pict_size)
0026: {
0027: unsigned int i=2;
0028: const unsigned int TEX_SIZE = 256;
0029: unsigned int max_texture = TEX_SIZE*TEX_SIZE;
そこらのサンプルはそのまま使わない。 サンプルが完璧だと思わない。 自作する気がなかったらライブラリと公開されていて、 みんなが動作確認してるものを使った方がいい。
ライブラリとして
>>421-422 手元に環境と実際に試してるプログラムが無いので
曖昧なのですがその辺りは変更したような気がします
月曜に確認してみます
もしダメでしたら再度質問します
ありがとうございました
BMPくらい自分で作っちゃえば。 glTexSubImage2Dを使えば2のべき乗じゃないサイズも使えるよ。
読み込むbmpファイルのファイル名が間違ってたりしてなw 最近プログラミングはできるけどデバッグはできない人って増えてきた気がする
デバッグができないプログラム技量なんて意味ないもんな。 極論するとプログラムの技量は、どれだけデバッグ早くより完全にできるかの技量、と言える。
なるほどぉ
半分くらい同意。しかし一方で、バグを産まないプログラミングスタイルもあるからな。
「どれだけ早くより完全にできるか」でいいんじゃね 最初からバグが混入しないようにするもよし、デバッグが早くなるように努力するもよし
どうしててもいいけど、うまくいかなかったらデバッグしろって話。 手順A->Bがうまくいかなかったら、まずAだけをテストするとかそういうレベル
なるほどなぁ
>最近プログラミングはできるけどデバッグはできない人って増えてきた気がする それはプログラミングできるって言って欲しくない。 プログラミングは正常に動作するまでデバッグの繰り返し。 プログラミングそのものがデバッグって考えてる人もいる。 できない人が増えてるのは、講義とか研究でプログラムを使う学生が増えたからじゃないかな。
これはしたり
関係無い話は他でやれ
>>414 ありがとう!
色のリセットは、やっぱりglColor(1, 1, 1, 1);
がよさそうですね。
438 :
デフォルトの名無しさん :2009/09/07(月) 03:01:50
テクスチャにアタッチしたFBOを使いたいのですが、どうもうまく使えません。 下記のコードで変なところがないか指摘していただけるとありがたいです。 // 初期化部 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glGenTextures(1, &fbo_texture); glBindTexture(GL_TEXTURE_2D, fbo_texture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE_EXT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE_EXT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glBindTexture(GL_TEXTURE_2D, 0); glGenFramebuffersEXT(1, &fbo); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, fbo_texture, 0); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // 初期化部ここまで
439 :
デフォルトの名無しさん :2009/09/07(月) 03:02:49
>>438 のつづき
// テクスチャへの描画部
glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity();
glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity();
glPushAttrib(GL_VIEWPORT_BIT);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);
glViewport(0, 0, 256, 256);
glMatrixMode(GL_PROJECTION); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW); gluLookAt(0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glColor4f(0.0f, 0.0f, 0.0f, 0.0f);
glBegin(GL_LINES);
glVertex3f(-100.0f, -100.0f, -100.0f);
glVertex3f(100.0f, 100.0f, 100.0f);
glEnd();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glMatrixMode(GL_MODELVIEW); glPopMatrix();
glMatrixMode(GL_PROJECTION); glPopMatrix();
glPopAttrib();
// ここまで
エラーくらいチェックしろよ
441 :
デフォルトの名無しさん :2009/09/07(月) 03:06:57
>>439 のつづき
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, fbo_texture);
glColor4f(1.0f, 1.0f, 1.0f, 0.5f);
glBegin(GL_TRIANGLE_STRIP);
glVertex2f(0, 0);
glVertex2f(0, 1);
glVertex2f(1, 0);
glVertex2f(1, 1);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
FBOテクスチャにレンダリングしたときのglClearColor(1,1,1,1)の色は
ここで反映されているんですが、描いたはずの直線が表示されません。
glClearColorを赤にすれば赤の四角が描画されるので、FBO自体は使えているようなのですが・・・。
442 :
439 :2009/09/07(月) 03:08:16
>>440 エラーチャックというとまずは
glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)でしょうか。
これは大丈夫でした。
UVドコー
444 :
439 :2009/09/07(月) 03:22:27
>>443 うぉ!!ないっ!
今すぐ確かめてみます。
445 :
439 :2009/09/07(月) 03:30:11
興奮して連投になってすみません…。 テクスチャ座標を指定したら正しく描画できました。 土日苦しんだ悩みが解決しました。 初歩的過ぎてすみませんでした。本当にありがとう!
これはこれは……
glTexImage2D() の最後の引数 data に NULL を与えてもテクスチャオブジェクトを 生成することができますが、glCompressedTexImage2D() の最後の引数に NULL を与 えた時も同じようにテクスチャオブジェクトを生成することはできるでしょうか?
お聞きしたいのですが、 void display(int color[][3]){ int i,j,k=0; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POINTS); for(j=0;j<250;j++){ for(i=0;i<250;i++){ glColor3d(color[k][0], color[k][1], color[k][2]); glVertex2d(i,j); k++; } } glEnd(); glFlush(); } main(){ int color[250*250][3]; … glutDisplayFunc(display(color)); … } と、同ウインドウ上にmainで指定した異なる色で点を描画したいのですが、 glutDisplayFunc(display(color))の引数が少ないといわれます。 解決策はありますか?
449 :
448 :2009/09/07(月) 17:55:05
連投すみません。mainは main(int argc, char *argv[]) です。
グローバル変数で渡す
>>448 ここはコンパイルエラーの解決方法を聞く所ではない。
>448 そのレベルでやってるのか >450 的確すぎる
ワロタ int g_color[250*250][3]; ... void display(void) { int (*color)[3] = g_color; ... } main() { ... glutDisplayFunc(display); ... } こんなのだろ
454 :
448 :2009/09/08(火) 13:18:13
>>456 , 457
そのへんのページ読んでみたら何となくわかってきたかも……
いわゆるパーティクルというやつで
ちいさいスプライトをたくさん描けばいいわけだな?
ちょっと実装してみるよ。実用に足る速度になるかわかんないけど
ありがと
459 :
デフォルトの名無しさん :2009/09/12(土) 00:00:14
質問していいですか。 平行投影と透視投影を切り替えたいのですが、一度透視投影にした後は、 平行投影に戻せなくなります。 glMatrixMode(GL_PROJECTION)して、glFrustumすると何らかのパラメータが 設定されてしまうからと思ってますが。
glFrustum, glOrtho する前にちゃんと glLoadIdentity してる?
直前にしてます
glGetErrorでエラーチェックしろ 問題が再現する最小限のコードを張るなりどこかにアップロードしてリンクしろ
すみません、いま実験で取り込んでて、今晩中か明日くらいにうpします;
モデルビュー行列にglOrthoやってるぞ。
アホすぎるだろ
ありがとう。 なるほど、glOrthoやるときはGL_PROJECTIONしてからやる必要あるのね。 glOrtho使ったことなかったから知らなかったわ;
void display(void) { glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glMultMatrixd(rot); ・ ・ void resize(int w, int h) { glViewport(0, 0, width = w, height = h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(mode == 1) { gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); } else { glOrtho(-2.0, 2.0, -2.0, 2.0, 0.0, 10.0); } glMatrixMode(GL_MODELVIEW); } で解決しました。ありがとうございます。
>>467 そういう問題じゃないだろうw
プロジェクション行列を設定するならGL_PROJECTIONを指定しなさい。
glFrustumもglOrthoも、プロジェクション行列を生成する命令。OK?
初心者にはProjとModvの意味が分からんからな。俺もそうだった
GLの、この読み出してんだか書き込んでんだか 見た目わかりにくいライブラリがすべて悪い
低レベルな質問ばかりだな。せめて赤本には目を通せよ
俺はシャドウマッピングを初めて試したときに、OpenGLの行列まわりの理解が曖昧だったのがしっかりしたな。
独り言はチラシの裏にでも書いといてね。
>>472 >せめて赤本には
皆さんって赤本は必携なの?
ネット上に赤本の初版が公開されてますが、あれではだめ?
もすこし手軽な入門書を紹介していただけませんか。
OpenGLをやりたい と 手軽に覚えたい は 相反する願望です。 てか赤本も腰据えて読めば手軽に感じるよ。
「OpenGLの神髄」でさらりと全体を概観してから赤本に進むのがいいんじゃないの。 これからはじめるなら。
>>475 OpenGLの概要を理解するのに赤本が一番手っ取り早い。
読むにあたって敷居が高くもないと思うが。ウェブに置いてあるのは
OpenGL 1.1対応版だが、それで基本は押さえられるからいいよ。
第5章まで読んで、あとは必要に応じてで十分。
シェーダー関連は赤本だけじゃ足りないが。
必携だとは言わないけど赤本の内容ぐらいは理解しているべき これから始めるならって事なら、固定機能パイプライン弄るだけの古いOpenGLの使い方覚えてもしょうがないと思うなあ
ここに来る初心者の大半が固定パイプラインを使っているという事実
固定機能を排除するにしても、固定機能の代替となるようもう一段ミドルウェアをかまさないとつらいからな
正直固定機能いらない・・・ 一度3.0前方互換使うとあんなにデバッグしにくい代物使う気無くすよ。
シェーダーで固定機能のエミュレーターを書くのが辛すぎるのがなぁ 分岐の解決がコンパイル時かシェーダー内かって極端なんだよ drawした時点で条件分岐を解決して命令をフラットに並べるというようなものが欲しい
visual studioを使ってopenGLを使いたいのですが、 どこでダウンロードできるのでしょうか? ググってたら1日が終わってしまいした・・・
windows sdk
475ですだ。 みんなありがとう、赤本ってエロ本と同じくらい大切なんでつね! でも、みんなレベルが高すぎて結局シェイダーの話とか パイプラインの話とかになってしまうんでつね・・・・
このスレでいいのかわからないけど、質問です。 四元数でつくった関節の可動域を制限したい場合、どんな計算をしたらよいでしょう?
人柱頼んだ
赤本って2chでは人気あるけど、アマゾンでは(米国でも) 最低の評価。
最低じゃないじゃん。amazon.co.jpでの評価5じゃん。 amazon.comでは最近のは評価が低いな。昔の(1.4とか)は評価高いが。
OpenGL3.0対応を謳ってはいるがそれについての内容が微妙ってのが原因だったような。 前調べたときの印象だから今は知らんが。
>>489 のOpenGLスーパーバイブルは何か、ここでは誰も読んでないんでつか・・・
そーでつかぁ・・・
>>493 著者がOpenGL3.xのdeprecation modelに批判的だからな。
今年のSIGGRAPHで見かけたから聞いてみたらそんなこと言ってた。
まあ基本を押さえれば後はクイックリファレンス見る程度で十分だとは思う。
本屋で見たけど窓環境依存の説明が多くて、こりゃ要らんわと思った 窓以外の環境で使ってる人にはお勧めできない
497 :
デフォルトの名無しさん :2009/09/19(土) 02:20:09
ESならそれ用の本が別にあるだろ
499 :
デフォルトの名無しさん :2009/09/19(土) 10:36:03
>>498 > ESならそれ用の本が別にあるだろ
たとえば?
>>500 それ、プレステ開発用のOpenGLバージョン1.1じゃなくて、2.0の説明
なんだよな。
赤本に文句付けるとすれば、やっぱどこ?
俺はESの説明箇所が少な杉だってことだけど、2ch代表して苦情
出しとこか。
こいつ恥ずかしすぎる
間違えた。
>>501 は阿呆の2ch代表
500ごめん
Quadro FX 1300とQuadro FX 370だとどっちが高性能か教えてくれんか?
スレ違い
Mac でカラー指標モード動かすこと可能?
なんというか・・・本気だろうが冗談だろうが、 相当に頭の悪いというか、よくもまあそんな幼稚な発言を平気で出来るなあ・・・。 こんな馬鹿なレスされたら、逆に笑えないな・・・。
ここ、そういうの多いから気にしてたらダメよ
まっとうな京大院生なら、苦情出す前に自分で本書きはじめるだろ。
glVertexPointerにはvoid*型で渡すようになってますが APIではどうやって渡されるポインタをheadとする列の終端を探知してるんですかね? 座標の数、それを表す型(のサイズ)、ストライドだけじゃ もう一つそのポインタで表現されている列に含まれる頂点の数ってのが判ってないと 終端がわからずに範囲外までいっちゃうと思うんですが
別に終端を探知したりしない glDrawArrayやglDrawElementsに渡したインデックスが範囲外だったら、素直に範囲外まで行って落ちちゃう
514 :
512 :2009/09/23(水) 16:28:09
>>513 なるほど、探知しないんですね
かなり勘違いしてたようです
解答ありがとうございました
KMCってまだあんのか?
516 :
デフォルトの名無しさん :2009/09/24(木) 16:13:45
すご〜く初歩的な質問なのですが glutMainLoop()以外のOpenGLの関数をmain関数以外で呼び出したら 再描画ができなくなるとか、そういったものはあるのでしょうか?
特にないはず ただし glutCreateWindow を呼ぶより前には呼べない (まだウィンドウがないから) あと、全然別の場所で呼んだ OpenGL の関数が、画面の描画時に影響を与えてしまうことはありうる 例えば、どこかで glColorMask を設定して元に戻すのを忘れてたら、glClear を呼んでも画面がクリアされない、とか
glutMainLoop()はglutライブラリの関数であってopenGLの関数ではない glutInit() glutCreateWindow()あたりはそう気軽に呼ばないほうがいいかもね openGLの関数ならmain()以外で何を呼ぼうがおおむね問題なし (glBegin()だけを呼んでglEnd()を呼ばないのはダメとか例外はある)
519 :
デフォルトの名無しさん :2009/09/24(木) 19:02:44
C++なのですが コールバック関数で指定する関数は静的じゃないとだめなようなのですが クラスの非静的なメンバ関数を指定する手段なんてないですよね・・・?
インスタンスが無いからだろ
freeglut glutGetWindowData というお約束
>>519 大抵コールバック関数はユーザが任意でvoid*を渡せるだろ。
それにクラスのインスタンスのポインタを渡して使えばいい。
GtkGLextmmは開発が止まっているのかな? Linuxでは何を使うのがメジャーなのか教えていただけませんか?
メジャーかは知らないがOpenTKとかもあるね。
最近OpenGL3.0以降の勉強をしようと思いまして、シェーダーを学び始めました。そこで立方体(-1, -1, -1 から 1, 1, 1)を描画し、y座標の高さを変数とした矩形関数に応じて色を変化させる(要するに縞々)ようにシェーダーを書きました。
バーテックスシェーダーを
#version 130
in vec3 position;
uniform mat4 projectionMatrix;
uniform mat4 modelviewMatrix;
out float y;
void main(void)
{
y = position.y;
gl_Position = projectionMatrix * modelviewMatrix * vec4(position, 1.0);
}
フラグメントシェーダーを
#version 130
out vec4 out_FragColor;
in float y;
const vec3 c1 = vec3(1.0, 1.0, 1.0);
const vec3 c2 = vec3(0.25, 0.25, 0.25);
void main(void)
{
float a = step(0.5, fract(y));
out_FragColor = vec4(mix(c2, c1, a), 1.0);
}
このように書いたところ、y = 1の面が正しく描画されず、FSで指定したc1とc2の色それぞれを含んだ砂嵐状態になってしまいます。他の5面は正しく描画されています。
http://kissho.xii.jp/1/src/1jyou92248.png 面の描画順を変えてみたりしてもy = 1の面が毎回おかしくなっています。GLSLはまだ扱い始めたばかりで、今回は自分だけでは間違いを発見することができませんでした。
何かおかしな点、助言などがありましたらよろしくお願いいたします。
varying float y; void main(void) { y = gl_Vertex.y; gl_Position = ftransform(); } varying float y; const vec3 c1 = vec3(1.0, 1.0, 1.0); const vec3 c2 = vec3(0.25, 0.25, 0.25); void main(void) { float a = step(0.5, fract(y)); gl_FragColor = vec4(mix(c2, c1, a), 1.0); } で良いか?
>>526 OpenGL3.0より前だとそういうことになりますね。
varing変数の誤差じゃね。1.0と0.9999は違う色にしてるわけだから 解決策はよくわかんない。うまく丸めればいいんだろうけど、とりあえず float a = step(0.5, fract(y-0.00001)); とか?
>>528 おっしゃる通りvarying(in)の誤差だったようです。-0.00001のオフセットを加えたら直りました。
本当にありがとうございました。
>>524 OpenTKですか、ググってみます
有り難うございます
浮動小数点の演算誤差の部分もあろうし、 あとは丸め込みの規則がボードによってバラバラなんだよね。 偶数丸めや四捨五入で統一されているわけではない。 固定機能の色の計算では苦しませてもらいました。
スレ違いかもしれないけど、 同じテクスチャ(模様入り)を違和感なく繋げてマッピングする方法ってあります? 色の違いで境界線が見えるようなことが無いようにしたいのですが。
シームレス photoshopでぐぐるのだ
535 :
532 :2009/09/30(水) 15:37:15
>>533 ,534
教えていただいてありがとう。
だけどソフトを使わずにプログラムで出来ないものでしょうか。
[左右反転][元のテクスチャ] [左右上下反転][上下反転] パターンがあるテクスチャなら こうすれば目立たなくなるんじゃない? レンダーステート少々いじるだけで出来そうだし コストもゼロだ
539 :
デフォルトの名無しさん :2009/09/30(水) 20:16:52
>>536 ,537,538
いろいろな方法ありがとう。試してみます。
>>539 C++ デレゲート(もしくはデリゲート)でぐぐってみろ。お前さんの探してる答えが見つかる。
すみません、教えていただきたい事があるのですが、 GLSLを使用すれば、BlenderやLightWaveで作成した3Dモデルを プログラム上で制御できるようになりますか?
いいえ GLSLはモデルを制御しません
>>543 ありがとうございます。
作った3DグラフィックをOpenGLのソースに落とせるソフト、
または、3Dソフトで作成したものをOpenGLのソースに落とす為に
橋渡しをするツール等あれば教えていただきたいです。
openGLを用いたソースは「プログラム」です。3Dソフトで作成したものは「データ」です データとプログラムを橋渡しをするのはプログラマーやシステムエンジニアの仕事です お金を沢山用意してご相談ください
>>545 自動で変換できるようなものは無いのですね。
ありがとうございました。
547 :
デフォルトの名無しさん :2009/10/02(金) 20:49:05
初歩的なことかもしれませんが質問です。 複数のビューポートを設定した時にそれぞれの背景色を変えるにはどうすればいいですか?
glViewport(x, y, w, h); glScissor(x, y, w, h); glEnable(GL_SCISSOR_TEST); glClearColor(r, g, b, a); glClear(GL_COLOR_BUFFER_BIT); glDisable(GL_SCISSOR_TEST);
549 :
デフォルトの名無しさん :2009/10/02(金) 22:02:08
>>548 ありがとうございます!
おかげさまで無事に解決できました。
Scissorってのを使えば良かったんですね。
550 :
デフォルトの名無しさん :2009/10/02(金) 22:49:36
>>545 でもモデルビュアーでOpenGLコマンドでセーブできるオプションがあってもいいよね。
あってどーすんだという気もするが、多分存在しない。
名前は忘れたが、OpenGLのdllをすり替えて頂点データを抽出するソフトならあった気がする
>>550 Deep Exploration なら、各種3Dモデルフォーマットの他に
C言語ソースで保存することもできるよ。
表示するソースまで吐いてくれた気もするけど、ちょっと忘れた。
>>553 書き忘れた。えっと確かOpenGLで表示してくれるソースだった気がする。
今度気が向いたら確認してみるー。
名前の左、でした
556 :
553 :2009/10/06(火) 12:22:44
>>550 確認しますた。DeepExplorationはOpenGLで表示する.cpp吐いてくれます。
というか、モデルを表示するDLを返してくれる関数を出力してくれます。
>>556 オプションで、WinMainを含んだ完全なWindowsアプリケーションのソースも吐けるよ。
あえてGLUTは使っていないようで、ちょっと読みにくいソースだけど。
まじか。これは始めて知った。 世の中広いな
そら間寛平でも2年以上かかるぐらいだからな
そんなの使う人いるのかな。 頂点データじゃなくて、頂点を計算で求めてくれるなら面白いけど。
561 :
デフォルトの名無しさん :2009/10/09(金) 18:56:09
Mac OS Xなのですが GLUT_KEY_UPやGLUT_KEY_DOWNなどは Apple Keyboardではどのキーが割り当てられているのでしょうか
それkeyじゃないだろ。
563 :
デフォルトの名無しさん :2009/10/10(土) 09:55:53
初心者です。 オブジェクトの回転についてお聞きしたいことがあります。 glRotateを使用してオブジェクトを回転させたいのですが、オブジェクトの ローカル座標系を基準として回転させるには具体的に何をすれば良いのでし ょうか? 凄く簡単な様ですが、妙に嵌っています。一本の棒をピッチ方向に45度回転 させた後に、その棒のローカル座標系を基準としてロール方向に45度回転さ せるというものなのですが、グローバル(ワールド)座標系で回転している 様です。 参考となりますURLでも差し支え御座いませんので、どなたかお教えください。
>>563 OpenGLにはワールド座標とローカル座標の区別はないけど、それはこの際ややこしくなるから置いておくとして。
多分今は回転を
glRotate(45, 1, 0, 0);//ピッチ
glRotate(45, 0, 0, 1);//ロール
DrawObject//オブジェクトの描画
ってやってるんだと思うけど、このピッチ回転ロール回転の順序を逆にしてみたらどう?
OpenGLは回転とか移動とかした際に、オブジェクトが持つ座標も一緒に変換を受けていると考えたらわかりやすいよ。
565 :
デフォルトの名無しさん :2009/10/10(土) 11:13:36
>>564 早速の返答、有難う御座います。
多分、そのややこしくなる所が“肝”だと思っています。
アドバイス頂きましたピッチ回転とロール回転の順序を逆にしてしまい
ますと、向きが修正前と変わってしまい、都合が悪いです。
挙動を見ますと最後に記述したglRotateの成分方向のみについては、オ
ブジェクトの座標系通りに回転するのですが、その前に記述した別の成
分方向についてはオブジェクトの座標系通りには回転してくれません。
これから、glMultMatrixを使用してトライしてみます。
>>565 出来れば目的の回転をかけた前後の、立体的形状がわかる三面図的なものがあれば、解決が早くなるかもしれない。
あとその回転かけてる部分のソースとかね。
glMultMatrixとか使わなくてもできると思うが説明がめんどくさい。 基本的には下のような流れだ。 glTlanslate(ホニャ〜// 移動が最初 glRotate(ホニャ〜 // 回転は描画前 // 以下描画 glBegin(ホニャ〜 glVertex(ホニャ〜 : glEnd(ホニャ〜 実際の変換と記述が逆になるので、動きを追う時は描画部分→回転→移動 と下から上に考えた方が分り易い。(ここでの回転をワールド座標系位置での回転と考える)
568 :
デフォルトの名無しさん :2009/10/10(土) 12:48:46
「ややこしくなる所」が肝じゃない事だけは確かだな
>>563 よく分からないがローカル座標系で回転するクォータニオンを合成する
とかかな?それをglRotateに与えてやればいい気がする
gluLookAtで指定する引数からクォータニオンを計算できませんか? 仮にカメラの位置をE、物体の見る位置をV、カメラの上方向ベクトルをUとすると VEで出来るベクトルとUの外積で回転軸が求まり (0,0,1)とVEで出来るベクトルの内積から回転角度が求まると思ったのですが 計算がどうも合いません 質問する板が違いましたら誘導をお願い致します。
そもそも何をしたいのかがよくわからん
>>571 OpenGLを使ったデータビューワーを作っているのですが、
同時にOpenGLを使わない時の表示も行ってます。
その時にクォータニオンが必要でクォータニオンからgluLookAtは
出来るのですが、gluLookAtの引数が分かっている時のクォータニオンも
必要なのです。(出来ると思うのですがどうも上手く行きません)
何の角度を求めたいのかよくわからんが、オイラー角とクォータニオンの相互変換なら それようのライブラリがどっかに転がってるから、素直にそれ使っときなさい。
OpenGL使わない用のコードがあってちゃんと動いてるんなら、 そっちで計算した行列をglLoadMatrixで設定すれば済む話なんじゃない? gluLookAt使わずに
575 :
デフォルトの名無しさん :2009/10/11(日) 16:52:41
お尋ねしますが、 テクスチャマッピングのときにjpg画像ってあまり使われないのですか? 違う形式に変換してる例ばかりなのですが、jpgでやりたい場合はどうすれば良いのでしょうか
どうするもなにもメモリに読み込んじゃえば、あとは同じでしょ。 メモリに読み込む方法は、jpgのフォーマットに合わせて手作りするか、 どっかに転がってるライブラリでも使っときなさい。
展開して読み込むから圧縮しても使用メモリは変わらないよね。
>>575 やっぱりどのような回転を行いたいのかを図示なりしてくれないとアドバイスもしにくいよ。
それよりもクォータニオン使えば、思い通りの回転を加えられると思うんだけどなぁ。
>>576 OpenGLではjpgだろうが、pngだろうがプログラムで読みこんで配列に格納したあとに転送するからOpenGLで直接圧縮ファイルを扱うことはできないよ。
寺西さんとこにjpg使うサンプルあるからそれ参考にすればいい
OpenGLで日本語を描画する高速なライブラリないか? ビットマップでいいんだが自作するしかないか・・・
そういや画像フォーマットスレ無いのかなあ。
583 :
デフォルトの名無しさん :2009/10/11(日) 23:38:17
>>583 RGBの順番にXYZと解釈させてもらうと、少なくともその図の回転だけなら、
Glu.LookAt(1, 2, 3, 0, 0, 0, 0, 0, 1);
GL.Rotate(-45, 0, 1, 0);
GL.Rotate(-45, 1, 0, 0);
GL.Begin(BeginMode.Lines);//正六角形描画。
{
GL.Color3(1.0f, 0.0f, 0.0f);
GL.Vertex3(0.0, 0.0, 0.0);
GL.Vertex3(1.0, 0.0, 0.0);
GL.Color3(0.0f, 1.0f, 0.0f);
GL.Vertex3(0.0, 0.0, 0.0);
GL.Vertex3(0.0, 1.0, 0.0);
GL.Color3(0.0f, 0.0f, 1.0f);
GL.Vertex3(0.0, 0.0, 0.0);
GL.Vertex3(0.0, 0.0, 1.0);
}
GL.End();
これでいけたけど。
あぁ正六角形描画ってとこは無視しといてくれ。
586 :
デフォルトの名無しさん :2009/10/12(月) 00:30:45
>>584 早速の御返答、有難う御座います。
提示頂きましたコードをC++用に直しまして確認しましたところ、確かに
希望します挙動になっております。
明日、現状のプログラムに直接glRotateを組み込んで再確認してみます。
夜遅くに対応して頂き、誠に有難う御座いました。
587 :
sage :2009/10/12(月) 09:20:23
>>587 ありがとう
ちょうどSDL使ってるしgl_kanjiみてみようかな
最近のwx_widgetだとツールがコンパイルできないかもしれない
>>577 ,579,580
情報ありがとうございます。
591 :
デフォルトの名無しさん :2009/10/13(火) 19:34:10
ウインドウ上で マウスを右クリックしたまま左右に動かすことで 視点のズームインとズームアウトさせたいのだが 移動量をどう与えると良いのだろうか
ズームイン/ズームアウトで、視点は移動しないだろ
ドリーのことだと解釈してやれよ
糞の役にも立たない屑レスをするが、 右ドラッグは回転、左右ドラッグでズームインアウトするようにしてくれ
あー、便乗質問。
>>594 何か根拠でも?
それと、左ドラッグでは何を想定している?
某3DCADの初期設定は左ドラッグで回転、右ドラッグで移動、 左右ドラッグでドラッグ開始点基準でズームインアウト 微妙なコントロールで使いたい回転が左ドラッグなので使いやすいよ
今更ながら GLSLおもすれー
質問させて下さい。 下記のような頂点バッファAとBがあるとします。 A: a1, a2, a3, ..., a10000 B: b1, b2, b3, ..., ..., b20000 この状態からデータのコピーなしで、 A: a1, a1, a2, a2, a3, a3, ..., a10000, a10000 B: b1, b2, b3, b4, b5, b6, ..., b19999, b20000 という具合にattributeを生成したいのですが、 どのようにすればよいのでしょうか?
>>599 まさにそれです!
ARBなのが残念です・・・。
別の方法を検討してみます。
ありがとうございました!
テクスチャ作成をクラス化して glGenTextures(1, &m_texture ); glBindTexture(GL_TEXTURE_2D, m_texture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width , height , 0, GL_RGBA, GL_UNSIGNED_BYTE, data ); で作成しているのですが m_textureの戻り値が常に0になり、 複数のテクスチャを読み込んでも、最後に読み込んだデータしか適応されなくなるのです。 いちおう、データが読み込まれて画像表示もできてるので 生成エラーではないようなのですが
>m_textureの戻り値 って何?意味がわからん。
わかんないんです(><)
604 :
601 :2009/10/21(水) 22:38:04
>>602 glGenTextures(1, &m_texture );
実行後の &m_texture が常に0なんです。
テクスチャ削除とかしていません。
普通、1,2,3 と利用されてない数値採番するはずと思うのですが
コンテキスト生成前に呼んでるに一票
現在ソースがないので確認できませんが なんやかんや初期化した後の glutMainLoopの直前でコールしてるつもりです。
GL_TEXTURE_2D使用する前にやることあるだろw
>>604 GenTexture実行後の「m_texture」が0なんだよね?それとも「&m_texture」が0?
環境とglGetErrorの結果も貼らずに質問とな
610 :
601 :2009/10/22(木) 12:32:56
環境はXP+VC2003です。 デバッグ時のブレーク部分がずれてたので いろいろ試してテキストのコード形式をshift_jisに変更した所 行けるようになりました。 ソースをmacのxcodeで生成したのが悪かったんでしょうかね 訳わからん ありがとうございました
>>608 m_textureが0です
>>609 XP+VC2003
glGetErrorは、0を返してました。
R600_SCRATCH_REG_OFFSETで引っかかったけど何で未だにこんないやがらせするんだろ
X11上でOpenGLレンダリングしたいんですがなぜかMacOSX10.6XcodeにはGLXがありません… GTK+等を使わず、なるだけlow levelで実装したいのですが、可能でしょうか?
わかんないんです(><)
あれ、俺のMac(10.6.1)にはGLXはいってるけどなぁ。 それか、Macだったら素直にCocoaでOpenGL.Framework使えば?
616 :
613 :2009/10/24(土) 11:20:14
>>615 10.6.1ですがヘッダやフレームワークではGLXが見つからないです…
どこか別のパッケージに入ってるんでしょうか…
あとOpenGLでウィンドウ描写する処理をフレームワーク化したいんですが、
何かCocoa+OpenGL.framworkでxib, plist等をリソースに追加してパッケージ化しても利用できないようで…
ヘッダーファイルもないの? /Developer/SDKs/MacOSX10.6.sdk/usr/X11/include/GL/glx.h とか /usr/X11/include/GL/glx.h とか そもそもX自体がインストールされてないとか? でも最初から入ってるはずだしなぁ
つか GLX 遅いよ
でっていう
3.2のリファレンスページなかなか完成しないな。 現状OpenGLは3.2でDirectX10.0に追いついて、コンピューティングに関してはOpenCLがあるからDirectX10.5くらいな感じだな。 今年はなかなか勢いがあったからそのまま維持してもらいたいものだが。
621 :
デフォルトの名無しさん :2009/11/04(水) 19:23:44
法線ベクトルの値をパラメータにして 3次元空間上に平面(凹凸もないただの平面)を描画したいのですが どのようにコーディングすればよいのでしょうか?
法線ベクトルだけじゃ平面は定まらないから無理でしょう 平面の式 ax+by+cz+d=0 の a, b, c までしか埋まらない
まぁ平面のバイアスというか、ずれは法線ベクトルからだけじゃ判断できないけど原点とおる平面なら描けるね。
無限平面描くのは無理じゃね?
>>622-623 4つめのパラメータ(原点からの距離?)が必要なわけなのでしょうか?
だとすればどうコーディングすればよいのでしょうか
どこかに参考になるコードが載っていればと思って探してはいるのですが
>>625 何がしたいかによる。
4つめのパラメータが無ければ、平面の向きしか定まらない。例えば何らかのモデルの任意の点に対して接している平面とかを描きたいのなら、そのときはモデルの頂点から4つめのパラメータは求めることが出来る。
どういう風にコーディングすればいいとかは自分で考えるべきだろう。わからないことがあって、どうしても聞かなければならないというのならせめてもっと何をどのようにしたいか等を具体的に言おう。
「法線ベクトルの値をパラメータにして平面を描画したい」と言われても いったい具体的に何がやりたいのかさっぱりわからないね。
平面と視錐台が交差するかチェック。しなかったら何も描画しない。 交差したら交点を求めて、その交点を元にポリゴンをレンダリング。 というのが一番まじめな無限平面を描く方法だろうか。 場合によっては十分大きな一枚ポリゴンを適当に向きが合うように行列掛けてレンダリングするとかでいいんじゃないだろうか。 他にはフラグメントシェーダでレイトレして平面をレンダリングするとか。
別に無限じゃなくてもいいんでしょ? 原点から距離cのところに法線(1,0,0)の適当な平面を描いて それを法線Nの座標系に変換するのが簡単じゃね 適当なベクトルとNの外積で変換行列は簡単に作れるし
OpenGLでは無限遠は見えないしな。
631 :
デフォルトの名無しさん :2009/11/05(木) 19:31:47
GL_TRIANGLESを使って描画した三角形の大きさを拡大・縮小するには どうすればよいのでしょうか?
632 :
621 :2009/11/05(木) 20:00:46
Ax+By+Cz+D=0のDの絶対値って 法線ベクトルを正規化しているときには 原点から平面に下ろした垂線の長さになりますよね A,B,Cで向きだけ決めて原点と平面上のどっかの点を使って 垂線と平面の交点を求められないかなあと考えたのですが なんだかこんな話していたら数学の話になってしまいますよね
OpenGL 始めてすぐは計算幾何にいろいろ戸惑うのも分かる。自分もそうだった。
求められないかなぁって、求められない理由がわからない。621は中学生くらい?
2chらしい反応だな 頭よいでちゅねとでも言ってほしいのか?
中学生なみの思考回路だな
距離Dで法線Nなら交点はD*Nじゃないの?そういう話ではないのか
638 :
デフォルトの名無しさん :2009/11/06(金) 19:44:56
「一時的にデプスバッファをすり替えて描画しステンシルマスクを作った後、 元のデプスバッファに戻して上記ステンシルマスクを使用し描画。」 この処理を何度も繰り返す必要があり、 デプスバッファの切り替えとして、 glReadPixels(),glDrawPixels()、GL_DEPTH_COMPONENT を読み書きしているのですが、 glDrawPixels()がとにかく遅いです。 一時的にデプスバッファの参照先を切り替えるなど、 何か良い方法はないでしょうか?
一般的には glReadPixels の方が遅いと思うが・・・ ステンシルマスクを作るのにデプスバッファが不要なら、その間、単に無効にするとか glDisable(GL_DEPTH_TEST); glDepthMask(GL_FALSE);
640 :
638 :2009/11/06(金) 20:11:08
>>639 ステンシルマスクを作る為に一時的に特定のデプスバッファが必要になります。
その後、元のデプスバッファが必要なんです。
ふと思っただけで出来るかどうかわかりませんがー レンダリング先がFBOなら、必要に応じてデプスバッファのレンダーバッファを切り替えたりできたりして そうじゃなければその一時的に使用するデプスバッファをテクスチャにしてピクセルシェーダーで距離比較しながらステンシルを生成とか とりあえずリアルタイム処理中にglXXXPixelsの類は使用禁止でしょう
642 :
638 :2009/11/09(月) 23:03:26
>>641 床井先生の「Depth Peeling」とやりたいことが似ていたので、
参考にしてデプステクスチャとデプス値を比較させるとうまくいきました。
レスポンスも悪くなさそうです。
ありがとうございます、助かりました。
PSP/PS3/Wii/DS OpenGLが扱えればこれらのグラフィックス部分が開発できる!!! まんまOpenGLなのはPSP/PS3だけなのだが。
なぜiPhoneやアンドロイドが含まれていないのか
まぁ現実は色々と簡単な話ではないのだが、俺もDirectXかOpenGLどっちを勉強しようかと考えたときに、決め手になったのはクロスプラットフォームな点だったな。
いい加減、「おーぷんぐる」ちゅうのやめて欲しい ただでさえ赤面しそうな響きなのに GLSLを「ぐるえすえる」とか言われたときは脳髄に電気が通った。
そうだよな、やっぱり「おーぷんぐら」だよな
じゃあ俺は「おーぷんぐり」で
おーぷんぐろ
おーぷんごり ごりさる
ここはレベルの高いスレですね
OpenALは?
おーぷなる? なんかオプーナみたいだな
654 :
デフォルトの名無しさん :2009/11/11(水) 22:26:07
OpenAL = オープン有る OpenGL = オープン汁
ここは格調高いスレですね
|┃三 / ̄\ |┃ | | |┃ \_/ ガラッ. |┃ | |┃ ノ// ./ ̄ ̄ ̄ \ |┃三 / ::\:::/:::: \ |┃ / <●>::::::<●> \ |┃ | (__人__) | |┃三 \ ` ⌒´ / |┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
657 :
デフォルトの名無しさん :2009/11/13(金) 17:56:28
GL VIWER ではGLSL1.3の機能が使えることになってるのですが、OPENGLの関数で調べると、バージョンが1.2のままでした。 これって、GL VIWER の誤作動でしょうか?それとも、プログラム側から、現在のバージョンより上の機能を使うことができるのでしょうか?
GL_ARB_shader_objects拡張とかGL_ARB_vertex_shader拡張とかGL_ARB_fragment_shader拡張では?
659 :
デフォルトの名無しさん :2009/11/15(日) 23:34:59
それはドライバの問題ですのでビデオカードの製造元へお問い合わせください
661 :
659 :2009/11/16(月) 14:16:01
DirectXと同じように"OpenGL 3.2 SDK"みたいなのが存在すると思ったら大間違い。
ああいうのと違って若干面倒臭いんだよ。 GREWでググる必要もあるかもね。
どのみちハードとドライバが対応して無いと動かないのは一緒だけどね あっちのが安定感はあるけど
ああいうのとかあっちのとか言われてもわかんねー なんだGREWって?w
日本語が苦手な奴と、自分で調べられない奴はプログラミングに向いてない。 これは割とマジな話。
GREWワロタw
今の時代ならC# + OpenTKとかでOpenGLにまず触れてみるのがいいかもね。エントリポイントの記述とかはもちろんGLEWとかについても考える必要が無いし。
WEB上から拾ってきたサンプルプログラムを参考にして勉強中なのですが、 glGenBuffers(1, &vtxID); //glGenBuffers は glew.h で定義されている関数 このような箇所で、アクセス違反を起こしてしまい先に進めません。 glutInit(&argc, argv) も glewInit() もエラーになっていません。 他にもシェーダ関係 glCreateShader も駄目です。 環境は、OS:WindowsXP, Video:Radeon IGP 340M(Omega 3.8.442), OpenGL1.1 古いハードですが、新機能分も glew(1.5.1) でどうにかしてくれないのでしょうか? そもそも別の原因なのでしょうか?
>>669 openGLのどのバージョンが使えるかはハードとドライバーの問題
glewはドライバで拡張された機能へのアクセスをサポートする便利ライブラリにすぎない
openGL1.5が使いたければ if (GLEW_VERSION_1_5)が通るハードとドライバが必要
使い方
ttp://glew.sourceforge.net/basic.html # glGenBuffersARBだと使えるとかは?
# GLEW_ARB_vertex_buffer_objectをサポートしてれば...1.1じゃ無理か
>>670 ありがとうございます。
GLEW のbin に入っていた glewinfo.exe で使える/使えない関数リストが得られました。
GL_VERSION_1_1: OK
---------------
GL_VERSION_1_2: MISSING
---------------
glCopyTexSubImage3D: MISSING
glDrawRangeElements: MISSING
glTexImage3D: MISSING
glTexSubImage3D: MISSING
後は、ひたすら、MISSING ...
glGenBuffers, glCreateShader, ... glGenBuffersARB みんな駄目でした。
大げさな3Dのゲームとかじゃなくてちょっと試してみたかっただけなんですが、
私の環境ではどうも無理みたいです。。。
Omega Driver なら、glew なら、と思っていたんですが。
GLSL1.50で軽くジオメトリシェーダ使ってみたが、ここまで出来たら計算コストとか切羽つまらない限りバーテックスシェーダいりそうにないな。
MSAAを使ってるんですが、最近のグラボなら大抵使える機能なのでしょうか? もし、普及率が低いならフラグメントシェーダーで実装することも考えているのですが、実装方法がいいのが思いつかんのです・・・ メモリや処理負荷は抑えたいのです。
最近のならほとんど使えると思うよ。
>>674 ありがとうございます。
あと、OpenGLの描画先をウィンドウではなくてテクスチャなどにしたいんですが、どうすればいいでしょうか?
ググりなさい
ググるキーワードがわかりません
オフスクリーン○○○○○○
そのレベルならシェーダー触るのは早い気がするよ。 まずは固定パイプラインにおける基礎から学ぶのがいい。
OpenGL テクスチャに描画 とか OpenGL draw to texture とか いくらでも思いつくだろ?
いや、固定パイプラインなど触れる必要は無い じゃんじゃんジオメトればいい
サンプルが溢れているなら最初っからシェーダでもいい気がするが、シェーダ使ったサンプルが少ないからなぁ。 まずはシェーダは置いといてOpenGLの一通りの機能試したほうが、頭の中の整理が出来ていい気がする。あくまで個人的な意見だけど。
シェーダーは環境を限定するからなぁ。未だに1.3とかの環境も結構あるわけで。
色々ググって、見つかりましたが、拡張機能でないのとなると、バックバッファに描いたものを glCopyTexSubImage2D関数を使ってテクスチャにコピーというものでした。 一応はなんとかなりそうです。 にしてもやってることは同じなのにDirectXとは見た目が大分違いますね。戸惑います・・・。 ありがとうございました。
>>684 対応してるOpenGLのバージョンは?
対応してるとは?何にでしょうか?
>>686 君が使ってるOpenGLのバージョン。
688 :
デフォルトの名無しさん :2009/11/23(月) 19:39:55
CT画像(bmp)を読み込んでボクセルで表示を行いたいのですが、 参考になるようなサイト等はありますか?
ググりなさい
690 :
デフォルトの名無しさん :2009/11/23(月) 22:59:35
>>689 すいません。ググっても出てこないもので…
ググって出てこないようなサイトは関係者以外教えてあげられないと思う。
それ以前になんてキーワードでググったのか気になる URL晒せ
>>687 私のとこは2.1.2でした。できるだけ多くの環境を考えたいので、拡張はできれば避けたいんですよね・・・
動かしたいターゲットPCを設定して、そこで動く拡張の範囲でやればいいんじゃないの 今時一切の拡張を使わないってのは現実的じゃないし アプリケーションの種類にもよるんだろうけど、FBOとかシェーダーとかそろそろ気軽に使っていいと思うんだけどな
あなたの意見なんて聞いてませんよ
もう、対応バージョンとか細かいこと調べるの疲れてしまいました・・・orz 時間が無いのに、なんでこんなに調べづらいんでしょう・・・ハァ
>>697 glutSolidTeapotはUV自動生成だから
だから••• ムリ?
>>697 逆にティーポットには無理と考えた理由がわからないんだが
床井先生の用語で話すけど 頂点の座標とテクスチャの座標を一致させるところで サンプルでは立方体を表示させてたから、その立方体がテクスチャ座標で、頂点の座標と対応させるとおもってた →ティーポットは対応させる点がないからムリ
ぐだぐだ言ってる間に、glutSolidCubeをglutSolidTeapotに入れ替えて試してみたのか? 頂点シェーダを見る限り、テクスチャ座標は頂点座標から自動計算しているようだが。
703 :
デフォルトの名無しさん :2009/11/24(火) 02:35:13
ティーポットにするとぐちゃぐちゃに
>>701 普通にティーポットをウインドウに表示させるとする。
ティーポットは3Dで表示されている。
ところで、ウインドウはx軸とy軸を持つ2Dのビットマップだが、
u軸とv軸を持つ2Dのテクスチャと見ることも出来る。
そのとき、ティーポットの頂点のビットマップにおける座標xyを、
テクスチャのuvとみれば、投影マッピング用のテクスチャ座標となる。
ティーポットの頂点のビットマップにおける座標xy?
取得できるの?
>>702 リンク先のプログラムはエラーメッセージがでて終了してしまう
リンク先の普通に動いたが
>>705 それは自分で計算する。
リンク先のVertexProgram::49がそう。
アンタがいまいちぴんときてないのは、
通常のレンダリングパイプラインの仕組みの
理解が足りないからか。
うーん、色々ダメですね 今はリンク先のプログラムを動かそうとしています 床井先生のプログラムで、立方体をティーポットにしたら、テクスチャがグチャグチャに表示されました きれいに投影できるか考えてみたいとおもいます
リンク先の動かないよ… Error : No valid techniquesとかでる Cg Toolkitのインストールは同ページを参考にしてる VC++ 2008だからとおもったけど706さんは動いたっていう…
グラボ/ドライバがvp40/fp40に対応してないんじゃね TexProj.cgfxファイルの vp40 fp40をvp20 fp 20に変えたら動くかもよ なんのボード使ってるかしらんからわかんないけど
>>696 >>694 が言っているようにそろそろ抵抗無くFBOあたりは使ってもいい気がする。とりあえずFBOを拡張で呼んでおけばOpenGL1.5より先のハードで動くわけだし。
あんまり対応ハードのこと考えてるとOpenGLに限らずDirectXでもいい機能が使えなくなるよ。
NV拡張とかATI拡張とか使う気が引けるのはわかるけど。
最低でもノートパソコンで動かないとね。
ノートパソコンといってもピンキリだが
714 :
デフォルトの名無しさん :2009/11/24(火) 18:30:56
gluLookAtでy軸を上側になる場合とz軸が上側になる場合とで 同じ結果になるためには 3次元座標の各値をどのように変換すればよいのでしょうか? 何も特別に設定しない限りは前者がデフォルトだったと思うのですが 後者のように設定したもので
>>714 別に変換はいらないと思うよ。頂点情報とかをZ軸を上として対応させるといい。
>>688 OpenGL Volumizer のマニュアルとか、品質上げるなら Pre-Integrated Volume Rendering とか。
Pre-Integrated... では register combiner なんか使ってたりするけど、
最近は安いカードでも 3D Texture も使えるしフィルレートも上がったしフラグメントシェーダも使えるしで、
普通に 256^3 を全画面表示でクルクルとかできる。値変換したり色付けたりも GLSL で簡単に。
C#でOpenGLは可能ですか?
,.-─ ─-、─-、 , イ)ィ -─ ──- 、ミヽ ノ /,.-‐'"´ `ヾj ii / Λ ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{ ノ/,/ミ三ニヲ´ ゙、ノi! {V /ミ三二,イ , -─ Yソ レ'/三二彡イ .:ィこラ ;:こラ j{ V;;;::. ;ヲヾ!V ー '′ i ー ' ソ Vニミ( 入 、 r j ,′ ヾミ、`ゝ ` ー--‐'ゞニ<‐-イ ヽ ヽ -''ニニ‐ / | `、 ⌒ ,/ | > ---- r‐'´ ヽ_ | ヽ _ _ 」 ググレカス [ gugurecus ]
720 :
デフォルトの名無しさん :2009/11/30(月) 13:36:02
glBegin(GL_POINTS); で点を描画したいんだけど 結果を見たら点列が表示されません glPointSize();で点のサイズを10にしたり極端に大きくしたりしたんですが それでも点列が表示されないのですが何が原因なんでしょうか? 環境はMac OS X 10.6です
それだけだと原因はいくらでも考えられて挙げるとキリがないのでソースうpしたまえ
背景色と描画色が同じだったりなw
webのcgiなど経由でグラフィック描画をさせることはできるのでしょうか
質問の意味がよく分かりませんが、とりあえずWebGLと答えておけばよいのでしょうか
webGLは来年まで出ないなら 例えばIE限定でもいいので今動くものはないのでしょうか
Processing は OpenGL 使えるぞ。
質問です。 xpsp3上でC#、opentkなるラッパーを使ってopenglを勉強中なんですが、 文字を描画するのにDllImport属性をつけてwglのUseFontBitmaps関数を使用しています。 で、適宜ReleaseDCやopentkでのGL.DeleteLists関数を使ってリソースを解放している つもりなんですが、どうしても最後はメモリ不足だってしかられてフリーズします。 何かいい解決策ないでしょうか?
GDIでメモリに文字をレンダリングして、そのイメージをテクスチャに転送したらいいと思う。
>>727 ・がんばってデバッグする
・これが動かないのはどう考えてもおかしいというくらい小さいプログラムを作ってソースをupする
730 :
727 :2009/12/08(火) 17:25:04
レス サンクス。 質問しっぱなしもあれなんで、一応結果を書いておきます。 念のためglDeleteListsの前後でglIsListで確認したけど、キチンと消してる。 じゃあってんでディスプレイリストを実行した後、全部消去して 必ず指標の開始を1にしてもだめ。orz 728さんのいうように全然違うやり方でしないとだめそう。 ソースupは一部、ぐぐった結果をコピペして使っているので、 勝手にupするのもあれだし、こんな事で許可を求めに 数人の方に連絡するのもあれなんで、とりあえず、止めときます。
ぐぐった結果を使っているのなら、それは公開されているものなのでコピペ部分まで晒しても問題ないよ 個人により程度差はあるだろうが、一般的には、そんなことでいちいち連絡してくるなってところだろう
732 :
デフォルトの名無しさん :2009/12/10(木) 22:09:36
GLSLにprintfみたいなものはないんでしょうか? 何が起きているか良く分からないので変数の値をトレースしたいのですが。 デバッグもどうやればいいのか分かりません。
普通にprintfで出せば? ウィンドウには出ないが、コンソールを見ればいい
734 :
732 :2009/12/10(木) 22:13:40
ごめん勘違い、GLSLの中か わかりません(´・ω・`)
名前間違えた(´・ω・`)
>>732 普通には出来ない。
コンパイル時にわかるエラーとかはOpenGLのGetShaderInfoLogでわかるけど。
GLSLを何も分からない俺が考えるに テクスチャに文字を描画する関数を作ればいいな
>>732 苦労するよな。デバッグ。
おれは、テクスチャにちまちま出力してるよ。
OpenGL3.2以降ならTransformFeedback使えば、VertexShaderかGeometryShader内での値も一応見ることができるな。
>>737 残念。シェーダーは頂点毎、画素毎に動くから基本的に1ピクセルずつしか処理されない。
だから一回の処理の中で文字を書くというのも不可能だよ。
2Dで画像を回転・拡大縮小して描画するのって、どうしたら速い? glTranslateやglRotate使ってるけど、大量に描画すると遅い気がする。
>>740 変換操作はTranslateとかでいいと思うけど、画像のテクスチャはひとつにまとめてテクスチャ座標で切り出したりしたほうが速いかも。
あと、テクスチャフィルタリングを可能であればニアレストネイバーにするとか。
プリミティブのタイプでも差が出るとも聞くからトライアングル系にするとか。
いつの間にかfreeglut 2.6.0のRCが取れてた 4年ぶりのリリースかぁ
>>732 フラグメントシェーダでのデバッグなら、知りたい変数の値をだいたい0〜1の範囲になるように
スケーリングしたりして色として出力して画面の色を見てどんな値になっているか確かめる方法を俺はよく使ってる。
またはNaNだったり0だったら赤色出力するという方法もある。
Cg言語だとnVidiaのサイトにshader debuggerというソフトがあるけど
GLSLにそういうデバッガがあるかどうかは知らん
744 :
732 :2009/12/12(土) 22:50:51
>>733-739 ,
>>743 みなさん、ありがとうございます!
>>739 ES 2.0対応を考えていたのですが、開発はなるべく互換性を保ちつつ
GL3.2でやっておき、後でES2.0用に直すようにすれば TransformFeedback も
使えそうですね。ありがとうございます。
>>738 >>743 お二人は同じやり方をしているのでしょうね。
テクスチャの色として出力する方法、試してみようと思います。
ありがとうございます。
テクスチャで立方体のそれぞれの面に違う画像を貼るプログラム書いてるんだけど なぜか前面と後面しか正常に表示されない。。。 しかも右面は欠けちゃってるし。。。 もうダメポ
がんばれ! と言いたいところですが、 そんな状態ではあなた自身が辛いだけでしょう。 仕事や共同作業でしたら他人も迷惑します。 そのまま諦めて下さい。
>>745 フラグメントシェーダで、UV値をそのまま色にして出力するんだ。
ちゃんとUVが張ってあれば綺麗なグラデーションがでるし、
UVがおかしければ一色になってたり一つの方向のみグラデーションしてたりする。
初歩のことやってる人にいきなりシェーダ使わせるとかないわー
OpenGL 3.0から入った人かもしれないだろ。
お前天才だな
いやOpenGL ES 2.0から始めた人かもしれないぞ
奇才現る
固定機能パイプラインでもUV座標をglColor*に渡して確認できるじゃん。
凡才はすっこんでろ
GLSLなんですが、頂点シェーダーでそのポリゴンの描画をキャンセルすることってできないですか 大量のポリゴンをテクスチャから参照した位置に移動させてるんですが、描画したいのは一部だけなので
>>755 ジオメトリシェーダーならポリゴン描画キャンセルできるが。
>>756 考えても見なかった。ちょっとオーバーな気もしますが、最後の高速化案として調べて見ます。
クリッピングの範囲外に吹き飛ばすだけじゃ駄目なの?
759 :
デフォルトの名無しさん :2009/12/17(木) 05:54:13
>>745 glTexcoordに渡す s, t, r, q の値そのものを勘違いしてないかい?
glVertexと同じ空間イメージで渡してないかい?
ただテクスチャ貼るだけなら s, t だけで良くて、各面に対し
左上( 0, 1)、右上( 1, 1)
左下( 0, 0)、右下( 1, 0)
見たいな指定してるぅ?
761 :
デフォルトの名無しさん :2009/12/21(月) 02:36:05
762 :
761 :2009/12/21(月) 03:10:56
ちなみにjogl-natives-windows-i586.jarをダウソして 他のファイルも copied 'jogl.jar' to C:\Program Files (x86)\Java\jdk1.6.0_17\jre\lib\ext copied 'jogl.dll' to C:\Program Files (x86)\Java\jdk1.6.0_17\jre\bin copied 'jogl_cg.dll' to C:\Program Files (x86)\Java\jdk1.6.0_17\jre\bin copied 'jogl_awt.dll' to C:\Program Files (x86)\Java\jdk1.6.0_17\jre\bin Installation Complete. In order to uninstall JOGL, please execute the following script: E:\Program Files\JOGL_JSR231_win32\uninstall_jre.bat …としてデモを以下のように実行しましたが E:\Program Files>java -cp jogl-demos.jar demos.gears.Gears Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/opengl/aw t/GLCanvas Caused by: java.lang.ClassNotFoundException: javax.media.opengl.awt.GLCanvas at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:303) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) Could not find the main class: demos.gears.Gears. Program will exit. …という結果です。
インストール先の問題じゃないかな "C:\Program Files (x86)\Java\jdk1.6.0_17\jre\bin\java" -cp jogl-demos.jar demos.gears.Gears を試してみて
764 :
761 :2009/12/21(月) 14:21:02
>>763 ありがとうございます。
E:\Program Files>"C:\Program Files (x86)\Java\jdk1.6.0_17\jre\bin\java" -cp jogl-demos.jar demos.gears.Gears
Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/opengl/awt/GLCanvas
Caused by: java.lang.ClassNotFoundException: javax.media.opengl.awt.GLCanvas
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
Could not find the main class: demos.gears.Gears. Program will exit.
…のように、同じ結果のようです。
jogl-demos.jarはE:\Program Filesの下に置いてあります。
どこのjava.exeが使われているか知る方法はありますか?ちなみに
E:\Program Files>java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
です。
765 :
デフォルトの名無しさん :2009/12/21(月) 16:47:54
CT画像(bmpファイル)を連続して読み込み、 3次元立体として表示したいのですが、どうやればいいかわかりません。 サンプルコードやいいサイトがあったら教えてください
767 :
デフォルトの名無しさん :2009/12/21(月) 17:39:24
>>766 ありがとうございます。
初心者なので、できればサンプルなどある所はないでしょうか?
辞めてしまえよ
ソースコードのあるページもばっちり引っかかってるんだがなぁ
770 :
デフォルトの名無しさん :2009/12/21(月) 19:42:45
771 :
デフォルトの名無しさん :2009/12/24(木) 14:08:59
FBOで使うデプスバッファとして、 デフォルトのデプスバッファを割り当てる (共有する)ことは可能でしょうか? OpenGLのアプリケーションのプラグインで、 特定のオブジェクトの描画のみを担当するのですが、 それまでの描画結果の深度でデプステストしつつ、 そのオブジェクトのみにポストエフェクトをかけたいんです。 システム全体の描画処理に介入できないため、 他のオブジェクトの描画先をFBOにすることは できません。
>GLSLのデバッグ glslDevilとかGLInterceptとかは? 俺は使った事ないんだがフリーだし、前者はよく更新してるし良さそうだが
773 :
デフォルトの名無しさん :2009/12/25(金) 18:20:30
半透明処理に関して質問があります。 床井先生のサイトを下にMultisampleを使う半透明処理をしました。 nVidiaのコントロールパネルでの設定も行い、床井先生の サンプルプログラムも自分のプログラムもきちんと半透明処理が できていたのですが、今日になって同じPCで再コンパイルをしたら どちらも半透明にならなくなってしまいました。 コントロールパネルの設定も確認したのですが、変わっていません。 どなたか原因がわかりますでしょうか? ちなみに、グラボはQudro FX 570Mです。
774 :
デフォルトの名無しさん :2009/12/25(金) 18:24:00
>>773 です。
早速ですが、自己解決してしまいました。
どうやらデュアルディスプレイにしていると、半透明処理ができないらしく、
シングルディスプレイに戻したらきちんと半透明処理ができました。
とりあえずプログラム的には解決できたのでよかったのですが、
そういうものなのでしょうか?どなたかご存知でしたらご教授ください。
設計によると思う。 我が家のChrome430はシェーダだけがなぜか速くて重宝しているが、 デュアルディスプレイにするとvsync同期のバッファ切り替えが効かなくなる。 おそらく待ち回路が一つしかないせいだと推測している。 その環境だとMultiSample用のバッファとマルチディスプレイ用の資源がなにがしか競合しているのかと。
とりあえず、お前らの環境が特殊過ぎるだけだ。と釣られてみる。
777 :
:2009/12/25(金) 19:08:34
ありがとうございます。まあ2年近く前のノートPCなんで、 特殊なのは許してください。 いろいろと競合するものなんですね。今後はこういう点についても 気をつけていきます。
ここのスレって初心者質問OK?
OK。
NO。
781 :
778 :2009/12/25(金) 20:22:23
どっちやねん
そんなレスしてる暇あるならさっさと質問書くといいよ。
書いちゃだめっ。
>>778 じゃないが、初歩的な質問でスマソ
制作中のFPSに組み込もうとボーンアニメーションの実装中。
毎回フレームごとに各頂点の座標を再計算して描画するのと、
初期化時点で1フレーム1フレームの頂点配列を用意しておく
のとでは、どっちが一般的な作りなんだろうか?
大体1000ポリ前後のキャラが4〜6体ほどの描画を予定。
メモリとCPUの兼ね合いなんだと思うけども、普通はどっちなのか
あるいは他に画期的な方法があるのなら教えて貰いたい
毎フレーム座標計算だろ。 あらかじめ全キャラの全アニメーションパターンを計算して 保存しておくのはメモリ的に無理だろう。
キーフレームアニメーションってキーになる位置の座標はあらかじめ持っとくんじゃなかったっけ?
787 :
785 :2009/12/26(土) 12:19:12
>> 786
No.
あらかじめ持っているのはキーフレーム毎にジョイント(ボーン)の姿勢ポーズだけ。
そこから毎フレーム、メッシュの全頂点の変形後の位置を計算する。
>>784 はこの変形後の頂点をあらかじめ全て計算して持っていたらどうかと聞いているが、
キーフレーム数x全頂点数のメモリが必要になるので現実的には無理。
(どうせ途中を補完しないといけないし)
788 :
784 :2009/12/26(土) 15:39:35
789 :
785 :2009/12/26(土) 16:04:02
超頑張れ。この辺キャラクターアニメーションには必須の技術なのに 日本語で読めるまともな解説と実装例がないよな。 床井先生あたりちゃんとした解説を書いてアップしてくれないだろうか……
そんな名指しで頼るなよw
名指しワロタw まぁソフトの実装よりデータ用意する方が大変なんだけどね。 ゲームプログラマーになる前に〜の本とかそういう部分をカバーする本だと 思ったけどスキニングは載ってないのかな
3D格闘ゲームプログラミングに載ってた気がする。
>>791 ゲームプログラマーになる前に〜はロボファイトまでなので、
スキンアニメーションの解説は無し。解説逃げたな。
>>792 その本読んだ事無いけど違うと思う。たぶんDirectXのモーション付きのXファイルを
どうやって表示するかを書いてあるだけだと思う(実はこれが意外にめんどくさい)。
OpenGLにそんな機能はないので全て自分で実装することになる。
JavaでOpenGLを扱えるようにするライブラリには JOGLの他にLWJGLというのもあるみたいだけど どっちがいいの? ゲーム作るのに使うならLWJGLの方が良いのかな。
Java3Dで悩み解消
Java3D<OpenGL
>>777 ついでなので情報出しとく。
デュアルディスプレイだとFBOへの描画が極端に遅くなるみたい。
WindowsXP64bit + GTX280, 8800GT, 9600で確認した。
3D格ゲープログラミングには一応スキニング行列の解説を一章ぐらい掛けて説明してたはず。 それ以外だとGems1とTheCgTutorialにも。 実装例だとどこぞの3Dエロゲのツールとか。 一般的にシェーダでやるものだから、教えるにしても前提条件が割と高いんだよね。 教材データも必要だし。
Cg The Cg Tutorial日本語版のスキニングの説明は最悪。 図がなく1ページしか解説がない。あれ読んで理解できたらエスパー認定できる。 今となってはCgを学ぶ価値もないので人に勧めちゃダメ。
GLSLでスキニング書くとすると、ボーンのマトリックスとかウェイトとかはどういうふうに受け渡すのが普通なんでしょうか?
CPU側は glVertexAttrib* ジオメトリシェーダに in 変数 というところだと思う
>>801 なるほどGLSLはまだ使い始めたばかりですが、勉強して作っていきたいと思います。
規制解除されてるの気づかなくて遅れた。
>>793 >>798 も言ってるけど、3D格闘ゲームプログラミングは
xファイルからモーションデータまでローダを自前で作って、
スキニングも全部自前で実装してる。但し、CPUでだけど。
後はGLSLの知識+αでGPUに落とし込めばいけるさ。
GLSLの勉強がしたいのですが、最高の1冊を教えてください。 できれば日本語でお願いします。でもAmazonで探した限りちゃんとした本はなさそうです。 英語でも良いです。
本の紹介が出来なくて申し訳ないけれど、GLSLの基本的な使い方は床井先生のページにもある程度あるよ。 それにシェーダ言語ってなるとHLSLとかと割と似ているから、それを参考にすれば結構できるようになると思う。
おい、床井先生ここ見てるだろ?ってくらいタイムリーなんだがw いや勉強になるなぁ
確かにw
床井ッ、見ているなッ!
さすが床井先生、俺たちが(略)、そこにしびれる憧れる! でもやっぱり分かりにくい orz > ボーンを対象形状付近に配置する変換を M0, M1 とします.(中略) > このボーンを時刻 t に応じて変形する変換を B0(t), B1(t) とします. 一番大事な行列 M と B の定義が馬鹿には解らないのでもう少し解説して欲しい。 M = ボーン(ジョイント)を原点としたジョイント空間からモデル空間への変換行列 M^-1 = その逆行列でモデル空間からジョイント空間への変換 P = モデル空間での頂点の座標とすれば、P' = M^-1 x P が ジョイント空間での頂点の座標に変換できる。 従ってスキニングは 1. 基本姿勢(バインドポーズ)のモデル空間からジョイント空間に変換 M^-1xP 2. カレントポーズを計算して B = BxBxBx.... 3. ジョイント空間からモデル空間に変換 P' = BxM^-1xP となる。 BxM^-1はフレームの最初に計算しておけるので、ボーンの数だけ全部計算して保存しておく(=マトリックスパレット)。 あとはこれをGPUに送ってやれば、基本姿勢の頂点座標に行列一発かけるだけでアニメーション後の頂点座標になる。 ちきしょう、俺にも書かせろw
あと1点疑問が。 class Bone { float position[4]; // カレントのボーンの平行移動成分 float rotation[4]; // カレントのボーンの回転成分 float animation[16]; float length; // カレントのボーンのスケーリング成分 const Bone *parent; // 親ボーン ... この animation[16] というのは何を入れておく所? バインドボーズの逆行列(M^-1)だと思うのだけれど、 それにしては名前が変。あとスケルトンとポーズを1つのBoneクラスにまとめるのは実用上どうかと。 (ゲームだとキャラ10体出すとスケルトン1にポーズ10だから、分離していた方が良い。) まあゲーム作る訳じゃないから良いか
点を表示する時、裏向きの点を隠したいと思ってます。 ポリゴンならカリングすれば消せるのだけど、点の場合は黒く塗りつぶされて しまうようです。
点の向き?
ポイントレンダリングしてるような感じです。 glEnable(GL_LIGINGとGL_LIGHT0) glMaterialfv(〜〜〜) glPointSize(3) glBegin(GL_POINTS) glNormal3d(1, 0, 0) glVertex3d(0, 0, 0)
もともと面の向きだって glNormal* で与えられるもんじゃないよな? シェーダで消せば?
OpenGLってDirectXに比べるとプリミティブすぎるというか機能足り無くない? 標準のシーングラフとかあっても良いと思うのだが…… 何か無いですか?
補助ライブラリーみたいなやつ使えよ。
directxと比べることが何か間違ってると気がつかないの? そういえば、linuxでdirectx apiって使えないよね。
wineのdllもってくれば使えるんじゃね
>>817 具体的には何が良いですか?
モーション付きのモデルがロードできて、
シーングラフを構成できる奴を教えてください
それなりに有名で使用実績が必要です。
こういう事を言う人は多いのですが
具体例を聞くととたんに黙り込んでしまいます。
>>819 別に遊びでdirectxやりたいわけじゃないからそういうアホな方法は遠慮しとくは。
824 :
820 :2010/01/03(日) 15:59:52
LinuxなんでDirectXは無いですね。
>>823 そういうゲームライブラリじゃなくて。
それならIrrlichtやOgreで良い。
ていうかどうせライブリの実体はグラボのハード処理なんだし、JOGL(java3d+linux)でいいでない?
828 :
820 :2010/01/03(日) 17:03:46
オープンソースならそれでいいけどnVIDIAはダメ
自分で作るしかないだろうな。
openglはまだ始まったばかりだからライブラリが出てくるのもこれからだろうな。 gpuも進化してるし、今実用的なのを考えるなら素直にMSにしろ。 高々windows os代3万程度だろ。 linuxはnative ioはcかruby/pythonで使い捨て、ロジックはjavaで実装して他段レイヤーで抽象化しとくしかない。 cg とかglslとか次から次ぎともう嫌だろ? 仕事であたりまえのように使ってるならまだしも、openglの奴らは未だにOOP的(モジュール的というか)な考えが出来る奴が少ないしライブラリの品質も未だに3流大学の研究所レベルを出てない。 どうせgpu interfaceなだけだし、なんならさしあたりwin限定でdirectx apiをjavaでラップすれば十分。
こういう事を言う人は多いのですが
具体例を出すととたんに条件を増やしてしまいます。
# っていうか、
>>816 でいう所の
#
>>820 の条件にあたるような立派な標準のシーングラフってあるんだっけ?
訂正。
#
>>820 の条件にあたるような立派な標準のシーングラフってDirectXであるんだっけ?
833 :
820 :2010/01/03(日) 17:39:36
>>830 はよくわかってるな。
OpenGLの拡張機能をちまちま検索したり、
せっかく覚えたCgが役立たずになったり、
対応するモデルデータを拾ってきてモーション付けたら
意味不明のエラーがでて動かなかったりするのに疲れたんだお。
よく定義されたフリーでクロスプラットフォームなC++かRubyのライブラリが欲しいんだお
ネットで拾ってきたモデルが何の問題もなくロードできて、
それなりに見栄えのする簡単なシーンが作れればいいんだお。
(でもシェーダーだけは書かせて)
チュートリアルとサンプルプログラムは日本語で読みたいんだお。
サンプルのモデルデータもいっぱい欲しいお。
、というのが全部そろってるOpenGLの上位ライブラリ無いですかね?
はいはい 豆腐で我慢しましょうね
>>833 openglの上位ライブラリがdirectxと考えられないか?
おまえに必要なのは、openglのライブラリじゃなくてOOP的な思考方法。
まずその旧式な考え方を変えたほうがいいだろう。
これいつかの京大野郎だろ。
アメリカやフランスだと良くあるんだけど、研究所の先生がライブラリの設計をして、各部分を学生に実装させるっていう手法。 学部生程度ならライブラリの(一部の)実装とアルゴ研究っていう卒論でいけるわけで、日本だとそういうことやって、かつ研究室の成果として公開してるのないでしょ。 tronと同じでopengl(renderer)のセンスある若いのもどんどん日本を離れて日本はこの分野でも孤立すると思うよ。 先生自体がプログラムの設計論も含めてソフトウェアのことをまったくと分かってないってのが大きいんだろうけど、無能な先生しかいないしこの環境のままじゃ10年後の日本も世界的にも低レベルのままだろうね。
838 :
820 :2010/01/03(日) 18:32:46
>>837 スタンフォードとか結構そういうのあるね
しかも卒業したらATIやnVIDIAに入って、さらにすごいのを作ってたりする。
日本だと無いね。まあCGの研究しているところ自体少ないが。
君、世の中の今年らなすぎ atiとかに入ったりしないな 頑張ったところでせいぜいベンチャーの携帯ゲーム会社かNTTdokomoの下請け(いわゆるIT土方)
スタンフォードを出た連中が来日してドコモの下請けなんかするの? それならそれで日本にとってはありがたいと思うけど。
先生の質も含めて、大学よりも専門学校の方がより進んでる。
>>836 ,839,841
ナイナイww
大学の先生&学生は質の高いライブラリを提供して欲しいというのは本当
今のままだと100年たってもPixarに勝てる気がしないわ。
ハードル高過ぎ。
大学の先生が中規模ソフトウェア・ライブラリの設計論(UMLやOPPも当然)をちゃんと理解してればそうでもない。 院生(後期)を何人かリーダで監督者(admin)にして、学部生を卒論研究と称してこき使って実装させれば2年で世界レベルのライブラリが作れる(但し汎用じゃなくてその先生の専門分野になりやすい)。 実際学部生なんか、バイトでゲーム会社のデバッグ要員なんだし、実習とコーディングが主なんだし、もっとアメリカの大学っぽい教育方法になったほうがいいと思うよ。 するとそのままゲイツとかジョブスみたいの、はたまたグーグルやフェイスブックみたいな若い企業が現れるだろうな。
このまえ東工大がgpuいっぱい買ったから、学部生をこき使って並列ライブラリの有用な(実験検証済み)参照実装ライブラリを作ってくれ。 ライセンスはbsd,mitみたいなtitライブラリとか。 どうせ国税でやってるんだし、もうすこし教育ってのを考えて直して少しでも形に残るものを作っていくべきだと思うよ。
この人なんでム板で薄っぺらい夢語ってんの?
>>847 夢も希望もない冷め切った人間かっこワルイ
いい加減空気読んでくれない?夢持つのは結構だけどさ、もうちょっとその意見が対象に届く場所を選んで言ってくれ。
ぷっ
いいじゃんどうせ過疎スレなんだし、読むような空気もたいしてないだろ
ここは便所の落書きとして有名な2chだよね
openGLには貴重な便所だ
そもそも英語が出来るから日本のコミュニティーなんかに期待してない。 12月の横浜を知ってると、やっぱ、一応同じ日本人として今の現状を嘆いてみたかっただけw
12月の横浜?
SIGGRAPH ASIAのことだろ
>>849 例えばどこ?
言い出しっぺなんだしどこだか示すことぐらい出来るよね?!
それは無理
IDつくようにならないかな。必死なやつがよくわかるからな。
ESのころからそうだろ というかやっぱ固定機能のステートマシンはマルチスレッドとか考えると扱いづらいよね、 というところなのだろう。
やっぱり固定機能は分離されてたほうがスッキリしててわかりやすいね。
俺はむしろもっと機能を削って欲しいがね OpenGLはいらん機能が多すぎて使い物にならん。
867 :
863 :2010/01/04(月) 14:41:34
いや、確かに>>864-
>>866 の言う事もわかるんだが、
そうするとライブラリは用いるglslソースもある程度縛られてくるだろ?
シェーダ変えたら動かないライブラリとか、シェーダの変更が限定されるライブラリとかおhるだろ
…まぁ、仮想関数で固定機能版とGLSL版としておけばいいか…
いっそ俺はシェーダー捨てて固定パイプに回帰して欲しいね。全部ハードで作り込んで、 glEnable ほにゃらら で使えるようにしてくれると非常にありがたい。 馬鹿でもチョンでもアンチャ2並のCGが表示できるようにして欲しい。
それは固定機能パイプライン相当のラッパーライブラリを作ればいい話ではないかい
>>869 2.xまでの固定パイプラインを全て網羅するラッパー作るのはかなり骨が折れるんではないかい?
個人でやるならそうだろうね かといってプロジェクトぶち上げて人を募っても 需要が無くて集まらないだろうね 868は是非がんばって欲しいね
>>864 オブジェクト指向の発達した今なら多態性も簡単に実現できるが
openglはC言語だし、C言語で多態性を実現するためのステートマシンなのだろう。
描画先共有した状態でコンテキストを独立して取得できれば一番なんだろうけどね
>>872 そういうライブラリの欠点は明らかで
1. 値段が高い
2. ソースが公開されてない
3. 移植性がない
4. 使用者が少ない
5. 周辺技術との接続性が悪い
と、採用する利点が少ない。
ハードで作っても良いしソフトでも良いけど、標準化の利点はこれらの欠点を駆逐する。
今の日本に必要なのはオープンソースの良くできたロイヤリティフリーな
グラフィックライブラリの整備だと思うね俺は。
その上でゲーム会社はゲーム作ったらいいし、家電のUIを作っても良いし
初音ミクが踊るソフトを作っても良い。
結局何がほしいんだ?
テクスチャーユニットの数をOpenGLコンテキストを作る前に取得する方法はありますか? いきなり glGetIntegerv (GL_MAX_TEXTURE_UNITS, &num) したら0しか返ってきません。
ない
ならせめて今コンテキストが有効かどうかクエリーする方法はありませんか?
コンテキストが有効って? よくわからんけど、コンテキスト作ってテクスチャユニット調べて不満だったら終了すりゃいいんじゃないの
>>874 後3年ぐらいでフリーで定番なのが2,3個出てくるだろう。
それ以降の4、5年以降はレイトレの方に移行するから、もうラスタ系のアルゴに金出すのはいなくなると思うよ。
レイトレに移行なんて10年待っても起きねーよ。プギャー 10年後もOpenGLを使い続けているのはほぼ確実
ハイエンドでは確実に起こっているだろうが 俺はGLだろうなぁ・・・はぁ
>>878 GLはあくまでコンテキスト上で動作するAPIで、グラフィックコンテキスト自体はOS依存
=コンテキストの有無を判断するのはGLでなくOSのする仕事
>>880 品質で言えばレイトレが無敵なのはわかる。だが世の流れは高品質<リアルタイムだし
技術還元を目指す研究所は今しばらくは現行のままでいくだろうね。
おまけにレイトレはもうネタが出尽くした感じで、進化するといえばレンダリング速度程度だろう
一方スキャンラインは拙いとこがあるからこそ、小細工で面白い事ができれば論文になるしな藁
ハードの革新があるまではGPGPU+プログラマブルシェーダが映画業界除いてシェア占め続けると思うぞ。
885 :
884 :2010/01/05(火) 17:52:24
これからしばらくはnVIDIAも言ってるハイブリッドレンダリングになるんだろうな。 ただnVIDIAのOptiXの動画見てるとリアルタイムレイトレーシングは5年後くらいにはハイエンドに降りてきそうな感じ。
887 :
884 :2010/01/05(火) 17:59:37
5年後は未だにff13程度だろうけど、10年後はレイトレの半リアルタイム・レンダリングになるよ。 10年前(1999年)はff7のポリゴンぐらいだったのが、ff13でほぼリアルタイムcgレンダリングになったでしょ。 ff13でもエフェクトでごまかしてるだけで低品質だなって感じはするけど、そろそろラスタ系アルゴの限界で今後は見た感じも含めて大きな進歩はないだろう。
>>885 openglがレンダリング(ライブラリの集合)を目指すのか、directxと同じように統合プラットフォーム(マウスとかの入力や、audio,videoなど)を目指すのかによる。
昔のゼロックスやIBMみたいに企業が資本を出して研究所を作ればかなり進歩するだろうけど、今のように大学研究所(やnvidiaとか一企業)レベルならこの分野でもMS天国だろうと思うよ。
放射線スキャン技術とか医療用CTとか考えると国がこの分野に投資してもいいのかなって思うけど。
CG板でやれば?
891 :
デフォルトの名無しさん :2010/01/06(水) 00:48:38
三省堂本社に行ってもOpenGLの本が売ってないんですけど、どういうことですか? DirectXなら何冊もあるのに… マジレス求む
取り寄せたら?
893 :
デフォルトの名無しさん :2010/01/06(水) 01:04:58
>>892 いや、っていうか、そんなにOpenGLって下火なんですか???
小さい書店に置いてないのは仕方ないとして、
日本一の書店に置いてないっておかしいでしょう?
担当が仕入れなきゃ入らないだけの話 スペースがかぎられてるんだから全部の本があるわけないだろ あんたあたまおかしいの?
おかしいのはお前のかーちゃんだろ クズに育て上げやがって碌なもんじゃねぇ
国立国会図書館でもあるまいし、日本一の図書館はすべての本がなけりゃおかしいってかwww
わらいすぎてまちがえたww日本一の書店ねwww
898 :
デフォルトの名無しさん :2010/01/06(水) 01:32:09
>>894 いやいや、売れるならどんな馬鹿担当だろうが仕入れるだろ?
あんた耳の穴から脳味噌垂れ(ry
iPhoneにAndroid Mobile界隈では大人気なのにな
>>891 DirectXでopenGLに相当するのはDirect3D
openGLと一緒にDirectInput やDirectShow使ったっていいし、Direct3DXだって使えたりするのあるし。
あとDirectXってバージョン上がると廃止になったり関数仕様変わったりするからそのたびに売れるのかも
openGLは赤本1冊あればとりあえず大丈夫。だけどあれ高いからそんな在庫置かないのかもね
三省堂の本社って店舗なの?
専門書ってバカ売れするような類の分野なのかねぇ
まずは、研究者やその筋のプロばかりがopengl apiを使うっていう発想から抜け出したほうがいい。
は?
>>900 ありがとうございます。
ああ、赤本ですか。古いヴァージョンのならPDFで持ってます。
なるほど、あれ(の最新ヴァージョン)さえ手に入れればいいんですね。
DirectXはそんな事情があったんですね。
三省堂の本店と言った方がよかったですね、もちろん店舗です。
というかOpenGLの本って最近発売されてない。 非常に読みにくい赤本か、床井先生の本ぐらいでしょまともなのは。 確かにモバイルでは頑張っているが……
907 :
デフォルトの名無しさん :2010/01/06(水) 14:48:57
初心者です。 OpenGLをはじめるには、GLUTを使うのが普通なんでしょうか? また、ある程度なれた場合はどういったものを使用しますか? 参考HP等の紹介をお願いします。
GLUT使うという手もあるけど、最近ならC# (VB) + OpenTKでOpenGLはじめたほうが、Visual StudioのIntellisenseも効いてて効率的にアプリケーション作れるから覚えやすいかもしれない。 まぁOpenGLの情報はC++とかが多いから若干C#とOpenTKに向けて読み替える必要があるが。
>>907 ずっとGLUTでオーケー。それで困ることになったらその時に考えればいい
910 :
907 :2010/01/06(水) 15:34:33
OpenTKはC#のみ?ですか・・・ 当面はGLUTでいきます。どうもです。
911 :
デフォルトの名無しさん :2010/01/07(木) 18:48:09
OpenGL2.0にかなりゲンナリしています 一人でコツコツ組む人に取っては、また1からあの複雑なアーキテクチャを おさらいするのは、物凄く茨の道に見えてしまいます。 glbigen()〜glend()が無くなると、途端に不安になります。 時間ばっかり喰っちゃいます。 どんな薬を飲んだら良いですか?
PCの電源切るだけで治るよ
なんでglbeginなくなるの? 代わりにシェーダとか勉強しろってことらしいけど シェーダ使ったのサンプルでもglbeginとか使って立方体作ったりしてるし わけわかめ
前より憶えるべきAPIが減った でも前より色んなことができる もうそれでいいじゃないか
glBegin .. glEndの代わりになるのはgl*Pointerなんかの頂点配列。 この変更はESでは実施済み。 なんでこうしたかと言うと、 ・プログラマのミスあるいは悪意によってglBeginを2度連続で入れるといった例外が消せる ・マルチスレッドにしたときにアトミック操作の範囲が明白になる ・単純に関数の呼び出し回数が減って速度が上がる といった理由から。
>>914 サンプルがいっぱいあれば不満はでなくなると思うよ。
>>913 glBeginとかのイミディエイトモードは廃止された。
頂点情報は全て頂点配列、VAO、VBOのどれかで転送する。
シェーダー使ったサンプルでglBeginとかを使ってるのはOpenGL2.0/2.1だろう。
glBegin等は3.0で廃止予告、3.1で完全廃止されたが、3.2では前方互換コンテキストでのみサポートされる。
918 :
デフォルトの名無しさん :2010/01/08(金) 11:28:18
void postMultiply (Transform transform) と言う関数の説明が Multiplies this transformation from the right by the given transformation. となっているのですが、これは現在の変換行列をT、引数の変換行列をT'とした場合、 M = T'T M = TT' のどちらを意味してるのでしょうか??? OpenGLでpostなら T'T のような気がするのですが、英語的には TT' ですよね???
M = TT' で良いようです。ありがとうございました。
何のライブラリか知らんが、 DirectXと同じように座標ベクトルを横ベクトルとして扱って 行列をベクトルの右からかけるという流儀で説明しているんだろうね。
いや。慣れるとそっちの方がむしろ自然に思えてくるよ。
俺はDirectXの流儀が不自然だとは一言も言っていないが。
FBOに対して描画を行う際、 書き込み先アルファ値が書き込み元アルファ値で描かれてしまうのですが、 これを、もともとの書き込み先のアルファ値を保持しての描画を 行うことはできますでしょうか?
>>923 FBOに限らずそうだと思うけど、glColorMaskか、
使えたらglBlendFuncSeparateで書き込み制御するのはどう?
925 :
923 :2010/01/10(日) 13:48:29
>>924 ありがとうございます。
glBlendFuncSeparate初耳でした。
ググってみたら、英語ドキュメントしか見つからなかったので、
これから読みほどいてみようと思います。
glColorMaskも試してみます
glBlendFuncSeparate はちょっと古いカードだと使えないし、 なんか癖があるというか使いにくかった気がする。 glColorMask の方が素直でいいと思う。
void polarView( GLdouble distance, twist, elevation, azimuth ) { glTranslated(0.0, 0.0, -distance); glRotated(-twist, 0.0, 0.0, 1.0); glRotated(-elevation, 1.0, 0.0, 0.0); glRotated(azimuth, 0.0, 0.0, 1.0); } これだと原点を中心にdistance下がって視点を動かすことになりますよね? これにカメラ移動をつけて見たいところでpolarViewに切り替えると考えるとどういったソースになるのでしょうか?
原点ではなく、その関数を使った時点での座標系に対して「distance下がって視点を動かす」変換がかかる。 LookAtの直後くらいで呼べばいいんじゃない?
lispからOpenGL使えばいいや stalinなら速度も気にならないし 問題はstalinの吐くcコードが読めない
glGenBuffers()が使いたいのですがインクルードするヘッダーファイルがわかりません。 OpenGL標準なのでGL/gl.hだけでいけるはずですが、コンパイラにないと怒られます。 OpenGLのバージョンは多分3.2です。 OpenGL renderer string: GeForce 8500 GT/PCI/SSE2 OpenGL version string: 3.2.0 NVIDIA 190.42
GLEWでも使え
glew.h をインストールしたら無事見つかりました。ありがとうございました。 でも何でOpenGLの標準機能が変なライブラリ入れないと使えないの。おかしくね
ドザならNVIDIA OpenGL SDKとか入れりゃいいじゃん 結局glew入ってるけど
MSはopenGLやる気あるんですか?
GL使ったことのない馬鹿?
>>933 Windowsならglew入れなくてもwglGetProcAddress使えば関数を持ってこられるよ。
glewは最新の拡張が追加されてから対応するまでに時間がかかるからなぁ…。
Advanced Usage嫁カス
DirectXみたいに Vector3やmatrixをクラス化して openGL用(float型)に適したライブラリ(もしくはヘッダファイル) って何かありませんか?
LGPL
OpenGLをDirectX3D相当にしてくれるライブラリありませんか。いや真面目に
WineD3Dとか?
D3DX相当ってこと? みんな自家製ライブラリを持ってる気がする
自前で持ってない俺はどうすれば…… ちょっと公開してくれません?
D3D知ってるならその通りに作れば良いだろ
恥ずかしいからやだw 他人ライブラリで良いのならhumus氏のFramkeworkとかは
Ogre3Dでも使えばいいんじゃね
そうですか...
自分で作れないものを扱えるとは思えないなあ
極論バカ登場w
なにこの粘着?ww
頂点データの設定って glBufferDataとglVertexAttribPointerにもあるんだけど どういうこと?
そういうこと
ライトの指定の仕方がどうにもわかりません。 ワールド座標でx、z平面に置いたポリゴンに光を上から垂直に当てました。 glClear GL_COLOR_BUFFER_BIT glMatrixMode GL_MODELVIEW glLoadIdentity gluLookAt 0,10,10, # from 0,0,0, # to 0,1,0 # up glLight GL_LIGHT0, GL_POSITION, [0,-1,0,0] glBegin GL_TRIANGLE_STRIP glMaterial GL_FRONT_AND_BACK, GL_DIFFUSE, [1,1,1] glVertex 10,0,-10 glVertex 10,0,10 glVertex -10,0,-10 glVertex -10,0,10 glEnd 期待しているのは完全な白(1,1,1)なのですが、とても暗い(0,0,0)?です。 何が間違えているのでしょうか。
ライト使わずglColorで描画すればそのポリゴンは見えることは確認してるのかな 予想 glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);
それ真上からじゃなくて真下からじゃね。 あと法線の設定をしなければならない。
961 :
958 :2010/01/17(日) 13:08:29
法線の設定(glNormal)をしてませんでした! あとどうもライトの方向が自分の理解と逆らしい。 w=0を指定するとx,y,zの方向を照らす平行光源になる、で良いんですよね? (0,-1,0,0)がy軸上から下。 何か+ーが逆っぽいのですが。
ライトのポジションはwで割られるから、wに0を指定するとxyzで指定された方向「からの」無限遠光源となる。 gluLookAtの最後の3つの引数でy軸の上方向を視界の上方向としてるんだから、ライトのポジションには0, 1, 0, 0を指定することで四角形の上空にある光源になる。
POSITIONだからな?DIRECTIONではない。
964 :
958 :2010/01/17(日) 13:52:10
あーようやくわかりました。床井先生の本では "「w=0」であれば(x,y,z)方向の平行光線の設定になります。" って書いてあったとです。床井先生……
こりゃ〜ゆかい
もうすぐ新スレの季節だけど、
>>1 のテンプレの関連サイトの3DLabsはそろそろ成仏させてあげて
C# + Tao Frameworkで3Dプログラムを作ろうとしています。 3Dモデルを読み込みたいのですが、環境依存を避けるために、OpenGLでは 3Dモデルの読み込みを標準でサポートしていないらしく、 色々検索してみたのですが情報が見つかりませんでした。 どういう手段を取ればよいのでしょうか?
>色々検索してみたのですが情報が見つかりませんでした。 ダウト。
>>968 ウソつくなよw
手軽に使えるライブラリは世の中に存在しないので自作するのがセオリー
ただまともな仕様があるファイルフォーマットはないので素直に諦めるのが一番良い。
たかがモデルの読み込みを、諦めるのが一番ってw
モデルの読み込み探して情報が見つからないっていうのはないだろ。 適当にググっただけでも色々と情報が出てくるけどな。
972 :
967 :2010/01/17(日) 22:40:37
>>971 見つかったとしてもXNAやDirectX用だったり、C++用だったりと、
かすってるだけで惜しいものばかりでして……。
GLSharpは人気のようですが、Windows専用らしいのでよろしくありません。
(どうせWindows用にするのならSlimDXを使います)
C++用のものをC#向けに書き換えるという手もありますが、
3Dモデルを読み込むプログラムの長さは相当なもので、
かなりの手間がかかるのでできれば避けたいです(どうしてもほかに手がなければ検討します)。
もうDirectXかC++にしちゃえよ
>>972 C#のは確かにないわ。でも元々OpenGL自体、C#のサンプルなんてOpenTKやTao以外ではほとんど見れないんだから、C++のを読み替えて勉強するだろ?
所詮OpenGL 素直にDirectX使おう
DirectXってWindows限定じゃん
ああっ,ごめんなさい.
LinuxでもDirectX入れれば動くんじゃなかった?
COLLADAあたりありそうだけど無いのかな
980 :
デフォルトの名無しさん :2010/01/18(月) 00:26:55
C#自体MS製だからなぁ
VBならMS製といえなくもないが、C#はMS製ってわけじゃないぞ
982 :
デフォルトの名無しさん :2010/01/18(月) 02:52:26
ステンシルバッファについて、良いサイトを教えてください。
モデルのファイル形式とかそれね、xml系のプログラム組める人がそのうちいいライブラリ作ってくれるから。 それまでは独自のアプリ(関係ないけどphotoshとかautocadとか)やopengl,directx向け専用ライブラリでやるのがいいよ。 java系の優秀な開発者たちが携帯関係で必要だからデスクトップの方に目を向けだしているから、3年後ぐらいには汎用性高いのがいくらか出てくると思う。
下手くそな釣りだなぁ
結局C#とOpenGLで3Dモデルの読み込みできねーのか
そんな事より次スレのテンプレ作ろうぜ。 NVIDIAやATIのサイトは抜かして、 必読書とかチュートリアルへのリンクを張ろう。
よし頑張れ
よし埋めるぞ
C#でもモデルの読み込みはできるだろうが、それをやってて尚且つ皆に公開している人がいないだけ。
>>986 3Dモデルっていろいろあるし、それぞれがかなり複雑、ってことは知らないんだろうな。
3Dプログラムって馬鹿にはできないよ。君には無理。あきらめな。
考えてるやつが馬鹿だから複雑になっちゃうんだよ
あんまり晒してやるなよ
スレ建て失敗。
以下に
>>1 を次スレの1を貼るから誰か頼む。
ちょっとテンプレ考えてみたのですが、これでどうですか。
異論あるかも。1000までいったら次スレ立てます。
クロスプラットフォームの3D API OpenGLに関する話題を扱うスレッド。
現在のバージョンは3.2
http://www.opengl.org/ == OpenGLと一緒に使われるツール&ライブラリ ==
苦労したくなかったらとりあえず入れとけ。
・glut: ウィンドウを表示するのに必要なライブラリ。さすがに古くさい
・glew: これを入れないと拡張機能が使えないor使いにくい
・glxgears: 歯車が回るベンチマーク。-infoでOpenGLのバージョンが見られる。OpenGLの動作確認はこれで
・glxinfo: 自分の使っているカードのOpenGLの機能が全てリストアップされる。
== 必読書 ==
・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 NeHe:
http://nehe.gamedev.net/ == 前スレ ==
Part13:
http://pc12.2ch.net/test/read.cgi/tech/1221215309/
俺はどちらでもいい。
1000get
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。