顯示具有 06160973_廖柏瑜 標籤的文章。 顯示所有文章
顯示具有 06160973_廖柏瑜 標籤的文章。 顯示所有文章

2019年6月6日 星期四

電腦圖學複習

複習:貼圖
#include <GL/glut.h>
#include <opencv/highgui.h> ///OpenCV High GUI讀圖
///程式碼是對的, 但是沒有設定好include, lib, bin
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
GLuint id;
void myInit()
{
    glEnable(GL_TEXTURE_2D);
    IplImage * img = cvLoadImage("marvel.jpg");
    glGenTextures(1, &id );
    glBindTexture(GL_TEXTURE_2D, id);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
}
int main(int argc, char **argv)
{
    ///IplImage * img = cvLoadImage("marvel.jpg");
    ///cvShowImage("opencv", img);
    ///cvWaitKey(0);///等你按按鍵
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("GLUT");///之後
    ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖)
    myInit();///我們的貼圖在這裡

    glutDisplayFunc(display);

    glutMainLoop();///之前
}
#include <GL/glut.h>
#include <opencv/highgui.h> ///OpenCV High GUI讀圖
#include <opencv/cv.h> ///OpenCV cvCvtColor() to convert color
///程式碼是對的, 但是沒有設定好include, lib, bin
GLuint id1, id2, id3;///NOW2
float a=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBindTexture(GL_TEXTURE_2D, id1);///id1 for background
    glBegin(GL_POLYGON);
        glTexCoord2f(0, 0); glVertex3f(-1, +1, 0);
        glTexCoord2f(0, 1); glVertex3f(-1, -1, 0);
        glTexCoord2f(1, 1); glVertex3f(+1, -1, 0);
        glTexCoord2f(1, 0); glVertex3f(+1, +1, 0);
    glEnd();
    glBindTexture(GL_TEXTURE_2D, id3);///id3 for rotating square
    glPushMatrix();
        glTranslatef(0.5, 0.5, 0);
        glRotatef(a++, 0, 0, 1);
        glScalef(0.3, 0.3, 0.3);
        glBegin(GL_POLYGON);
            glTexCoord2f(0, 0); glVertex3f(-1, +1, 0);
            glTexCoord2f(0, 1); glVertex3f(-1, -1, 0);
            glTexCoord2f(1, 1); glVertex3f(+1, -1, 0);
            glTexCoord2f(1, 0); glVertex3f(+1, +1, 0);
        glEnd();
    glPopMatrix();

    glBindTexture(GL_TEXTURE_2D, id2);///id2 for teapot
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
///void myInit()
GLuint myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename); ///NOW OpenCV
    cvCvtColor(img, img, CV_BGR2RGB);///convert color ///NOW OpenCV

    GLuint id;
    glEnable(GL_TEXTURE_2D);
    glGenTextures(1, &id );
    glBindTexture(GL_TEXTURE_2D, id);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
    return id;
}
int main(int argc, char **argv)
{
    ///IplImage * img = cvLoadImage("marvel.jpg");
    ///cvShowImage("opencv", img);
    ///cvWaitKey(0);///等你按按鍵
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("GLUT");///之後
    ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖)
    id1 = myTexture("marvel.jpg"); ///myInit();///我們的貼圖在這裡
    id2 = myTexture("teapot.jpg");
    id3 = myTexture("square.jpg");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    glutMainLoop();///之前
}
複習:打光
#include <GL/glut.h>
#include <opencv/highgui.h> ///OpenCV High GUI讀圖 ///貼圖需要它
#include <opencv/cv.h> ///OpenCV cvCvtColor() to convert color///貼圖需要它
///程式碼是對的, 但是沒有設定好include, lib, bin
GLuint id1, id2, id3;///NOW2 ///貼圖需要它
float a=0;

