日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opengl光照效果的三棱锥+键盘上下左右控制旋转(学习笔记-仅供参考)

發布時間:2024/3/12 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opengl光照效果的三棱锥+键盘上下左右控制旋转(学习笔记-仅供参考) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <windows.h> #include <gl/gl.h> #include <gl/glut.h> #include<stdio.h> // 旋轉參數 static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f;//顏色跟蹤模式 BOOL bColorMaterial = FALSE;//初始化窗口 void SetupRC(void) {// 窗口顏色黑色glClearColor(0.0f, 0.0f, 0.0f, 1.0f);glShadeModel(GL_FLAT); }void ChangeSize(int w, int h) {if (h == 0) h = 1;glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w <= h)glOrtho(-100.0f, 100.0f, -100.0f * h / w, 100.0f * h / w, -100.0f, 100.0f);elseglOrtho(-100.0f * w / h, 100.0f * w / h, -100.0f, 100.0f, -100.0f, 100.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity(); }// 窗口內繪圖 void RenderScene(void) {GLfloat ambient[] = { 0.8f, 0.8f, 0.8f, 1.0f }; //環境光RGBAGLfloat material_ambient[] = { 0.75f, 0.0f, 0.0f, 1.0f };glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glEnable(GL_DEPTH_TEST);//1.設置光照glEnable(GL_LIGHTING); //啟動光照//glDisable(GL_LIGHTING);//關閉光照//2.設置全局環境光glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);/*GL_LIGHT_MODEL_AMBIENT:指定該參數后,其參數值包含四個整數或浮點數,這些參數值指定了場景中RGBA值。參數值在(-1.0,1.0)之間。默認參數值為(0.2,0.2,0.2,1.0),光線相當暗淡。GL_LIGHT_MODEL_LOCAL_VIEWER:其參數值包含一個整數或浮點數,指定了鏡面反射角度。默認是為0,表示視線方向與z軸負方向平行。否則表示坐標原點到Z軸負方向的鏡面反射角度。GL_LIGHT_MODEL_TWO_SIDE:其參數值包含一個整數或浮點數,表示對多邊形進行單面還是雙面的光照計算。默認值為0,表示單面光照計算,并使用front材質參數,否則為雙面光照,使用back材質參數。例如:glLightModeli(LIGHT_MODEL_TWO_SIDE,GL_TRUE);啟動雙面光照。如果將GL_TRUE改為GL_FALSE關閉雙面光照。*///3.設置材質屬性if (bColorMaterial){glEnable(GL_COLOR_MATERIAL); //啟動顏色跟蹤//指定多邊形正面使用顏色跟蹤glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);/*void glColorMaterial(GLenum face, GLenum mode);參數face: 同glMaterial*函數的face參數參數mode: 同glMaterial*函數的pname參數*/}else{glDisable(GL_COLOR_MATERIAL); //關閉顏色跟蹤//指定多邊形正面的環境反射和漫反射值glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, material_ambient);/*void glMaterial{f,i,fv,iv}(GLenum face, GLenum pname, GLfloat param/*param);參數face:指定需要更改材質的表面,值為以下三個取值其中之一。GL_FRONT, GL_BACK, GL_FRONT_AND_BACK參數pname:指定需要更改的表面的材質參數,取值有:GL_AMBIENT: 環境光的RGBA值,參數值在(-1.0, 1.0)之間。默認值為(0.2, 0.2, 0.2, 1.0)。GL_DIFFUSE: 漫反射光的RGBA值,參數值在(-1.0, 1.0)之間,默認值為(0.8, 0.8, 0.8, 1.0)。GL_SPECULAR: 鏡面光的RGBA值,參數值在(-1.0, 1.0)之間,默認值為(0.0, 0.0, 0.0, 1.0)。GL_AMBIENT_AND_DIFFUSE: 同時設置GL_AMBIENT和GL_DIFFUSE屬性,相當于分別使用這兩個參數調用兩次該函數。通常,GL_AMBIENT和GL_DIFFUSE取相同的值,可以達到比較真實的效果。GL_SHININESS: 該屬性稱為“鏡面指數”,取值范圍是0到128,該值說明如何確定鏡面光亮斑的大小和聚光程度。該值越小,表示材質越粗糙,點光源發射的光線照射到上面,產生較大的亮點;該值越大,表示材質越光滑,點光源照射到上面后,產生較小的亮點。GL_EMISSION: 散射光照(輻射光)的RGBA值,該材質本身微微地向外發射光線,以至于眼睛可以感覺到有這樣的顏色,但光線又比較弱,不會影響到其他物體的顏色。參數值在(-1.0, 1.0)之間,默認值為(0.0, 0.0, 0.0, 1.0)。*/}//4. 定義光源,它是一種白色的光源 GLfloat sun_light_position[] = { 0.0f, 0.0f, 0.0f, 1.0f };GLfloat sun_light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };GLfloat sun_light_diffuse[] = { 0.0f, 0.0f, 0.0f, 1.0f };GLfloat sun_light_specular[] = { 0.0f, 0.0f, 0.0f, 1.0f };glLightfv(GL_LIGHT0, GL_POSITION, sun_light_position);glLightfv(GL_LIGHT0, GL_AMBIENT, sun_light_ambient);glLightfv(GL_LIGHT0, GL_DIFFUSE, sun_light_diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, sun_light_specular);/*void glLight{f,i,fv,iv}(GLenum light, GLenum pname, GLfloat param/*param);參數light: 指定光源,OpenGL支持至少8種光照,值為GL_LIGHT0, GL_LIGHT1,......,GL_LIGHT7。參數pname: 指定對光源設置何種屬性,取值如下:GL_AMBIENT: 設置環境光分量強度,默認值為(0.0,0.0,0.0,1.0)。GL_DIFFUSE: 設置漫反射光分量強度,默認值為(1.0,1.0,1.0,1.0)。GL_SPECULAR: 設置折射光分量強度,默認值為(1.0,1.0,1.0,1.0)。GL_POSITION: 設置光源位置,默認值為(0.0,0.0,0.0,0.0)。值由4個分量組成(x,y,z,w),若第4個分量w取值為0,表示該光源位于無限遠處,前3個值表示它所在的方向,此時,光源稱為方向光源,發出平行光;若第4個分量w取值為1,表示指定的是離場景較近的光源,前3個值指定了光源的位置,這種光稱為定位光源;若第4個分量w取非零值,但不為1,則光源的位置為(x/w,y/w,z/w)。GL_SPOT_DIRECTION: 用于設置聚光燈(聚光燈只能作為定位光源),設置聚光燈光錐軸線的方向,默認值為(0.0,0.0,-1.0),即光線指向z軸負向。GL_SPOT_EXPONENT: 用于設置聚光燈,設置聚光程度。默認值為0,表示光照范圍內向各方向發射的光線強度相同;為正數時,表示光照向中央集中,正對發射方向的位置受到更多光照,其它位置受到較少光照,數值越大,聚光效果就越明顯。GL_SPOT_CUTOFF: 用于設置聚光燈,設置聚光燈的最大散布角度,即頂角值的一半,默認值為180,即沿所有方向發射光線,還有一種默認值的取法為(0.0,90.0)。GL_CONSTANT_ATTENUATION: 設置光的常數衰減因子,默認值為1.0。GL_LINER_ATTENUATION: 設置光的線性衰減因子,默認值為0.0。GL_QUADRATIC_ATTENUATION: 設置光的二次衰減因子,默認值為0.0。參數param或*param: 指定pname的設置值或指針*/glEnable(GL_LIGHT0);//啟用光源// 旋轉圖形glPushMatrix();glRotatef(xRot, 1.0f, 0.0f, 0.0f);glRotatef(yRot, 0.0f, 1.0f, 0.0f);glFrontFace(GL_CW);//繪制三菱錐glBegin(GL_TRIANGLE_FAN);glVertex3f(0.0, 0.0, 80.0);glVertex3f(0.0, 50.0, 0.0);glColor3f(1.0, 0.0, 0.0);//紅色glVertex3f(50.0, -50.0, 0.0);glColor3f(0.0, 1.0, 0.0);//綠色glVertex3f(-50.0, -50.0, 0.0);glColor3f(0.0, 0.0, 1.0);//藍色glVertex3f(0.0, 50.0, 0.0);glEnd();glBegin(GL_TRIANGLE_FAN);glVertex3f(0.0, 50.0, 0.0);glVertex3f(50.0, -50.0, 0.0);glColor3f(1.0, 1.0, 0.0);//黃色glVertex3f(-50.0, -50.0, 0.0);glEnd();glPopMatrix();glutSwapBuffers(); } void SpecialKeys(int key, int x, int y) {if (key == GLUT_KEY_UP) xRot -= 5.0f;if (key == GLUT_KEY_DOWN) xRot += 5.0f;if (key == GLUT_KEY_LEFT) yRot -= 5.0f;if (key == GLUT_KEY_RIGHT) yRot += 5.0f;if (xRot > 356.0f) xRot = 0.0f;if (xRot < -1.0f) xRot = 355.0f;if (yRot > 356.0f) yRot = 0.0f;if (yRot < -1.0f) yRot = 355.0f;// 刷新窗口glutPostRedisplay(); } void ProcessMenu(int value) {switch (value){case 1:printf("普通材質");bColorMaterial = FALSE;break;case 2:printf("顏色跟蹤材質");bColorMaterial = TRUE;break;default:break;}glutPostRedisplay(); } int main(int argc, char* argv[]) {glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutCreateWindow("加光照的三菱錐圖形");glutReshapeFunc(ChangeSize);glutSpecialFunc(SpecialKeys);//對鍵盤上特殊的4個方向按鍵的響應函數glutDisplayFunc(RenderScene);// 創建右鍵菜單glutCreateMenu(ProcessMenu);glutAddMenuEntry("普通材質", 1);glutAddMenuEntry("顏色跟蹤材質", 2);glutAttachMenu(GLUT_RIGHT_BUTTON);SetupRC();glutMainLoop();return 0; }

