トップページ⇒tech
986コメント358KB

【超初心者】くだすれOpenGL2.0【質問用】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/09/24(月) 05:26:47
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
OpenGL使いが優しくコメントを返しますが、
お礼はOpenGLの布教と初心者の救済をお願いします。

OpenGL・Home・Page
http://www.opengl.org/
0232デフォルトの名無しさん2007/11/08(木) 11:51:23
>>230
文章から動きがイメージできないが…

>(gl_Vertex - 視点)ベクトルを使うと、板の両サイドでこのベクトルの向きが違うので

両サイドってのは板の両端って意味でおk?
テクスチャを切り替える基準は頂点の位置じゃなくて板の位置なわけか?
頂点の位置じゃない板の位置っていうのは何だろう。 中心点かなにかか。 それを与える必要があるんじゃないか。
02332262007/11/08(木) 12:10:38
はい、板の両端ってことです。
やっぱり中心点かなにか必要ですよね。了解しました。
なんとかがんばってみます。
0234デフォルトの名無しさん2007/11/08(木) 12:21:28
>>231
単純に (x, z) を (s, t) にマップさせればいいんじゃないかな、少々大雑把かもしれんが
float size = 10000;
float s_plane[] = { 0.5/size, 0, 0, 0.5 };
float t_plane[] = { 0, 0, 0.5/size, 0.5 };
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGenfv(GL_S, GL_OBJECT_PLANE, s_plane);
glTexGenfv(GL_T, GL_OBJECT_PLANE, t_plane);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glutSolidSphere(size, 10, 10);

実際のテクスチャの様子みながらglScalefで球を平べったくするなり調節した方がいいかもしれない
0235デフォルトの名無しさん2007/11/08(木) 17:09:18
GLEWでシェーダを使ってますが、
デバックとかできないんですか?
0236デフォルトの名無しさん2007/11/08(木) 18:42:18
>231
空っぽく見せるのに球にする必要はない。skyboxでぐぐれ
0237デフォルトの名無しさん2007/11/09(金) 00:16:02
>>235
知りたい変数を1.0~0.0の範囲に収まるように調整してからフラグメントの色に出力する方法が一番いいと思うよ
0238デフォルトの名無しさん2007/11/09(金) 03:17:39
>>224,225
ありがとうございます.うまく回転させることができました.
glOrthoについてもう少し聞きたいんですが,ここで指定したleft, right, top, bottomが
glRectやglVertex2などで指定できる画面の端であるという理解でよいのでしょうか?


これに関連してglOrtho(-4, 4, -3, 3, -1, 1);とやって-4から4の間で指定しても
glOrtho(-1,1,-0.75,0.75,-1,1);とやって-1から1の間で指定しても同じような気がしますが,
ここの値を任意に大きくしたり小さくする意味はなにかあるのでしょうか?
0239デフォルトの名無しさん2007/11/09(金) 11:13:37
>>238
そういう理解でよい

結局は同じだけど、-1〜1 と 0〜640 では扱いやすさが異なるだろう
場合に応じて使いやすい座標系を設定すればよい
0240デフォルトの名無しさん2007/11/09(金) 11:18:15
>>235
シェーダってGLSLでいいんだよな?
WindowsならgDEBuggerの30日体験版が使えると思う
いざ買おうとするとイスラエルにfaxする必要があるんだが
あとはglslDevilってのがWindowsとLinuxなんかで使えてフリーだ
使ったことは無いがスクリーンショットを見る限り便利そう
MacならOpenGL Profilerが標準で付いてる

Cgだとデバッグ方法は分からん
FX Composerとかでやるしか無いんじゃないかな
02412352007/11/09(金) 12:47:35
ありがとうございます。
gDEBugger使ってみます。
0242デフォルトの名無しさん2007/11/09(金) 14:10:49
マルチサンプリングアンチエイリアスというのをやりたいのですが、
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB |GLUT_MULTISAMPLE);
とした後、
glGetIntegerv (GL_SAMPLE_BUFFERS_ARB, buf);
glGetIntegerv (GL_SAMPLES_ARB, sbuf);
でbufとsbufに0が帰ってきて失敗してしまいます。

おそらくビデオカードがこれに非対応なのでしょうが、
マルチサンプリングアンチエイリアスをする方法は他にありますか?
シェーダを使ってやるしかないのでしょうか?
0243デフォルトの名無しさん2007/11/09(金) 17:09:44
228でし。
なんとかなりました。
ありがとうございました。
0244デフォルトの名無しさん2007/11/09(金) 21:57:08
>>242
他にはシェーダで自前でAAかけるくらいしかないね
つか今時MSAA対応してないグラボってもしかしてIntel?
そうであればシェーダでやってもまともな速度で動くとは思えんよ
0245デフォルトの名無しさん2007/11/09(金) 23:24:38
モデリングソフトで作ったファイルを読み込むライブラリで
何か代表的なものあったら教えてください。
Blenderでエクスポートできるやつ希望。
0246デフォルトの名無しさん2007/11/09(金) 23:57:10
>>245
その質問 いつか見た
0247デフォルトの名無しさん2007/11/10(土) 01:06:22
>>245
COLLADA DOM
0248デフォルトの名無しさん2007/11/10(土) 15:41:45
lib3dsなんかどうよ
0249デフォルトの名無しさん2007/11/12(月) 02:00:06
openglで2Dの木の描画に必要なのは線の描画と再帰処理だけど
3Dの場合はどうすればいいんだ?
0250デフォルトの名無しさん2007/11/12(月) 02:47:59
座標変換を勉強するよろし
0251デフォルトの名無しさん2007/11/12(月) 09:18:14
>>249
3Dの場合も線の描画と再帰処理だと思うけど?
0252デフォルトの名無しさん2007/11/12(月) 11:45:20
半透明の板同士の交差ってどうやったらちゃんと描画される?
交差というか貫通した感じで交わっている場合、半分はブレンドされるが半分はやってくれない
描画順入れ替えてもこればかりは解決できないす…
0253デフォルトの名無しさん2007/11/12(月) 11:52:29
>>252
あまり詳しくないので、答えるのもあれなんだが
複数重なった半透明処理をH/Wでちゃんとやってくれるボードのほうが珍しいというか
高額なやつじゃないとやってくれないんじゃなかったっけ?

ソフトウェアモードだとちゃんとできたりしない?
0254デフォルトの名無しさん2007/11/12(月) 18:25:16
はじめてOpenGLを使うことになり、C#で使うためにCで書かれた
サンプルを見ながらC#に書き換えていったのですが、
どうしてももHGLRCが取得できずに困っています。SetPixelFormatまでは
上手くいってるみたいなのですが(Marshal.GetHRForLastWin32Error()は0x80070000)…
行数圧縮のため見づらいですが下にコードを書きます。

HDC = user32.GetDC(this.Handle);//Formのハンドル
wgl.wglSwapBuffers(HDC);
PIXELFORMATDESCRIPTOR pfd = new PIXELFORMATDESCRIPTOR();
pfd.nSize = Marshal.SizeOf(typeof(PIXELFORMATDESCRIPTOR));/*40byte*/
pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = 0; pfd.cColorBits = 32; pfd.cRedBits = 0; pfd.cRedShift = 0; pfd.cGreenBits = 0;
pfd.cGreenShift = 0; pfd.cBlueBits = 0; pfd.cBlueShift = 0; pfd.cAlphaBits = 8; pfd.cAlphaShift = 0;
pfd.cAccumBits = 32; pfd.cAccumRedBits = 0; pfd.cAccumGreenBits = 0; pfd.cAccumBlueBits = 0;
pfd.cAccumAlphaBits = 8; pfd.cDepthBits = 16; pfd.cStencilBits = 8; pfd.cAuxBuffers = 0; pfd.iLayerType = 0;
pfd.bReserved = 0; pfd.dwLayerMask = 0; pfd.dwVisibleMask = 0; pfd.dwDamageMask = 0;
int pixelFormat = gdi32.ChoosePixelFormat(HDC, ref pfd);
bool success = gdi32.SetPixelFormat(HDC, pixelFormat, ref pfd);
HRC = wgl.wglCreateContext(HDC);