#include "glm.h"///呼叫外掛 ///glm需要它
GLMmodel * pmodel=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel2=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel3=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel4=NULL;///準備指標 ///glm需要它

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, id1);///id1 for background ///貼圖需要它
    glBegin(GL_POLYGON); ///貼圖需要它
        glTexCoord2f(0, 0); glVertex3f(-1, +1, 0); ///貼圖需要它
        glTexCoord2f(0, 1); glVertex3f(-1, -1, 0); ///貼圖需要它
        glTexCoord2f(1, 1); glVertex3f(+1, -1, 0); ///貼圖需要它
        glTexCoord2f(1, 0); glVertex3f(+1, +1, 0); ///貼圖需要它
    glEnd();///貼圖需要它

    if (!pmodel) { ///glm需要它
        pmodel = glmReadOBJ("body.obj"); ///glm需要它
        if (!pmodel) exit(0); ///glm需要它
        glmUnitize(pmodel); ///glm需要它
        glmFacetNormals(pmodel); ///glm需要它
        glmVertexNormals(pmodel, 90.0); ///glm需要它
    }

    glDisable(GL_TEXTURE_2D);
    glPushMatrix();
        glRotatef(a++, 0,1,0);
        glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
    glPopMatrix();

    glutSwapBuffers();
}
///void myInit()
GLuint myTexture(char * filename) ///貼圖需要它
{
    IplImage * img = cvLoadImage(filename); ///NOW OpenCV ///貼圖需要它
    cvCvtColor(img, img, CV_BGR2RGB);///convert color ///NOW OpenCV ///貼圖需要它

    GLuint id; ///貼圖需要它
    glEnable(GL_TEXTURE_2D); ///貼圖需要它
    glGenTextures(1, &id ); ///貼圖需要它
    glBindTexture(GL_TEXTURE_2D, id); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); ///貼圖需要它
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData); ///貼圖需要它
    return id;///貼圖需要它
}
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f }; ///glm需要它
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f }; ///glm需要它
int main(int argc, char **argv)
{
    ///IplImage * img = cvLoadImage("marvel.jpg");
    ///cvShowImage("opencv", img);
    ///cvWaitKey(0);///等你按按鍵
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("GLUT");///之後
    ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖)
    id1 = myTexture("marvel.jpg"); ///myInit();///我們的貼圖在這裡 ///貼圖需要它
    id2 = myTexture("teapot.jpg");
    id3 = myTexture("square.jpg");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    glEnable(GL_DEPTH_TEST);    ///glm需要它

    glEnable(GL_LIGHT0);  ///glm需要它
    glEnable(GL_NORMALIZE); ///glm需要它
    glEnable(GL_COLOR_MATERIAL); ///glm需要它
    glEnable(GL_LIGHTING); ///glm需要它

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient); ///glm需要它
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse); ///glm需要它
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); ///glm需要它
    glLightfv(GL_LIGHT0, GL_POSITION, light_position); ///glm需要它


    glutMainLoop();///之前
}
複習:模型
#include <GL/glut.h>
#include <opencv/highgui.h> ///OpenCV High GUI讀圖 ///貼圖需要它
#include <opencv/cv.h> ///OpenCV cvCvtColor() to convert color///貼圖需要它
///程式碼是對的, 但是沒有設定好include, lib, bin
GLuint id1, id2, id3;///NOW2 ///貼圖需要它
float a=0;

#include "glm.h"///呼叫外掛 ///glm需要它
GLMmodel * pmodel=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel2=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel3=NULL;///準備指標 ///glm需要它
GLMmodel * pmodel4=NULL;///準備指標 ///glm需要它

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, id1);///id1 for background ///貼圖需要它
    glBegin(GL_POLYGON); ///貼圖需要它
        glTexCoord2f(0, 0); glVertex3f(-1, +1, -1); ///貼圖需要它
        glTexCoord2f(0, 1); glVertex3f(-1, -1, -1); ///貼圖需要它
        glTexCoord2f(1, 1); glVertex3f(+1, -1, -1); ///貼圖需要它
        glTexCoord2f(1, 0); glVertex3f(+1, +1, -1); ///貼圖需要它
    glEnd();///貼圖需要它

    if (!pmodel) { ///glm需要它
        pmodel = glmReadOBJ("body.obj"); ///glm需要它
        if (!pmodel) exit(0); ///glm需要它
        ///glmUnitize(pmodel); ///glm需要它
        glmFacetNormals(pmodel); ///glm需要它
        glmVertexNormals(pmodel, 90.0); ///glm需要它
    }

    glDisable(GL_TEXTURE_2D);
    glPushMatrix();
        glRotatef(a++, 0,1,0);
        glScalef(0.2, 0.2, 0.2);
        glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
    glPopMatrix();

    if (!pmodel2) { ///glm需要它
        pmodel2 = glmReadOBJ("head.obj"); ///glm需要它
        if (!pmodel2) exit(0); ///glm需要它
        ///glmUnitize(pmodel2); ///glm需要它
        glmFacetNormals(pmodel2); ///glm需要它
        glmVertexNormals(pmodel2, 90.0); ///glm需要它
    }

    glDisable(GL_TEXTURE_2D);
    glPushMatrix();
        glRotatef(a, 0,1,0);
        glScalef(0.2, 0.2, 0.2);
        glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL);
    glPopMatrix();

    glutSwapBuffers();
}
///void myInit()
GLuint myTexture(char * filename) ///貼圖需要它
{
    IplImage * img = cvLoadImage(filename); ///NOW OpenCV ///貼圖需要它
    cvCvtColor(img, img, CV_BGR2RGB);///convert color ///NOW OpenCV ///貼圖需要它

    GLuint id; ///貼圖需要它
    glEnable(GL_TEXTURE_2D); ///貼圖需要它
    glGenTextures(1, &id ); ///貼圖需要它
    glBindTexture(GL_TEXTURE_2D, id); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); ///貼圖需要它
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); ///貼圖需要它
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData); ///貼圖需要它
    return id;///貼圖需要它
}
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f }; ///glm需要它
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; ///glm需要它
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f }; ///glm需要它
int main(int argc, char **argv)
{
    ///IplImage * img = cvLoadImage("marvel.jpg");
    ///cvShowImage("opencv", img);
    ///cvWaitKey(0);///等你按按鍵
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("GLUT");///之後
    ///建好GLUT視窗,可以開始準備 3D 貼圖 (要在create...MainLoop才能建貼圖)
    id1 = myTexture("marvel.jpg"); ///myInit();///我們的貼圖在這裡 ///貼圖需要它
    id2 = myTexture("teapot.jpg");
    id3 = myTexture("square.jpg");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    glEnable(GL_DEPTH_TEST);    ///glm需要它

    glEnable(GL_LIGHT0);  ///glm需要它
    glEnable(GL_NORMALIZE); ///glm需要它
    glEnable(GL_COLOR_MATERIAL); ///glm需要它
    glEnable(GL_LIGHTING); ///glm需要它

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient); ///glm需要它
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse); ///glm需要它
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); ///glm需要它
    glLightfv(GL_LIGHT0, GL_POSITION, light_position); ///glm需要它

    glMatrixMode(GL_PROJECTION); ///投影矩陣相關 戴好我們的正確度數的眼睛
    glLoadIdentity();  ///投影矩陣相關 戴好我們的正確度數的眼睛
    glOrtho(-1,+1, -1,+1, -100,+100); ///投影矩陣相關 戴好我們的正確度數的眼睛
    glMatrixMode(GL_MODELVIEW);  ///投影矩陣相關 切換回我們正確的矩陣

    glutMainLoop();///之前
}

