2022年3月14日 星期一

涵030 筆記week04

 回家作業:

使用滴管知道顏色,及座標位置(使用小畫家)
顏色/255,座標(減一半除一半)
做一張圖


顏色
主體顏色為:R-156、G-144、B-92
熊熊嘴巴區域:R-234、-G-221、B-166
眼睛+嘴巴+外框:R-78、G-20、B-16
耳朵:R-249、G-188、B-169

除以255後
主體顏色:0.61、0.56、0.36
嘴巴區域:0.91、0.86、0.65
眼睛嘴巴外框:0.3、0.07、0.06
耳朵:0.97、0.73、0.66

座標(減一半除一半)
原始大小:
水平:427
垂直:441

剪一半除一半後:
427-213.5=213.5
213.5/213.5=1

水平:1

441-220.5=220.5
220.5/220.5=1

垂直:1


以下為week04上課筆記:

4-1確認鏡頭數值
https://jsyeh.org/3dcg10/ -下載[data][win32] - 將data解壓縮後放入(解壓縮後的)windows -開啟Transformation.exe

4-2沿用上次的茶壺,調整茶壺位置
利用glPushMatrix()來備份 利用glPopMatrix()還原
4-3沿用上次的茶壺,調整數值及位置
4-4開始寫作標
mouseX及mouseY-鼠標位置     glTranslatef()-改變位置
(1-左鍵 0-中鍵 2-右鍵)
 (mouseX-150)/150.0 -(mouseY-150)/150.0-減一半後除一半


4-5
加入黃色茶壺,以及座標
我點選的地方,茶壺就跟著到點選的地方,同時顯示出座標。


4-6
保留座標,並且把茶壺修改成滑鼠
然後最終可以得到的結果是滑鼠點到哪同時秀出座標,以及可以知道之前點哪裡
主要程式

#include <GL/glut.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();                     ///push備份矩陣

        glTranslatef(x, y, 0);         ///移動會一直累積

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

        glutSolidTeapot(0.3);      ///茶壺

    glPopMatrix();                    ///pop還原矩陣

    glutSwapBuffers();            ///結束

}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week04");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}





最後教的小工具:


#include <GL/glut.h>
#include <stdio.h>
int mouseX=0, mouseY=0, N=0;
int mx[100], my[100];
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1, 1, 0);
    glBegin(GL_LINE_LOOP);
        for(int i=0; i<N; i++){
            glVertex2f((mx[i]-150)/150.0, -(my[i]-150)/150.0);
        }
    glEnd();
    glutSwapBuffers();
}
void mouse(int btn, int state, int x, int y)
{
    mouseX=x;
    mouseY=y;
    if(state==GLUT_DOWN)
    {
        printf("    glVertex2f((%d-150)/150.0,-(%d-150)/150.0);\n", x, y);
        N++;
        mx[N-1]=x; my[N-1]=y;
    }
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week04");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}

沒有留言:

張貼留言