pixelFormatも0ではないので多分大丈夫だと思います(実験時は7)。
どこが原因なのかさっぱりです orz
一体何が原因なのでしょうか?
0255デフォルトの名無しさん2007/11/12(月) 20:28:47
>>252
交差してるところでポリゴンを割り、一番奥から順に描画するしかない。
0256デフォルトの名無しさん2007/11/12(月) 21:38:22
>>252
基本的には、交差させないのが一番。
交差するならCPUで計算してポリゴン割る。
分割せずに半透明ポリゴンを順序非依存で正しく描画する方法といったら、
 1. Depth Peeling
 2. シェーダで半透明情報をバッファ上に蓄積、最後に合成
の二通りかな。
1.はdepth complexityに応じてnパスレンダリングをおこなう必要がある。
2.は事前に決めた枚数(バッファの深さと精度のトレードオフ)より沢山は重ねられない。

まぁどっちにしても非常に負荷の大きい処理なわけで、半透明処理は鬼門ですわね。

実装が簡単なのは1.だけど、今後2.のアプローチが流行りそうかもしれないので
チャレンジしてみてください是非!
0257デフォルトの名無しさん2007/11/12(月) 22:40:09
半透明ポリゴンが交差せざるを得ない状況が思いつかなかったので
懸命に頭ひねってみたんだが

白スク水着せたおにゃのこが家庭用プールで遊んでる構図しか浮かばなかった
02582522007/11/13(火) 03:56:59
なんにしてもややこしそう…ですね
色々試してみます
0259デフォルトの名無しさん2007/11/13(火) 04:45:04
>>257
どの部位が交差するんだよ?
0260デフォルトの名無しさん2007/11/13(火) 09:48:02
>>259
濡れた白スクと水面じゃねーの?

>>256
この2の方法てAバッファとか言うんだっけ?
これって遅延シェーディングと似たようなもんだと理解してるんだけど
それだとAAって自前でかけないとならないよな
それともAAかけて描画した結果を蓄積しちゃっていいのか?
ただの興味だけなんだが誰か分かる人がいたら頼む
0261デフォルトの名無しさん2007/11/13(火) 11:54:17
>>244
GeForce FX 7600です。
調べるとMSAAに対応しているみたいですね。
赤本のサンプルソース(multisamp.c)なのですが動かないです。
加えたのは
#include <GL/glew.h>
だけです。
何か足りないのでしょうか?
02622612007/11/13(火) 14:52:50
ちょっとだけ自己解決しました。
ビデオカードのコントロールパネルのアンチエイリアシング設定を
アプリケーションによるコントロール → 2xMS
にしてやると動きました。

しかしアプリ任せのMSAAをやるには
なにかピクセルバッファのようなものが必要なのでしょうね。
0263デフォルトの名無しさん2007/11/13(火) 16:49:56
Windows XP + GeForce 7900 GS で、glutではなくwglMakeCurrent使って
コントロールに描画しているが、242と同じくマルチサンプリングアンチエイリアスできない。
同じようにbufとsbufに0が返ってくる。

PIXELFORMATDESCRIPTOR にはマルチサンプリング関係の設定はないみたいだし。
>>242 はglutで描画してるの?
02642542007/11/13(火) 18:37:16
やはり場違いなようなのでC#のスレ行ってきます。
スレ汚しすいませんでした。
0265デフォルトの名無しさん2007/11/13(火) 18:46:16
>>261
GeForceにFX7600なんてないのはともかく、それならHW的には十分だな
opengl.orgに繋がらないので違うところにあったそれっぽいWindows版のGLUTのソースを確認したが、
そのソースを見る限りWindowsではGLUT_MULTISAMPLEは無視されてるみたいだな
俺の見たソースが最新ならGLUTでは改造しないと無理そうだ

