実現したいこと
ベジェ曲面の制御点のコントロールで、正しい引数を指定したい。
発生している問題・分からないこと
GLfloat ControlPoints[4][4][3] を制御点として自分で与えましたが、後のコードは本のコードと同じにしています。書籍はITテキストコンピュータグラフィックス著者 魏 大名 先田和弘 R.Durikovic 向井信彦 C.Vilbrandt となっています。
(ITテキストという同じタイトルの本があるようなので。)
p.165の
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1,12, 4, &ControlPoints[0][0][0]);のパラメータが特にわからなくて教えてほしいです。
ControlPoints[4][4][3]がなかったので自分で書き、残りのコードのパラメータは本と一緒にしました。なので、ControlPointsとglMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1,12, 4, &ControlPoints[0][0][0]);のパラメータに行き違いがあるかもしれません。
glMapGrid2f(8, 0.0, 1.0,8, 0.0, 1.0);
glEvalMesh2(GL_LINE, 0, 8, 0, 8);はグリッドのようでしたがよくわかりません。。
該当のソースコード
copilotでコードの順番を整理してもらいました。
opengl
1#include <GL/glut.h> 2 3GLfloat ControlPoints[4][4][3] = { 4 5 {{0.0 , 0.0 , 0.0}, {0 , 1.0*50, 0}, {0, 2.0*50, 0}, {0.0 , 3.0*50, 0.0}}, 6 {{1.0*50 , 0, 0}, {1.0*50,1.0*50 ,0}, {1.0*50, 2.0*50 ,0}, {1.0*50,3.0*50,0}}, 7 {{2.0*50, 0,0}, {2.0*50,1.0*50,0}, {2.0*50, 2.0*50, 0}, {2.0*50, 3.0*50, 0}}, 8 {{3.0*50,0,0}, {3.0*50, 1.0*50, 0}, {3.0*50,2.0*50,0,}, {3.0*50, 3.0*50, 0}} 9}; 10 11 12//openglってz軸、奥方向が小さくて、手前にいくほどzの+が大きくなるんだっけ? 13gluLookAt( 14 150*2,150*2,150*2, // カメラの位置 (eyex, eyey, eyez) 15 0, 0, 50, // 注視点の位置 (centerx, centery, centerz) 16 0.0, 1.0, 0.0 // アップベクトル (upx, upy, upz) 17 ); 18 19//正しいと思われるものと差し替えました。間違えてるかもしれないので自分で考えてください。 20copilotに教えてもらったものに、合わせたつもりです。&ControlPoints[0][0][0]の読んでいく順番がわかりませんが、変形もしてないので自分で調整してください。 21i,j,k(x,y,z)はまもったつもりです。まちがえてる場所を教えてくれると嬉しいです。あと、底面にできなかった。 22 23 24void display() { 25 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 26 27 glMatrixMode(GL_PROJECTION); 28 glLoadIdentity(); 29 gluPerspective(45.0, 1.0, 1.0, 1000.0); 30 31 glMatrixMode(GL_MODELVIEW); 32 glLoadIdentity(); 33 gluLookAt(30.0, 30.0, 400.0, 34 30.0, 30.0, 0.0, 35 0.0, 1.0, 0.0); 36 37 glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1,12, 4, &ControlPoints[0][0][0]); 38 39 glEnable(GL_MAP2_VERTEX_3); 40 41 glEnable(GL_AUTO_NORMAL); 42 43 44 glMapGrid2f(8, 0.0, 1.0,8, 0.0, 1.0); 45 46glEvalMesh2(GL_LINE, 0, 8, 0, 8);//本ではここの位置ではありませんでしたが、ここの位置でも問題ありませんでした。 47 48 glFlush(); 49}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
コードを実行し、思いどおりに表示できましたが、パラメータが正しく指定し、1回の入力で済ませたい。結果、パラメータをうまく入力できていない。 また、自分で入力したControlPoints[4][4][3]を切りのいい値にすればよかったと思いました。
補足
opengl
1本にサンプルはないといいましたがp166にサンプルコードがありました。GLfloat ControlPoints[4][4][3] = { 2 {{0.0 , 0.0 , 150.0}, {50 , 50, 150}, {100, 50, 150}, {150.0 ,0, 150.0}},{{0.0 , 50, 100}, {50,70 ,100}, 3 {100, 70 ,100}, {150,50,100}}, 4 {{0.0, 50,50}, {50,70,50}, {100, 70, 50}, {150, 50,50}}, 5 {{0,0,0}, {50, 50, 0}, {100,50,0,}, {150,0, 0}} 6}; 7x軸に、0 50 100 150 でz軸は150 100 50 0 でy軸は何かの合成なのかな。わからないでした。解説したい方がいましたら、お願いします。
あなたの回答
tips
プレビュー