void auxInitDisplayMode( AUX_DOUBLE | // 雙緩存方式 AUX_RGBA // RGBA顏色模式 ); |
void glLightfv( Glenum light, // 光源號 Glenum pname, // 指明光源類型: // GL_DIFFUSE 光源為漫射光光源 // GL_AMBIENT 光源為環境光光源 // GL_SPECULAR 光源為鏡面光光源 const Glfloat* params // 指向顏色向量的指針 ); |
void glLightModelfv( GL_LIGHT_MODEL_ AMBIENT, const Glfloat* param // param:指向顏色向量的指針 ); |
void glEnable(GL_LIGHTING); void glEnable(GL_enum cap); // cap:指明光源號 |
void glMaterialfv( GLenum face, // 指明在設置材質的哪個表面的顏色。 // 可以是GL_FRONT、GL_BACK、GL_FRONT_AND_BACK GLenum pname, // 與光源的pname參數相似 const float* params // 指向材質的顏色向量 ); |
void glOrtho( GLdouble left, GLdouble right, // (left,bottom,near)及(right,top,far)分別給出正射投 GLdouble bottom, GLdouble top, // 影投影范圍的左下角和右上角的坐標。 GLdouble near,GLdouble far); |
// (x,y)給出窗口左上角坐標 // width及heigh給出窗口的寬高 void auxInitPosition(GLint x,GLint y,GLsizei width, GLsizei heigh); |
// STR表示窗口標題字串 void auxInitWindow(GLbyte* STR); |
// 當窗口改變形狀時調指定的回調函數 // NAME表示回調函數名稱 void auxReshapeFunc(NAME); |
// 當系統空閑時調用指定的回調函數 // NAME表示回調函數名稱 void auxIdleFunc(NAME); |
// 當窗口需要更新或場景變化時調用 // NAME表示回調函數名稱 void auxMainLoop(NAME); |
#include "windows.h" #include "gl/gl.h" #include "gl/glaux.h" #include "gl/glu.h" #include "math.h" void myinit() { glClearColor(1,1,0,0); GLfloat ambient[]={.5,.5,.5,0}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); GLfloat mat_ambient[]={.8,.8,.8,1.0}; GLfloat mat_diffuse[]={.8,.0,.8,1.0}; GLfloat mat_specular[]={1.0,.0,1.0,1.0}; GLfloat mat_shininess[]={50.0}; GLfloat light_diffuse[]={0,0,.5,1}; GLfloat light_position[]={0,0,1.0,0}; glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,mat_ambient); glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,mat_diffuse); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); glMaterialfv(GL_FRONT_AND_BACK,GL_SHININESS,mat_shininess); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0,GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); } void CALLBACK display() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); auxSolidSphere(1.0); // 繪制半徑為1.0的實體球 glFlush(); // 強制輸出圖像 auxSwapBuffers(); // 交換繪圖緩存 Sleep(100); } void CALLBACK Idledisplay() { // x,y滿足x2+y2=0.01。這樣可以使物體沿該圓軌跡運動。 static float x=-.1,y=0.0; static BOOL mark=TRUE; static float step=.01; x+=step; if(x<=.1&&x>=-.1) { if(step>0) y=sqrt(.01-x*x); else y=-sqrt(.01-x*x); glTranslatef(x,y,0); } else { step=0-step; } display(); } void CALLBACK myReshape(GLsizei w,GLsizei h) { glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w<=h) glOrtho(-3.5,3.5,-3.5*(GLfloat)w/(GLfloat)h, 3.5*(GLfloat)w/(GLfloat)h,-10,10); else glOrtho(-3.5*(GLfloat)w/(GLfloat)h,3.5* (GLfloat)w/(GLfloat)h,-3.5,3.5,-10,10); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void main() { auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA); auxInitPosition(0,0,400,400); auxInitWindow(" circle "); myinit(); auxReshapeFunc(myReshape); auxIdleFunc(Idledisplay); auxMainLoop(display); } |
原文轉自:http://www.anti-gravitydesign.com