>>263
SetPixelFormatじゃ設定できない
WGL_ARB_pixel_format拡張のwglChoosePixelFormatに
属性としてWGL_SAMPLE_BUFFERS_ARBとWGL_SAMPLES_ARBで指定するとできるはず
0266デフォルトの名無しさん2007/11/13(火) 19:05:49
すいません、超初心者ですorz

glutDisplayFunc( DisplayTri );
glutDisplayFunc( DisplayTri2 );
glutMainLoop();

例えばこういう場合、glutMainLoopによって上2行の関数がどちらともループしてしまいます。
1行目glutDisplayFunc( DisplayTri )を初めの1回だけ実行し、その後2行目のglutDisplayFunc( DisplayTri2 )をループで実行し続けるにはどうしたらいいでしょうか?
0267デフォルトの名無しさん2007/11/13(火) 20:08:48
glutDisplayFunc って 2 回目呼んだら上書きされるのでは?
だから DisplayTri1 を最初の 1 回しか実行してほしくないなら↓のようにすればいいはず

void DisplayTri2(void)
{
  /* なにか素敵なものを描画 */
}
void DisplayTri1(void)
{
  /* なにか楽しいものを描画 */
  glutDisplayFunc(DisplayTri2);
}
int main(....)
{
  ...
  glutDisplayFunc(DisplayTri1);
  glutMainLoop();
}

その前に glutMainLoop をそもそも誤解してるような気もするが。
0268デフォルトの名無しさん2007/11/13(火) 21:34:01
FBOについて質問があります。
FBOを作成し空のテクスチャを割り当て、ディプス、ステンシルバッファは割り当てないとします。
そして、FBOへ書き込み先を変更し描画を行った場合、深度値やステンシル値はデフォルトのバッファに書き込まれるのでしょうか?
それとも何処にも書き込まれないのでしょうか?
もちろん、glEnableでディプス、ステンシルをONにした状態です。
分かる方宜しくお願いします。
0269デフォルトの名無しさん2007/11/14(水) 00:54:12
>>263
glutです。

>>265
わざわざソースを見ていただいてありがとうございます。
おそらく私の問題も結局は>>263の人と同じだとおもうので
GLUTの中を調べながらもう少しやってみます。
0270デフォルトの名無しさん2007/11/14(水) 06:54:28
>>268
どこにも書き込まれないのが正しいと思う
そのFBOをBindした状態ではDepthBitsとStencilBitsが0になってるはずだ
0271デフォルトの名無しさん2007/11/15(木) 01:41:08
glslでマトリックスとベクトル型のかけ算にmulを使うと
warning C7506: OpenGL does not define the global function mul
と出ますが、ちゃんと動作しちゃいます。
これは、どういう事なのでしょうか?
グラボによっては動作しないのでしょうか?
OSはXP,グラボGeForceです。
0272デフォルトの名無しさん2007/11/15(木) 05:54:42
>>271
その警告の通りGLSLではmulなんて関数は無くて、普通に*演算子で計算できるよ
しかしGeForceだとGL_EXT_Cg_shaderというGLSLでCgの命令も使える拡張がある
これのおかげでmulが警告ありながらも使えて、たぶんfloat4なんかも使えるはずだ
動きはするけどRadeon積んだマシンに持っていくと途端に動かなくなるから
ちょっと迷惑な拡張なんだよな

