最終更新: mikk_ni3_92 2009年10月29日(木) 15:55:49履歴
現在地 >> メニュー >> 発展編02 >> 発展編02::フィードバックモード >> 発展編02::まとめコード2_1
#include <iostream> #include <gl/glut.h> //-------- 各種外部変数 ---------// float feedBuffer[1024]; //--------- 各種プロトタイプ宣言 ------------// void display(); void reshape(int w , int h); void DRAW_XYZ(); void outPutFeedBuffer(int size,float *Buffer); //------------ OpenGLの初期設定 ----------------// void GLUT_CALL_FUNCs() { glutDisplayFunc(display); glutReshapeFunc(reshape); } void myOtherInit() { glClearColor(1,1,1,1); } void GLUT_INITs(int *argcp,char **argv) { glutInit(argcp,argv); glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE | GLUT_DEPTH); //ダブルバッファ、Zバッファ glutInitWindowSize(640,480); glutCreateWindow("FeedBack Buffer"); GLUT_CALL_FUNCs(); myOtherInit(); } //---------- メイン関数 --------------// int main(int argc, char *argv[]) { GLUT_INITs(&argc,argv); glutMainLoop(); return 0; } //---------- 各種コールバック ----------------// void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //表示用に描画 glPointSize(2); glColor3f(1,0.5,0.4); glBegin(GL_POINTS); glVertex3f(1,1,1); glEnd(); glPointSize(1); int size; glFeedbackBuffer (1024, GL_3D_COLOR, feedBuffer); glRenderMode (GL_FEEDBACK); glPointSize(2); glColor3f(0.2,0.5,0.4); glBegin(GL_POINTS); glVertex3f(1,1,1); glEnd(); glPointSize(1); size = glRenderMode (GL_RENDER); std::cout <<"size is "<< size << '\n'; if( feedBuffer[0] == GL_POINT_TOKEN) { std::cout << "GL_POINT_TOKEN\n"; } std::cout <<"x:"<< feedBuffer[1] << '\n'; std::cout <<"y:"<< feedBuffer[2] << '\n'; std::cout <<"z:"<< feedBuffer[3] << '\n'; std::cout <<"R:"<< feedBuffer[4] << '\n'; std::cout <<"G:"<< feedBuffer[5] << '\n'; std::cout <<"B:"<< feedBuffer[6] << '\n'; std::cout <<"A:"<< feedBuffer[7] << '\n'; DRAW_XYZ(); glutSwapBuffers(); memset(feedBuffer,0,sizeof(float)*1024 ); } void reshape(int w , int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } //------------- 各種関数 --------------// void DRAW_XYZ() { glBegin(GL_LINES); glColor3f(0,1,0);//x glVertex2f(-100,0); glVertex2f(100, 0); glColor3f(1,0,0);//y glVertex2f(0,0); glVertex2f(0,100); glColor3f(0,0,1);//z glVertex3f(0,0,-100); glVertex3f(0,0, 100); glEnd(); }