期中考
1. glPushMatrix(); //備份矩陣
2. glTranslatef( x, y, z);//移動
3. glRotatef(角度, x, y, z);//轉動
4. glScalef(x, y, z);//縮放
5. glBegin(GL_POLYGON); //開始畫(多邊形)
6. glColor3f(r,g,b); //色彩
7. glNormal3f(nx, ny, nz);//打光的法向量
8. glTexCoord2f(tx, ty);//貼圖座標
9. glVertex3f(x,y,z);//頂點
10. glEnd();//結束畫
11. glPopMatrix(); //還原矩陣
認識3D模型
去 https://jsyeh.org/3dcg10/
下載date.zip、windows.zip、source.zip-->解壓縮至此
3D模型對應OBJ檔,會再引用mtl檔對應材質
obj檔裡 v對應vertex頂點、vt對應 vertex texture 貼圖座標、vn vertex normal
GLUT專案
茶壺的程式碼(基礎10行)
#include <GL/glut.h>
void display()
{
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);
glutMainLoop();
}
把source裡的glm.h和glm.c放進桌面上的week10_glm專案資料夾裡
將glm.c改成glm.cpp
在week10_glm 右鍵add file
glm.cpp加進專案
week10_glm
#include <GL/glut.h>
#include "glm.h"
GLMmodel*pmodel=NULL;///有一個模型的指標,先是空的
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if(pmodel==NULL){
pmodel = glmReadOBJ("al.obj");
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}
glmDraw(pmodel,GLM_MATERIAL);///從source-transformation.c裡複製
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
glutDisplayFunc(display);
glutMainLoop();
}
step1: 開啟settings--compiler
week10_glm_Gondam
#include <GL/glut.h>
#include "glm.h"
GLMmodel*pmodel=NULL;///有一個模型的指標,先是空的
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if(pmodel==NULL){
pmodel = glmReadOBJ("gundam.obj");
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
}
glmDraw(pmodel,GLM_MATERIAL);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
glutDisplayFunc(display);
glutMainLoop();
}
#include<opencv/highgui.h>
#include <opencv/cv.h>
#include <GL/glut.h>
GLMmodel*pmodel=NULL;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if(pmodel==NULL){
pmodel = glmReadOBJ("Gundam.obj");
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90);
}
glmDraw(pmodel,GLM_MATERIAL);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
myTexture("Diffuse.jpg");
glutDisplayFunc(display);
glutMainLoop();
}





沒有留言:
張貼留言