總結

以上是生活随笔為你收集整理的opengl光照效果的三棱锥+键盘上下左右控制旋转(学习笔记-仅供参考)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品香蕉 | 黄色www视频| 精品一区二区视频在线观看 | 黄色网页在线免费观看 | 红桃视频国产精品 | 好妞色妞国产在线视频 | 国产精品天天狠天天看 | 国产人成在线 | 麻豆自拍偷拍 | 靠逼视频网站 | 夜夜av | www.日本在线观看 | 色福利hd写真video | 九九爱精品 | 香蕉视频污视频 | 三级黄色片免费 | 天堂资源网 | 手机在线视频一区 | 国产又粗又猛又爽又黄91精品 | 久久综合操 | 四虎新网站 | 久久77777 | 婷婷777 | av中文资源| 97国产精品视频人人做人人爱 | 日韩 国产 一区 | 精品久久毛片 | 91麻豆精品视频 | 成年人免费网址 | 日本精品在线观看视频 | 深爱五月激情网 | 精品久久久999 | 成人欧美在线视频 | 丝袜av网站| 懂色一区二区三区免费观看 | 亚洲精视频 | 日本成人一区 | 精品国产一区二区三区久久狼黑人 | 亚洲精品国产精品国自产网站按摩 | 伊人网久久久 | 亚洲乱码国产乱码精品精的特点 | 免费观看黄色小视频 | 国产精品99一区二区三区 | 国产乱来 | 在线免费观看国产视频 | 爱爱爱爱网 | 国产伦精品一区二区三区四区 | 69av导航| 麻豆日产六区 | 欧美一区二区三区在线观看视频 | 精品一区二区三区在线观看视频 | av观看一区 | 国产一二在线观看 | 澳门色网 | 少妇又紧又色又爽又刺激 | 香蕉av网站 | 亚洲制服在线观看 | 97伊人超碰| av成人在线电影 | 欧美福利一区二区三区 | 一区二区伊人 | 91在线免费播放 | 欧美freesex黑人又粗又大 | 成人尹人 | 男人把女人捅爽 | 欧美一及片 | 国产毛片久久 | 国产精品亚洲视频 | 成年人小视频在线观看 | 成人av一区二区在线观看 | 国产乱子一区二区 | 亚洲永久视频 | av无毛 | 在线观看av大片 | 久久久www免费人成人片 | 国产精品jizz在线观看美国 | 亚洲视频大全 | 男人的天堂网av | 丁香婷婷深情五月亚洲 | 国产精品久久久久久久天堂 | www.爱操| 国产在线观看免费网站 | 日韩欧美国产成人 | 91视频免费在线观看 | 老色鬼在线 | 色婷婷久久综合中文久久蜜桃av | 91国偷自产中文字幕久久 | 午夜福利视频合集1000 | 老司机性视频 | 又黄又爽又色视频 | 伊人一区二区三区四区 | 国内一级黄色片 | 日本美女视频 | 999色综合| 欧美日韩久久精品 | 99精品国产一区二区 | 国精品无码一区二区三区 | 亚洲色图校园春色 | 国产精品8888 |