とりあえず警告潰すようにしていけばGL_EXT_Cg_shader頼りになることも無いんじゃないかな
0273デフォルトの名無しさん2007/11/15(木) 11:33:42
ベンダによって、GLSLコンパイラがエラーに寛容だったりするから困るよね。
ATIの方がわりと厳しいんだっけ?
0274デフォルトの名無しさん2007/11/15(木) 12:40:19
Radeonで昔試したら時はGLSLのコンパイルエラーメッセージが3DlabsのGLSLValidateと全く同じだったな
多分GLSL Frontendとか使ってたんじゃないかと思う
今は別物になってるのか手を入れて使ってるのかは良く知らないけど。
GeForceで開発してRadeonに持っていく時にはGLSLValidateによくお世話になった
0275デフォルトの名無しさん2007/11/15(木) 18:40:07
ウインドウの色(背景部分?)を上半分が白、下半分が黒って
できますか?教えてください。
0276デフォルトの名無しさん2007/11/15(木) 18:54:29
上半分を白で、下半分を黒で、四角形を描けばいいだけ
02772712007/11/15(木) 20:02:19
>>272
レスありがとうございます。
本当に迷惑な拡張ですね・・・。
以後、気を付けたいとおもいます。
02782752007/11/15(木) 22:06:37
>>276
ありがとうございます。初歩的なことですいません。
glClearColor(0.3, 0.3, 1.0, 0.0);
をいじってできるかと思いました。
0279デフォルトの名無しさん2007/11/16(金) 00:09:03
いじってたらできるのは子供だけ
0280デフォルトの名無しさん2007/11/16(金) 00:56:17
子供ってすげーーーーーーー
0281デフォルトの名無しさん2007/11/16(金) 15:47:11
glMultiTexCoordの使い方がよくわかりません。
どうやってTEXCOORD0〜7に座標を指定していくのでしょうか
0282デフォルトの名無しさん2007/11/16(金) 16:11:21
>>281
それはglMultiTexCoordのリファレンスを読んだ上で言ってるのか

http://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml
>Parameters
>target
>  Specifies the texture unit whose coordinates should be modified.
>  The number of texture units is implementation dependent, but must be at least two.
>  Symbolic constant must be one of GL_TEXTUREi, where i ranges from 0 to GL_MAX_TEXTURE_COORDS - 1,
>  which is an implementation-dependent value.
>s, t, r, q
>  Specify s, t, r, and q texture coordinates for target texture unit.
>  Not all parameters are present in all forms of the command. 
0283デフォルトの名無しさん2007/11/16(金) 17:18:09
>>282
その仕様は理解しているのですが…
すみません日本語おかしくなるかも知れないんですが、まとめて質問させてください。

glBegin(GL_QUADS);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 1.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0, 1.0);
glVertex3d(-1.0, -1.0, 0.0);
…中略
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0, 0.0);
glVertex3d(-1.0, 1.0, 0.0);
glEnd();

こういう風に使った場合(-1.0, -1.0, 0.0)の
TEXCOORD0にはテクスチャ0番での、(0 1)がテクスチャ座標として与えられて
TEXCOORD1にはテクスチャ1番での、(0 1)がテクスチャ座標として与えられるわけですよね。

で、Cgのvertexシェーダーで
IN{
float4 objectPosition : POSITION,
float4 color : COLOR,
float4 texCoord0 : TEXCOORD0,
float4 texCoord1 : TEXCOORD1,
}
とした場合、vertex(-1.0, -1.0, 0.0)のとき、
texCoord0には(0 1) texCoord1にも(0 1)の値が入力されるということでしょうか?


TEXCOORDセマンティックが、数字としてどこを指しているのか確認したくて質問しました。
0284デフォルトの名無しさん2007/11/16(金) 21:47:09
それはMultiTexCoordというよりCgの質問じゃないか
それもCgのマニュアル見れば書いてあるわけだが、
TEXCOORD0-TEXCOORD7
Input texture coordinates (texcoord0-texcoord7)
through MultiTexCoord command
だそうだ
0285デフォルトの名無しさん2007/11/17(土) 03:00:44
ウォークスルーのプログラムで、ウィンドウいっぱいに表示されるくらい、ポリゴンに近づくと処理が重くなります。
GL_QUADSで描いたごく単純な長方形でも重くなるので、なにが原因なのかよくわかりません。
02862632007/11/17(土) 10:40:52
>>265
おかげさまでマルチサンプリングアンチエイリアスできました。

>>269
ここが参考になりました。
http://mrya.cocolog-nifty.com/caffis_diary/2006/05/fsaa.html
0287デフォルトの名無しさん2007/11/17(土) 11:53:43
>>285
ソフトウェアレンダリングになってるってことはない?
0288デフォルトの名無しさん2007/11/17(土) 12:19:16
>>284
すみません、ということは>>283は合ってるのでしょうか?

それだと、MultiTexCoordは常に0〜1の範囲の座標をCgに渡して
それ以外の値をTexCoord0〜1はもてない、ということになりますよね
0289デフォルトの名無しさん2007/11/17(土) 12:27:51
>>288
なんで?
100でも-20でも好きな座標を渡せばいいじゃん
元々glTexCoordに渡すテクスチャ座標は0〜1に制限されてはいないんだし
0290デフォルトの名無しさん2007/11/17(土) 12:36:08
なるほど
テクスチャの有無云々じゃなくて、座標を優先すればいいわけですか。

ようやくわかってきました。ありが�d
0291デフォルトの名無しさん2007/11/17(土) 15:07:03
>>287
確認できませんでした。。
ソフトウェアレンダリングというものは、プログラムの内部で決定するのでしょうか?
例えばOpenGLの初期化の際に、ソフトウェアレンダリングを指定するみたいな…
あるいはドライバの設定で変更するものなのでしょうか?
0292デフォルトの名無しさん2007/11/17(土) 15:14:00
>>291
とりあえず↓をOpenGLの初期化後にやってみそ
printf("%s\n", glGetString(GL_VENDOR));
printf("%s\n", glGetString(GL_RENDERER));
printf("%s\n", glGetString(GL_VERSION));
02932912007/11/17(土) 15:32:22
>>292
NVIDIA Corporation
GeForce 6200/AGP/SSE2
2.0.3

こんな感じになりました
02942912007/11/17(土) 15:47:46
検索したところGL_RENDERERがGDIになってるとソフトウェアレンダリングってことらしいですね(Windowsでは)
ってことはおそらく自分の環境はソフトウェアレンダリングではなく、他に原因があるってことでしょうね
もう少し調べてみます
0295デフォルトの名無しさん2007/11/17(土) 16:17:38
GeForceだと
glEnable(GL_POLYGON_SMOOTH)やらglEnable(GL_LINE_SMOOTH)は
遅くなるかもね
02962912007/11/17(土) 19:01:50
>>295
Enableしないようにしてみたところ、見違えるほど速く動くようになりました
ほんとうにありがとうございます
0297デフォルトの名無しさん2007/11/22(木) 14:17:06
openglで3次元テクスチャを使おうと赤本を見たら

image[r][t][s][3]
という風に3次元テクスチャの領域を取ってるのですが
これってなんで
struct 3Dtex{
int r,g,b;
}3Dtex[r][t][s];
みたいなのではダメなのでしょうか。


0〜2がrgbに対応している、と解釈してるのですがそれだとカラッポの領域も確保しなくてはならなくて
256×256×256でものすごい重くなります。

1次元で 3Dtex[]={r,g,b r,g,b r,g,b…}みたいに確保したら動かないのでしょうか?
0298デフォルトの名無しさん2007/11/22(木) 14:21:44
>みたいなのではダメなのでしょうか。

別にだめなことはない

>1次元で 3Dtex[]={r,g,b r,g,b r,g,b…}みたいに確保したら動かないのでしょうか?

