2022年3月29日 星期二

OuO圖學筆記Week06

 進入老師的網站https://jsyeh.org/3dcg10-->下載Win32、data-->解壓縮

data到windows


主題:Light Material.exe

左上圖按右鍵改模型,左下圖按右鍵改材質

右邊程式碼glLightfv


有陣列宣告、有函式宣告



光的性質(位置,Ambient, Diffuse, Specular),   GL_POSITION可以設定光的位置(如下圖)




#include <GL/glut.h>

#include <stdio.h>

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 };

float x=150, y=150, z=0, scale=1.0;

int oldX=0, oldY=0;


void display()

{

    glClearColor( 0.5, 0.5, 0.5, 1 );///R,G,B,A 其中A半透明功能,目前沒開

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份矩陣

        glTranslatef( (x-150)/150.0 , -(y-150)/150.0 ,z);

        glScalef(scale, scale, scale);///都縮放成 scale倍

        glColor3f(1,1,0);///黃色的

        glutSolidTeapot( 0.3 );///茶壼

    glPopMatrix();///還原矩陣

    glutSwapBuffers();

}

void keyboard( unsigned char key, int mouseX, int mouseY )

{


}

void mouse(int button, int state, int mouseX, int mouseY )

{

    oldX = mouseX; oldY = mouseY;

}


void motion(int mouseX, int mouseY)

{

    if( mouseX-oldX > 0 ) scale *= 1.01;

    if( mouseX-oldX < 0 ) scale *= 0.99;

    ///x += (mouseX-oldX);  y += (mouseY-oldY);

    oldX = mouseX;       oldY = mouseY;

    display();

}


int main(int argc, char**argv)

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week05 keyboard");

    glutDisplayFunc(display);

    glutKeyboardFunc(keyboard);

    glutMouseFunc(mouse);

    glutMotionFunc(motion);

    glDepthFunc(GL_LESS);

    glEnable(GL_LIGHT0);

    glEnable(GL_NORMALIZE);

    glEnable(GL_COLOR_MATERIAL);

    glEnable(GL_LIGHTING);


    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);



    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();


}


沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

一.     一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam,                 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...