2020年3月31日 星期二

丹丹ㄉ打光 酷喔(居家隔離中~~)

大家好 我丹
今天給你看的是這個複習的東東
打光!!
先造上禮拜的去下載window data gull32啥的
之後打開light meterial
就可以囉
教你看怎麼弄光對材質的影響 很酷
再來我們就要來弄個茶壺的打光了
你會覺得 WTF 用程式碼就可以打光
沒錯 94那麼屌 ㄏ
超帥的吧
給你程式碼 你也可以弄
#include <GL/glut.h>
///打光0:宣告陣列,裡⾯有光的屬性值
const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
void display()///茶壺程式碼
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
///打光需要的3D depth test
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
///打光1:開啟光線
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
///打光2:設定light的設定值
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
///打光2.2:要把物體也設定好她的material
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
glutMainLoop();
return EXIT_SUCCESS;
}
------------------------
 看到這邊 喜歡的記得留個言~~
 我會很開心

對了
使用motion 就可以讓光隨著你的滑鼠移動ㄛ

void motion(int x,int y)///讓光源移動用motion函式
{
 GLfloat light_position[]={2.0f,5.0f,-5.0f,0.0f};///陣列,放位置
 light_position[0]=(x-150)/150.0*10;///用motion的x座標,算光的位置
 light_position[1]=-(y-150)/150.0*10;
 glLightfv(GL_LIGHT0, GL_POSITION,light_position);///用函示把光設定好
 glutPostRedisplay();///貼個post請GLUT重畫畫面
}
int main(int argc, char *argv[])
{
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
 glutCreateWindow("GLUT Shapes");
 glutDisplayFunc(display);
 glutMotionFunc(motion);///記得擺放motion函式

1 則留言: