- Week06 期中考題目 https://jsyeh.org/gl/opengl_10_func.html
- #week06-0_sample
- 1.安裝freeglut,把lib\libfreeglut.a複製成libglut32.a
- 2.File-New-Project, GLUT專案
- 3.Ctrl-F 找程式碼 light "cpp
- glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS);
- glEnable(GL_LIGHTO); glEnable(GL_NORMALIZE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING);
- glLightfv(GL_LIGHTO, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHTO, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHTO, GL_SPECULAR, light_specular); glLightfv(GL_LIGHTO, 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);
- glEnable(GL_DEPTH_TEST);
- 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);
- 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 };
- Week06-1_lighting 新的glut專案
桌面安裝freeglut把lib的libfreeglut.a複製改名成libglut32.a
File-NewProject,GLUT專案week04_mouse__glScalef
貼上11行程式碼 - #include <GL/glut.h>
- 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_DOUBLE|GLUT_DEPTH);
- glutCreateWindow("week04 mouse glScalef");
- glutDisplayFunc(display);
- glutMainLoop();
- }
- 程式碼改成
- #include <GL/glut.h>
- void display()
- {
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
- glutSolidTeapot(0.3);
- glutSwapBuffers();
- }
- 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 };
- int main(int argc,char*argv[])
- {
- glutInit(&argc,argv);
- glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
- glutCreateWindow("week06 lighting");
- glutDisplayFunc(display);
- glEnable(GL_DEPTH_TEST);
- 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();
- }
- 改第11行程式碼const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
從昏暗茶壺變亮 - 改第10行程式碼const GLfloat light_diffuse[] = { 1.0f, 1.0f, 0.0f, 1.0f };
- https://jsyeh.org/3dcg10/點開下載source和window.zip和data,zip
解壓縮後把data資料夾放進window夾裡面 - 打開檔案Light Material 左上右鍵可以換物品 左下右鍵可以換材質
- Week06-2_lighting_glNormal3f 新的glut專案#include <GL/glut.h>
- float angle=0;
- void display()
- {
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
- glPushMatrix();
- glRotatef(angle++,0,1,0);
- glBegin(GL_POLYGON);
- glNormal3f(0,0,1);
- glVertex2f(-1,-1);
- glVertex2f(+1,-1);
- glVertex2f(+1,+1);
- glVertex2f(-1,+1);
- glEnd();
- glutSolidTeapot(0.3);
- glPopMatrix();
- glutSwapBuffers();
- }
- const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
- const GLfloat light_diffuse[] = { 1.0f, 1.0f, 0.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 };
- int main(int argc,char*argv[])
- {
- glutInit(&argc,argv);
- glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
- glutCreateWindow("week06 lighting");
- glutDisplayFunc(display);
- glutIdleFunc(display);
- glEnable(GL_DEPTH_TEST);
- 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();
- } 旋轉的茶壺
- week06-3_glm_obj_model 貼11行程式碼
source裡有3個程式檔:transformation.c glm.h glm.c解壓縮
要將專案做設定
把glm.h放到桌面week06-3_glm_obj_model的目錄裡
把glm.c放到桌面week06-3_glm_obj_model的目錄裡,改檔名glm.cpp
在專案裡按右鍵 Add Files,加入glm.cpp
然後再更改程式碼#include <GL/glut.h>
#include "glm.h"
GLMmodel* pmodel=NULL;
void
drawmodel (void)
{
if (!pmodel) {
pmodel = glmReadOBJ ("data/Al.obj");
if (!pmodel) exit(0);
glmUnitize (pmodel);
glmFacetNormals (pmodel);
glmVertexNormals (pmodel, 90.0);
}
glmDraw (pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
drawmodel();
glutSwapBuffers();
}int main(int argc,char*argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week06 lighting");
glutDisplayFunc(display);glutMainLoop();} - week06-4_glm_obj_model_light_again
.png)
沒有留言:
張貼留言