##質問
点光源を移動したいのですが,どこを変更することで移動できるのですか?
いろいろ変更してみましたが,位置が全く変わらず積んでいます.
c
1#include <stdlib.h> 2#include <GL/glut.h> 3#include <GL/gl.h> 4#define SX 600 /*ウインドウの横サイズの初期値*/ 5#define SY 450 /*ウインドウの縦サイズの初期値*/ 6#define ESC 27 /* Escキーの文字コード */ 7 8void keyboard(unsigned char code, int x, int y) 9{ 10 if(code==ESC) exit(0); /* Escキー押下でプログラム終了 */ 11} 12 13void attribute(float kdr,float kdg,float kdb, float ksr,float ksg,float ksb, float phong) 14{ 15 float kd[4],ks[4],ka[4]; 16 17 kd[0]=kdr; kd[1]=kdg; kd[2]=kdb; kd[3]=1.0; /* kdの設定 */ 18 ks[0]=ksr; ks[1]=ksg; ks[2]=ksb; ks[3]=1.0; /* ksの設定 */ 19 ka[0]=kdr*0.2; ka[1]=kdg*0.2; ka[2]=kdb*0.2; ka[3]=1.0; /* kaの設定 */ 20 glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE, kd); /* 拡散反射係数 */ 21 glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR, ks); /* 鏡面反射係数 */ 22 glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT, ka); /* 環境光反射係数 */ 23 glMaterialf (GL_FRONT_AND_BACK,GL_SHININESS,phong); /* フォンのモデルの係数 */ 24} 25 26void display( void ) 27{ 28 float light[4] ={0.25, 0.25, 1.0, 1.0}; /* 点光源の指定 */ 29 float intensity[4]={1.0, 1.0, 1.0, 1.0}; /* 光源光の強さ */ 30 float amb[4] ={0.5, 0.5, 0.5, 1.0}; /* 環境光の強さ */ 31 32 glLightfv(GL_LIGHT0,GL_DIFFUSE, intensity); /* 0番の光源に拡散反射の強さを設定 */ 33 glLightfv(GL_LIGHT0,GL_SPECULAR,intensity); /* 0番の光源に鏡面反射の強さを設定 */ 34 glLightfv(GL_LIGHT0,GL_AMBIENT, amb); /* 0番の光源に環境光の強さを設定 */ 35 glLightfv(GL_LIGHT0,GL_POSITION, light); /* 0番の光源に平行光線を設定*/ 36 glEnable(GL_LIGHT0); /* 0番の光源を有効にする */ 37 glEnable(GL_LIGHTING); /* 陰影付けの有効化 */ 38 glEnable(GL_NORMALIZE);/* 法線ベクトルの正規化を有効にする */ 39 glClear( GL_COLOR_BUFFER_BIT);/* ウインドウの塗りつぶし */ 40 attribute(0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 64.0); /* 表面属性の指定 */ 41 glBegin(GL_POLYGON); /* ポリゴン定義開始 */ 42 glNormal3f( 0.0, 0.0, 1.0); /* ポリゴンの法線 */ 43 glVertex3f( 0.0, 0.5, 0.0); /*1番目の頂点座標の指定*/ 44 glVertex3f(-0.43, 0.25, 0.0); /*2番目の頂点座標の指定*/ 45 glVertex3f(-0.43, -0.25, 0.0); /*3番目の頂点座標の指定*/ 46 glVertex3f( 0.0, -0.5, 0.0); /*4番目の頂点座標の指定*/ 47 glVertex3f( 0.43, -0.25, 0.0); /*5番目の頂点座標の指定*/ 48 glVertex3f( 0.43, 0.25, 0.0); /*6番目の頂点座標の指定*/ 49 glEnd(); /* ポリゴン定義終了 */ 50 glDisable(GL_NORMALIZE);/* 法線ベクトルの正規化の無効化 */ 51 glDisable(GL_LIGHT0); /* 0番の光源を無効にする */ 52 glDisable(GL_LIGHTING); /* 陰影付けの無効化 */ 53 glFlush(); 54} 55 56void reshape(int sx, int sy) /*リシェープコールバック関数*/ 57{ 58 float aspect = (float)sx/(float)sy; /*アスペクト比*/ 59 60 glViewport(0,0,sx,sy); /*ビューポートの再設定*/ 61 glMatrixMode(GL_PROJECTION); /*投影法計算の準備*/ 62 glLoadIdentity(); /*投影法計算の初期設定*/ 63 glOrtho(-1.0*aspect, 1.0*aspect, -1.0, 1.0, -1.0, 1.0); /*平行投影の設定*/ 64 glMatrixMode(GL_MODELVIEW); /*計算モードを幾何変換に切り替え*/ 65} 66 67void main(int argc, char* argv[]) 68{ 69 glutInit(&argc,argv); /* ①glutの初期化 */ 70 glutInitWindowPosition(0,0); /* ①ウインドウの位置 */ 71 glutInitWindowSize(SX,SY); /* ①ウインドウサイズ */ 72 glutInitDisplayMode( GLUT_RGBA ); /* ①表示モード(色の表示)*/ 73 glutCreateWindow( argv[0] ); /* ①ウインドウの生成 */ 74 glClearColor (0.0,0.5,1.0,1.0 ); /* ①ウインドウの塗りつぶしの色 */ 75 glutReshapeFunc(reshape); /* リシェープコールバック関数の登録 */ 76 glutKeyboardFunc(keyboard); /* ②キーボード入力コールバック関数の登録 */ 77 glutDisplayFunc(display); /* ②ディスプレイコールバック関数の登録 */ 78 glutMainLoop(); /* ③ */ 79}
回答1件
あなたの回答
tips
プレビュー