それでも動く
どの方法を取るにしても、256×256×256 のテクスチャを扱うつもりならそれだけのメモリは要るから(48MBくらいか?)、結局同じ
どれでも好きなやり方でどうぞ
0299デフォルトの名無しさん2007/11/22(木) 14:28:40
1次元だと、ボクセルの座標がよくわからないのですが

4 4 4の3次元テクスチャだと、1項目が0 0 0 最後が4 4 4だとなんとなくわかるのですが
2項目はボクセルのどこに当たるのでしょう

下の○にrgbが入ってるとして、それを1次元で○だけ確保したら
○×○○×
3Dtex[]={○ ○ ○}と格納されますが、rgb情報はあってもxyz情報が消えませんか?
そこら辺が1次元で確保するときよくわからなくて
0300デフォルトの名無しさん2007/11/22(木) 14:36:16
1番目は 0 0 0
2番目は 0 0 1
3番目は 0 0 2
4番目は 0 0 3
5番目は 0 1 0
  :
8番目は 0 1 3
9番目は 0 2 0
  :
12番目は 0 2 3
13番目は 0 3 0
  :
16番目は 0 3 3
17番目は 1 0 0
  :
32番目は 1 3 3
33番目は 2 0 0
  :
48番目は 2 3 3
49番目は 3 0 0
  :
64番目は 3 3 3

全部で4×4×4=64個分必要
03013002007/11/22(木) 14:37:53
あぁ悪い、それ z y x の順だ
2番目は 0 0 1 ・・・ z=0, y=0, x=1 ってことね
0302デフォルトの名無しさん2007/11/22(木) 14:40:08
つまり1次元で確保するときも
×の領域分作らないとダメってことですね。