2019年5月30日 星期四

電腦圖學

主題:攝影機運鏡


三種境位

主題:投影 矩陣
#include <GL/glut.h>///GLUT 外掛
#include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized()
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(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    drawmodel();
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
    glutInitWindowSize(512,512);
    glutInitWindowPosition(50, 50);
    glutCreateWindow("week15");

//    glutReshapeFunc(reshape);
    glutDisplayFunc(display);

    glutMainLoop();

    return 0;
}
#include <GL/glut.h>///GLUT 外掛
#include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized()
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(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    drawmodel();
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
    glutInitWindowSize(512,512);
    glutInitWindowPosition(50, 50);
    glutCreateWindow("week15");

//    glutReshapeFunc(reshape);
    glutDisplayFunc(display);

    GLfloat light_pos[] = { 0.0, 0.0, -1.0, 0.0 };
    glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_POSITION, light_pos);

    glutMainLoop();

    return 0;
}

打光
#include <GL/glut.h>///GLUT 外掛
#include "glm.h"///glm.cpp for 3D model glmReadOBJ(), glmDraw(), glmUnitized()
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(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    drawmodel();
    glutSwapBuffers();
}
#include <math.h>///for sin() cos() ///NOW3
float eyeX=0.5, eyeY=0, eyeZ=0; ///NOW3
void timer(int t)///NOW3
{

    glMatrixMode(GL_PROJECTION); ///NOW4
    glLoadIdentity(); ///NOW4
glOrtho(-1, +1,  -1,+1, -10,+10); ///NOW4 你可以看到 -10...+10範圍


    float angle = (t/180.0)*3.1415926; ///NOW3
    eyeX=0.5*cos(angle); ///NOW3
    eyeZ=0.5*sin(angle); ///NOW3

    glutTimerFunc(33, timer, t+1);///NOW3
    glMatrixMode(GL_MODELVIEW);///NOW3
    glLoadIdentity();///NOW3
    gluLookAt( eyeX, eyeY, eyeZ,///eye ///NOW3
           0, 0, 0,///center ///NOW3
               0, 1, 0);///up    ///NOW3

    glutPostRedisplay();///NOW3
}
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
    glutInitWindowSize(512,512);
    glutInitWindowPosition(50, 50);
    glutCreateWindow("week15");
//    glutReshapeFunc(reshape);
    glutDisplayFunc(display);
    glutTimerFunc(33, timer, 0);///NOW3

    GLfloat light_pos[] = { 0.0, 0.0, 1.0, 0.0 };
    glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_POSITION, light_pos);

    glutMainLoop();

    return 0;
}

主題:位置移動VS轉動
複習:背景貼圖

2019年5月23日 星期四

電腦圖學

主題:計時器
#include <GL/glut.h>
#include <mmsystem.h>///Now (1)
#include <stdio.h>///printf()
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
void timer(int t)///NOW timer!!!!
{
    glutTimerFunc(1000, timer, t+1 );///NOW timer!!!! 起床要播下一個鬧鐘
    printf("timer(t) 的 t是 %d\n", t);///順便印一下現在的t是多少
    PlaySoundA("battements_de_coeur1.wav", NULL, SND_ASYNC);///Now (2) ///NOW timer!!!!
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);///變大了
    glutCreateWindow("week 14 timer");

    glutDisplayFunc(display);
    glutTimerFunc(3000, timer, 0);///NOW timer!!!!

    glutMainLoop();

}

主題:內插公式
用excel來解釋內插公式
主題:動畫
#include <GL/glut.h>
#include <mmsystem.h>///Now (1)
float angle=0;
float nowX=0;///NOW2
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        ///glRotatef(angle, 0,0,1);
        glTranslatef(nowX, 0, 0);///NOW2
        glutSolidTeapot( 0.3 );
    glPopMatrix();
    glutSwapBuffers();
}
void timer(int t)///NOW timer!!!!
{
    /// 1000 ms = 1 sec,  30 ms = 1/33 sec , 33 fps
    glutTimerFunc(30, timer, t+1 );///NOW timer!!!! 起床要播下一個鬧鐘
    float alpha = (t%33) / 33.0;///NOW2 alpha 內插
    nowX = alpha* 1 + (1-alpha)* -1 ;///NOW2

    angle += 1;
    glutPostRedisplay();///系統重繪畫面
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);///變大了
    glutCreateWindow("week 14 timer");

    glutDisplayFunc(display);
    glutTimerFunc(1000, timer, 0);///NOW timer!!!!

    glutMainLoop();

}

圖片從左至右移動





2019年5月16日 星期四

電腦圖學

主題:檔案
#include <stdio.h>

FILE * fout=NULL;
int main()
{
    fout=fopen("filename.tex","w");
    for(int i=0;i<=20;i++){
        fprintf(fout,"Hello World\n");
    }

}
利用程式碼來用檔案寫出東西
#include <stdio.h>

FILE * fout2=NULL;
FILE * fin2=NULL;
float angle[20];
int main()
{
    fout2=fopen("motion.tex", "w+");
    for(int i=0;i<=20;i++){
        fprintf(fout2," %.2f", angle[i]);
    }
}
用程式開檔案
主題:關節 擺動作
#include <GL/glut.h>
float angle[20];///NOW2
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glColor3f(1, 1, 1);///white
        glutSolidTeapot( 0.3 );///body
        glPushMatrix();
            glTranslatef(0.2, 0, 0);///NOW2 (3)掛上去
            glRotatef(angle[1], 0,0,1);///NOW2 ///(2)旋轉
            glTranslatef(0.15, 0, 0);///NOW2 (1)旋轉中心
            glColor3f(1, 0, 0);///red
            glutSolidTeapot( 0.2 );///right arm
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
}
int oldX=0;///NOW2
void mouse(int button, int state, int x, int y)///NOW2
{///NOW2
    oldX = x;///NOW2
}
void motion(int x, int y)///NOW2
{///NOW2
    angle[1] += x-oldX;///NOW2
    oldX = x;///NOW2
    display();///NOW2
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    ///glutInitWindowSize(600,600);///可以開大一點的window
    glutCreateWindow("Week 13 angle motion file");
    glutMouseFunc(mouse);///NOW2
    glutMotionFunc(motion);///NOW2
    glutDisplayFunc(display);

    glutMainLoop();
}
擺動一個關節
#include <GL/glut.h>
float angle[20];///NOW2
int angleID=1;///NOW3
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glColor3f(1, 1, 1);///white
        glutSolidTeapot( 0.3 );///body

        glPushMatrix();///右邊
            glTranslatef(0.2, 0, 0);///NOW2 (3)掛上去
            glRotatef(angle[1], 0,0,1);///NOW2 ///(2)旋轉
            glTranslatef(0.15, 0, 0);///NOW2 (1)旋轉中心
            glColor3f(1, 0, 0);///red
            glutSolidTeapot( 0.2 );///right arm
            glPushMatrix();
                glTranslatef(0.2, 0, 0);///NOW2 (3)掛上去
                glRotatef(angle[2], 0,0,1);///NOW2 ///(2)旋轉
                glTranslatef(0.15, 0, 0);///NOW2 (1)旋轉中心
                glColor3f(1, 0, 0);///red
                glutSolidTeapot( 0.2 );///right lower arm
            glPopMatrix();
        glPopMatrix();

        glPushMatrix();///左邊
            glTranslatef(-0.2, 0, 0);///NOW2 (3)掛上去
            glRotatef(angle[3], 0,0,1);///NOW2 ///(2)旋轉
            glTranslatef(-0.15, 0, 0);///NOW2 (1)旋轉中心
            glColor3f(1, 0, 0);///red
            glutSolidTeapot( 0.2 );///right arm
            glPushMatrix();
                glTranslatef(-0.2, 0, 0);///NOW2 (3)掛上去
                glRotatef(angle[4], 0,0,1);///NOW2 ///(2)旋轉
                glTranslatef(-0.15, 0, 0);///NOW2 (1)旋轉中心
                glColor3f(1, 0, 0);///red
                glutSolidTeapot( 0.2 );///right lower arm
            glPopMatrix();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
}
int oldX=0;///NOW2
void mouse(int button, int state, int x, int y)///NOW2
{///NOW2
    oldX = x;///NOW2
}
#include <stdio.h>///NOW3
void motion(int x, int y)///NOW2
{///NOW2
    angle[angleID] += x-oldX;///NOW3
    oldX = x;///NOW2
    for(int i=0;i<20;i++){///NOW3
        printf(" %.2f ", angle[i]);///NOW3
    }
    printf("\n");///NOW3
    display();///NOW2
}
void keyboard(unsigned char key, int x, int y)///NOW3
{///NOW3
    if(key=='1') angleID=1;///NOW3
    if(key=='2') angleID=2;///NOW3
    if(key=='3') angleID=3;///NOW3
    if(key=='4') angleID=4;///NOW3
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    ///glutInitWindowSize(600,600);///可以開大一點的window
    glutCreateWindow("Week 13 angle motion file");
    glutKeyboardFunc(keyboard);///NOW3
    glutMouseFunc(mouse);///NOW2
    glutMotionFunc(motion);///NOW2
    glutDisplayFunc(display);

    glutMainLoop();
}
用鍵盤案1234來控制關節
#include <GL/glut.h>
#include <stdio.h>///NOW_FILE (0)
float angle[20];///NOW2
int angleID=1;///NOW3
FILE * fout = NULL;///NOW_FILE (1)
FILE * fin = NULL;///NOW_FILE_READ (1)
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glColor3f(1, 1, 1);///white
        glutSolidTeapot( 0.3 );///body

        glPushMatrix();///右邊
            glTranslatef(0.2, 0, 0);///NOW2 (3)掛上去
            glRotatef(angle[1], 0,0,1);///NOW2 ///(2)旋轉
            glTranslatef(0.15, 0, 0);///NOW2 (1)旋轉中心
            glColor3f(1, 0, 0);///red
            glutSolidTeapot( 0.2 );///right arm
            glPushMatrix();
                glTranslatef(0.2, 0, 0);///NOW2 (3)掛上去
                glRotatef(angle[2], 0,0,1);///NOW2 ///(2)旋轉
                glTranslatef(0.15, 0, 0);///NOW2 (1)旋轉中心
                glColor3f(1, 0, 0);///red
                glutSolidTeapot( 0.2 );///right lower arm
            glPopMatrix();
        glPopMatrix();

        glPushMatrix();///左邊
            glTranslatef(-0.2, 0, 0);///NOW2 (3)掛上去
            glRotatef(angle[3], 0,0,1);///NOW2 ///(2)旋轉
            glTranslatef(-0.15, 0, 0);///NOW2 (1)旋轉中心
            glColor3f(1, 0, 0);///red
            glutSolidTeapot( 0.2 );///right arm
            glPushMatrix();
                glTranslatef(-0.2, 0, 0);///NOW2 (3)掛上去
                glRotatef(angle[4], 0,0,1);///NOW2 ///(2)旋轉
                glTranslatef(-0.15, 0, 0);///NOW2 (1)旋轉中心
                glColor3f(1, 0, 0);///red
                glutSolidTeapot( 0.2 );///right lower arm
            glPopMatrix();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
}
int oldX=0;///NOW2
void mouse(int button, int state, int x, int y)///NOW2
{///NOW2
    oldX = x;///NOW2
}

void motion(int x, int y)///NOW2
{///NOW2
    angle[angleID] += x-oldX;///NOW3
    oldX = x;///NOW2
    if(fout == NULL) fout = fopen("motion.txt", "w+");///NOW_FILE (2)
    for(int i=0;i<20;i++){///NOW3
        printf(" %.2f ", angle[i]);///NOW3
        fprintf(fout, " %.2f ", angle[i]);///NOW_FILE
    }
    printf("\n");///NOW3
    fprintf(fout, "\n");///NOW_FILE
    display();///NOW2
}
void keyboard(unsigned char key, int x, int y)///NOW3
{///NOW3
    if(key=='1') angleID=1;///NOW3
    if(key=='2') angleID=2;///NOW3
    if(key=='3') angleID=3;///NOW3
    if(key=='4') angleID=4;///NOW3
    if(key=='w'){///NOW_FILE
        fout = fopen("motion.txt", "w+");///NOW_FILE (2)
    }
    if(key=='r'){
        if(fin==NULL) fin = fopen("motion.txt", "r");///NOW_FILE_READ (2)
        ///scanf("%d", &n);
        for(int i=0;i<20; i++){///NOW_FILE_READ
            fscanf(fin, "%f", &angle[i]);///NOW_FILE_READ
            printf(" %.2f ", angle[i]);///順便印出來看數字對不對
        }
    }
    glutPostRedisplay();///NOW_FILE_READ 和 display()很像
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    ///glutInitWindowSize(600,600);///可以開大一點的window
    glutCreateWindow("Week 13 angle motion file");
    glutKeyboardFunc(keyboard);///NOW3
    glutMouseFunc(mouse);///NOW2
    glutMotionFunc(motion);///NOW2
    glutDisplayFunc(display);

    glutMainLoop();
}
錄製動作

2019年5月9日 星期四

電腦圖學

主題:鍵盤
if(key=='1') PlaySoundA("C:\\Users\\user\\Downloads\\do.wav",NULL,SND_ASYNC);
    if(key=='2') PlaySoundA("C:\\Users\\user\\Downloads\\re.wav",NULL,SND_ASYNC);
    if(key=='3') PlaySoundA("C:\\Users\\user\\Downloads\\mi.wav",NULL,SND_ASYNC);
    if(key=='4') PlaySoundA("C:\\Users\\user\\Downloads\\fa.wav",NULL,SND_ASYNC);
    if(key=='5') PlaySoundA("C:\\Users\\user\\Downloads\\so.wav",NULL,SND_ASYNC);
按12345可發出聲音

#include "CMP3_MCI.h"
CMP3_MCI myMP3;
myMP3.Load("C:\\Users\\user\\Downloads\\many.wma");
    myMP3.Play();
可撥放mp3

主題:聲音 音樂WAV MP3
開起專案
#include <windows.h>
#include <mmsystem.h>
int main()
{
    PlaySoundA("C:\\Users\\user\\Downloads\\rain.wav",NULL,SND_SYNC);
}記得\要加成兩條


加標籤

開一個新的GLUT
#include <mmsystem.h>
PlaySoundA("C:\\Users\\user\\Downloads\\rain.wav",NULL,SND_SYNC);
貼上這兩行
複習上周的TRT
#include <GL/glut.h>
float angle[20];///用陣列,來取代很多個變數///Now4!!
///float angle1=0, angle2, angle3, angle4;///Now3!!!
int jointID=1;///1,2,3,4///Now3!!!
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(255,255,255);///白色
    glutSolidTeapot( 0.3 );///身體

    glPushMatrix();///右邊的手臂
        glTranslatef(0.2, 0,0 );///(3)往右移動, 掛在身體的右肩
        glRotatef(angle[1], 0,0,1);///(2)旋轉
        glTranslatef(0.28, 0,0);///(1)往右推,把茶壼的柄,放到中心,變 轉動軸

        glColor3f(255,0,0);///紅色
        glutSolidTeapot( 0.2 );///上手臂

        glPushMatrix();///右下手臂
            glTranslatef(0.2, 0,0 );///(3)往右移動, 掛在身體的右肘
            glRotatef(angle[2], 0,0,1);///(2)旋轉
            glTranslatef(0.28, 0,0);///(1)往右推,把茶壼的柄,放到中心,變 轉動軸

            glColor3f(255,0,0);///紅色
            glutSolidTeapot( 0.2 );///下手臂
        glPopMatrix();
    glPopMatrix();


    glPushMatrix();///左邊的手臂
        glTranslatef(-0.2, 0,0 );///(3)往左移動, 掛在身體的左肩
        glRotatef(-angle[3], 0,0,1);///(2)旋轉
        glTranslatef(-0.28, 0,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

        glColor3f(255,0,0);///紅色
        glutSolidTeapot( 0.2 );///上手臂

        glPushMatrix();///左下手臂
            glTranslatef(-0.2, 0,0 );///(3)往左移動, 掛在身體的左肘
            glRotatef(-angle[4], 0,0,1);///(2)旋轉
            glTranslatef(-0.28, 0,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

            glColor3f(255,0,0);///紅色
            glutSolidTeapot( 0.2 );///下手臂
        glPopMatrix();
    glPopMatrix();

    glPushMatrix();///左邊的大腿
        glTranslatef(-0.18, -0.1,0 );///(3)往左移動, 掛在身體的左肩
        glRotatef(-angle[3], 0,0,1);///(2)旋轉
        glTranslatef(0, -0.2,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

        glColor3f(255,0,0);///紅色
        glutSolidTeapot( 0.2 );///上手臂

        glPushMatrix();///左下小腿
            glTranslatef(0, -0.1,0 );///(3)往左移動, 掛在身體的左肘
            glRotatef(-angle[4], 0,0,1);///(2)旋轉
            glTranslatef(0, -0.2,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

            glColor3f(255,0,0);///紅色
            glutSolidTeapot( 0.2 );///下小腿
        glPopMatrix();
    glPopMatrix();

    glPushMatrix();///右邊的大腿
        glTranslatef(+0.18, -0.1,0 );///(3)往左移動, 掛在身體的左肩
        glRotatef(-angle[3], 0,0,1);///(2)旋轉
        glTranslatef(0, -0.2,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

        glColor3f(255,0,0);///紅色
        glutSolidTeapot( 0.2 );///上手臂

        glPushMatrix();///左下小腿
            glTranslatef(0, -0.1,0 );///(3)往左移動, 掛在身體的左肘
            glRotatef(-angle[4], 0,0,1);///(2)旋轉
            glTranslatef(0, -0.2,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

            glColor3f(255,0,0);///紅色
            glutSolidTeapot( 0.2 );///下小腿
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();
    ///angle++;///Now2!!!
}
int oldX, oldY;
void mouse(int button, int state, int x, int y)///Now5!!!!
{///當mouse按下去時,要記下!! 要記得要讓它有作用!!
    oldX = x; oldY = y;///Now5!!!!
}
void motion(int x, int y)///Now2!!!
{
    angle[jointID] += x -oldX;///Now4!!!!///Now5!!!!
    oldX = x;///Now5!!!!
    ///if(jointID==1) angle1 = x;///Now2!!!///Now3!!!
    ///if(jointID==2) angle2 = x;///Now2!!!///Now3!!!
    ///if(jointID==3) angle3 = x;///Now2!!!///Now3!!!
    ///if(jointID==4) angle4 = x;///Now2!!!///Now3!!!
    display();///Now2!!!
}
void keyboard(unsigned char key, int x, int y)
{///Now3!!!
    /// jointID = key - '0';///雖然可以這樣簡化,但下面易看
    if(key=='1') jointID=1;///Now3!!!
    if(key=='2') jointID=2;///Now3!!!
    if(key=='3') jointID=3;///Now3!!!
    if(key=='4') jointID=4;///Now3!!!
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///Now!!!!
    glutDisplayFunc(display);
    glutMotionFunc(motion);///Now2!!!
    glutMouseFunc(mouse);///Now5!!!!
    glutKeyboardFunc(keyboard);///Now3!!!


    glutMainLoop();
}

2019年5月2日 星期四

電腦圖學

主題:階層轉動骨架
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(255,255,255);///白色
    glutSolidTeapot( 0.3 );///身體

    glPushMatrix();///右邊的手臂
        glTranslatef(0.2, 0,0 );///(3)往右移動, 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2)旋轉
        glTranslatef(0.28, 0,0);///(1)往右推,把茶壼的柄,放到中心,變 轉動軸

        glColor3f(255,0,0);///紅色
        glutSolidTeapot( 0.2 );///上手臂

        glPushMatrix();///右下手臂
            glTranslatef(0.2, 0,0 );///(3)往右移動, 掛在身體的右肘
            glRotatef(angle, 0,0,1);///(2)旋轉
            glTranslatef(0.28, 0,0);///(1)往右推,把茶壼的柄,放到中心,變 轉動軸

            glColor3f(255,0,0);///紅色
            glutSolidTeapot( 0.2 );///上手臂
        glPopMatrix();
    glPopMatrix();


    glPushMatrix();///左邊的手臂
        glTranslatef(-0.2, 0,0 );///(3)往左移動, 掛在身體的左肩
        glRotatef(angle, 0,0,1);///(2)旋轉
        glTranslatef(-0.28, 0,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

        glColor3f(255,0,0);///紅色
        glutSolidTeapot( 0.2 );///上手臂

        glPushMatrix();///左下手臂
            glTranslatef(-0.2, 0,0 );///(3)往左移動, 掛在身體的左肘
            glRotatef(angle, 0,0,1);///(2)旋轉
            glTranslatef(-0.28, 0,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

            glColor3f(255,0,0);///紅色
            glutSolidTeapot( 0.2 );///上手臂
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();
    angle++;
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///Now!!!!
    glutDisplayFunc(display);

    glutMainLoop();
}
                                                                           兩隻手臂
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(255,255,255);///白色
    glutSolidTeapot( 0.3 );///身體

    glPushMatrix();///右邊的手臂
        glTranslatef(0.2, 0,0 );///(3)往右移動, 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2)旋轉
        glTranslatef(0.28, 0,0);///(1)往右推,把茶壼的柄,放到中心,變 轉動軸

        glColor3f(255,0,0);///紅色
        glutSolidTeapot( 0.2 );///上手臂

        glPushMatrix();///右下手臂
            glTranslatef(0.2, 0,0 );///(3)往右移動, 掛在身體的右肘
            glRotatef(angle, 0,0,1);///(2)旋轉
            glTranslatef(0.28, 0,0);///(1)往右推,把茶壼的柄,放到中心,變 轉動軸

            glColor3f(255,0,0);///紅色
            glutSolidTeapot( 0.2 );///上手臂
        glPopMatrix();
    glPopMatrix();


    glPushMatrix();///左邊的手臂
        glTranslatef(-0.2, 0,0 );///(3)往左移動, 掛在身體的左肩
        glRotatef(-angle, 0,0,1);///(2)旋轉
        glTranslatef(-0.28, 0,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

        glColor3f(255,0,0);///紅色
        glutSolidTeapot( 0.2 );///上手臂

        glPushMatrix();///左下手臂
            glTranslatef(-0.2, 0,0 );///(3)往左移動, 掛在身體的左肘
            glRotatef(-angle, 0,0,1);///(2)旋轉
            glTranslatef(-0.28, 0,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

            glColor3f(255,0,0);///紅色
            glutSolidTeapot( 0.2 );///上手臂
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();
    ///angle++;///Now2!!!
}
void motion(int x, int y)///Now2!!!
{
    angle = x;///Now2!!!
    display();///Now2!!!
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///Now!!!!
    glutDisplayFunc(display);
    glutMotionFunc(motion);///Now2!!!

    glutMainLoop();
}
滑鼠拖曳轉動
主題:鍵盤按鍵
#include <GL/glut.h>
float angle1=0, angle2, angle3, angle4;///Now3!!!
int jointID=1;///1,2,3,4///Now3!!!
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(255,255,255);///白色
    glutSolidTeapot( 0.3 );///身體

    glPushMatrix();///右邊的手臂
        glTranslatef(0.2, 0,0 );///(3)往右移動, 掛在身體的右肩
        glRotatef(angle1, 0,0,1);///(2)旋轉
        glTranslatef(0.28, 0,0);///(1)往右推,把茶壼的柄,放到中心,變 轉動軸

        glColor3f(255,0,0);///紅色
        glutSolidTeapot( 0.2 );///上手臂

        glPushMatrix();///右下手臂
            glTranslatef(0.2, 0,0 );///(3)往右移動, 掛在身體的右肘
            glRotatef(angle2, 0,0,1);///(2)旋轉
            glTranslatef(0.28, 0,0);///(1)往右推,把茶壼的柄,放到中心,變 轉動軸

            glColor3f(255,0,0);///紅色
            glutSolidTeapot( 0.2 );///下手臂
        glPopMatrix();
    glPopMatrix();


    glPushMatrix();///左邊的手臂
        glTranslatef(-0.2, 0,0 );///(3)往左移動, 掛在身體的左肩
        glRotatef(-angle3, 0,0,1);///(2)旋轉
        glTranslatef(-0.28, 0,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

        glColor3f(255,0,0);///紅色
        glutSolidTeapot( 0.2 );///上手臂

        glPushMatrix();///左下手臂
            glTranslatef(-0.2, 0,0 );///(3)往左移動, 掛在身體的左肘
            glRotatef(-angle4, 0,0,1);///(2)旋轉
            glTranslatef(-0.28, 0,0);///(1)往左推,把茶壼的柄,放到中心,變 轉動軸

            glColor3f(255,0,0);///紅色
            glutSolidTeapot( 0.2 );///下手臂
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();
    ///angle++;///Now2!!!
}
void motion(int x, int y)///Now2!!!
{
    if(jointID==1) angle1 = x;///Now2!!!///Now3!!!
    if(jointID==2) angle2 = x;///Now2!!!///Now3!!!
    if(jointID==3) angle3 = x;///Now2!!!///Now3!!!
    if(jointID==4) angle4 = x;///Now2!!!///Now3!!!
    display();///Now2!!!
}
void keyboard(unsigned char key, int x, int y)
{///Now3!!!
    if(key=='1') jointID=1;///Now3!!!
    if(key=='2') jointID=2;///Now3!!!
    if(key=='3') jointID=3;///Now3!!!
    if(key=='4') jointID=4;///Now3!!!
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///Now!!!!
    glutDisplayFunc(display);
    glutMotionFunc(motion);///Now2!!!
    glutKeyboardFunc(keyboard);///Now3!!!

    glutMainLoop();
}
                     利用1,2,3,4來控制骨架

2019年4月25日 星期四

電腦圖學筆記

主題:T-R-T旋轉
Transformation.exe 自轉vs.公轉
glTranslatef(....)                   glRotatef(.....) 
glRotatef(.....)                      glTranslatef(....) 

     

打上老師教的程式碼
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(0,0.5,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glPushMatrix();

    glPopMatrix();

    glPushMatrix();
        glTranslatef(0.50,0.625,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.6,0,0);

        glRotatef(-90,0,1,0);
        glutSolidCone(0.2,0.6,30,30);
    glPopMatrix();
    glutSwapBuffers();

}
void motion(int x,int y)
{
       angle=x;
       display();
}
int main(int argc, char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week10 TRT");

    glutDisplayFunc(display);
    glutMotionFunc(motion);

    glutMainLoop();
}
按著就可以旋轉了
      

2019年4月11日 星期四

week08貼圖

主題:貼圖Texture
1.把[data][window62]glut32.dll下載
2.把dataˋwindow32解壓縮
3.把data跟glut32.dll丟進window32裡面
4.開啟Texture
實作:OpenCV+OpenGL貼圖
google:OpenCV2.1找到第一個
裡面OpenCV-2.1.1-win32-vs2008.exe安裝
(1)要C:\OpenCV2.1目錄
(2)要選 Add PATH
(3)裝好後才能啟動codeblocks
下載https://www.transmissionzero.co.uk/software/freeglut-devel/
從CODEbLOCKS開啟glut專案把freeglut拉到桌面libfreeglut.a改成libglut32.a
然後按照圖片的步驟





最後
程式碼
#include <GL/glut.h>
#include <opencv/highgui.h>///貼圖需要
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    IplImage * img=cvLoadImage("earth.jpg");///貼圖需要
    cvShowImage("opencv Window", img);///貼圖需要
    cvWaitKey(0);///貼圖需要

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("Week08");

    glutDisplayFunc(display);

    glutMainLoop();
}