ありがとうございました。それなら3次元で確保したほうがプログラムでアクセスしやすい(^^;
0303デフォルトの名無しさん2007/11/23(金) 06:04:38
>>302
構造体の場合、隙間に気をつけてな。
0304デフォルトの名無しさん2007/11/24(土) 15:21:17
隙間?
0305デフォルトの名無しさん2007/11/24(土) 15:36:39
padding
0306デフォルトの名無しさん2007/11/25(日) 01:02:04
OpenGLをCygwinに入れたいのですが、
わかりやすい手順が書いてあるWEBページないですか?



0307デフォルトの名無しさん2007/11/25(日) 01:05:20
cygwinのsetup.exe起動して、パッケージの選択画面でgraphics/openglにチェック入れるだけ
0308デフォルトの名無しさん2007/11/25(日) 03:58:11
cygwinにGLUTのライブラリを追加しようとしてもできません。。

ttp://www.xmission.com/~nate/glut.htmlのサイトからglut-3.7.6-bin.zipをDLして
glut32.dllを\WINDOWS\system32に入れ、glut32.libを..\cygwin\lib\mingwに入れ
glut.hを..\cygwin\usr\include\mingwに追加してもコンパイル時に

GL/glut.h: No such file or directoryと出てしまいます。

初心者でググってもよくわからなかったのでどなたかレスお願いします。
質問の仕方がおかしかったらすいません。
0309デフォルトの名無しさん2007/11/25(日) 03:59:28
>>307
ファイル作ったんですが、コンパイルが通らなくて、設定がおかしいのかな?
と思ってて、探してるんですが。

bashにglut32のコマンドが無いってでるんですよ。
助けて〜
0310デフォルトの名無しさん2007/11/25(日) 04:26:07
mingw 使うんならコンパイル時に -mno-cygwin オプションを付けてる?
0311デフォルトの名無しさん2007/11/25(日) 04:55:54
cygwinはそのあたりのことを解決できない奴が使うもんじゃないと思うぞ。
素直にVS入れたらどうよ。
0312デフォルトの名無しさん2007/11/25(日) 10:22:45
>>308
なんでfreeglutじゃだめなん?
0313デフォルトの名無しさん2007/11/25(日) 10:54:56
>>308
とりあえずglut.hを
..\cygwin\usr\include\mingw\GLに移してみては
0314デフォルトの名無しさん2007/11/25(日) 14:45:02
みなさんレスありがとうございます。

cygwinは大学で買ったPCにプリセットされてて
講義とかでもそれを使わなければいけないので使ってます。
あとopenGLは大学の講義では扱わないので自分で調べてやってみようと思いました。

>>312さん
freeglutはネットで探しても情報が…と言ってみるけど、知りませんでした。
調べてみます。

>>313さん
GLフォルダが無かったので勝手につくって入れてみたけど変わりませんでした。。

>>310さん
-mno-cygwinオプションつけると
/cygdrive/c/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ccu7vLOg.o:test.c:(.text+0x1c): unde
fined reference to `___glutInitWithExit'
みたいなエラーが大量に表示されてしまうんですけど…いいのでしょうか!?
0315デフォルトの名無しさん2007/11/25(日) 14:56:15
調べてみますというか、cygwinで使うならsetup.exeからfreeglut選ぶだけなんだが
0316デフォルトの名無しさん2007/11/25(日) 15:43:15
>>314
もう面倒くさいから自分で入れるの諦めてsetup.exeに任せちまえよ
0317デフォルトの名無しさん2007/11/25(日) 15:44:22
入れてから、どうすればいいのかわかりません
0318デフォルトの名無しさん2007/11/25(日) 15:53:06
>>315,>>31さんレスありがとうございます。

そうですね、もうsetup.exeでインストールし直したほうが早そうですね;
それではインストールしてきます。
03193182007/11/25(日) 15:53:55
間違えました>>315,>>316さんです。
0320デフォルトの名無しさん2007/11/25(日) 20:08:06
makefileの作り方教えてください
0321デフォルトの名無しさん2007/11/25(日) 20:19:05
>>320
スレ違い
0322デフォルトの名無しさん2007/11/25(日) 20:33:20
openGLのmakefileの作り方教えてください
0323デフォルトの名無しさん2007/11/25(日) 20:45:23
OPENGLで、コンパイルすると
makeは、なんですか?って聞かれるんです。
0324デフォルトの名無しさん2007/11/25(日) 21:03:40
どういう手順でコンパイルしたら誰に訊かれるんだよ
0325デフォルトの名無しさん2007/11/25(日) 22:26:37
OPENGLで右クリックをしたら〜したいというとき
どういう風にしたらいいのですか?

床井先生のところで左クリックはあったのですが、右クリックが見当たらず
助けてください(;;
0326デフォルトの名無しさん2007/11/25(日) 22:36:10
すいません、解決しました。

見ていたサンプルにmouse_down[3]というのがあって
それで判別してるようでした。
0327デフォルトの名無しさん2007/11/25(日) 23:22:45
gluPerspectiveを使うと座標が-1~1になります。
これを透視投影でglOrthoみたいに-10~10等にすることってできますか?
0328デフォルトの名無しさん2007/11/25(日) 23:25:32
単に拡大縮小すれば?
glScaled(0.1, 0.1, 1); とか
0329デフォルトの名無しさん2007/11/26(月) 08:14:58
まてまて、glOrtho使ってもスクリーン座標系は-1〜+1の範囲だろ
なんにせよ拡大縮小すればいいだろうけど
0330デフォルトの名無しさん2007/11/26(月) 12:10:00
glFrustum 使えばいいのでは。
そういう意味ではない?
0331デフォルトの名無しさん2007/11/26(月) 21:34:10
マウスを使って視点の移動(カメラを動かすみたいに)はどのように実装したらいいでしょうか?
マウスの方向とは逆向きになることは3Dソフトを使っていてなんとなくわかるのですが。
視点といえばgluLookAtですが、どう使ったらいいかいまいちわかりません。
解説しているサイトはありますか?
■ このスレッドは過去ログ倉庫に格納されています