1. Trang chủ
  2. » Công Nghệ Thông Tin

Lab 3 Computer graphics BKHCM

10 466 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 872,57 KB

Nội dung

Bài tập Học kỳ 2, năm học 2016-2017 Lưu ý: Tất tập phải VIẾT TAY CÂU : a Cho tam giác ABC với đỉnh A = (3, 5), B = (-1, 2), C = (-5, -4) Xoay 60 độ ngược chiều kim đồng hồ phóng to tam giác lần theo trục với điều kiện giữ cố định trọng tâm tam giác sau tiếp tục tịnh tiến tam giác đơn vị theo trục x y Tìm ma trận phép biến đổi tọa độ đỉnh tam giác sau biến đổi b Cho tứ diện ABCD với đỉnh A = (1, 1, 0), B = (3, 4, 0), C = (-2, -2, 0), D = (0, 0, 3) Xoay tứ diện 30 độ ngược chiều kim đồng hồ theo trục z 60 độ thuận chiều kim đồng hồ theo trục y Tìm ma trận phép biến đổi tọa độ đỉnh tứ diện sau biến đổi CÂU : Biến đổi hình đa giác ABCDEFG thành hình đa giác A’B’C’D’E’F’G’ Hãy tìm ma trận phép biến đổi, biết tọa độ đỉnh sau: A(-6, 4) B(-5, 4) C(-5, 2) D(-4, 4) E(-3, 2) F(-2, 4) G(-4, 8) A’(2.5, 1.5) B’(3, 2) C’(2, 3) D’(3.5, 2.5) E’(3, 4) F’(4.5, 3.5) G’(5.5, 0.5) CÂU : Cho đoạn mã OpenGL sau Biết sử dụng camera mặc định với thể tích nhìn thiết lập đủ lớn để bao trọn hình vẽ pulblic void display(){ glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(3.0f, 1.0f, -1.0f); glScalef(3.0f, 2.0f, 2.0f); glRotatef(60.0f, 0.0f, 0.0f, 1.0f); glRotatef(30.0f, 0.0f, 0.0f, 1.0f); glTranslate(-1.0f, -1.0f, 1.0f); 10 glBegin(GL_TRIANLGES) 11 glVertex3f(-1f, 0f, -1f); //Vertex A 12 glVertex3f(1f, 0f, -1f); //Vertex B 13 glVertex3f(0f, 0f, 1f); //Vertex C 14 glEnd(); 15 glFlush(); 16 } a Tính ma trận Model-View sau thực lệnh dòng 4, 5, 6, 7, 8, b Tính tọa độ đỉnh A’, B’, C’ ảnh đỉnh A, B, C tương ứng c Tính ma trận Model-View sau thực lệnh dòng 4, 5, 6, 7, 8, CÂU : Cho đoạn mã OpenGL vẽ hình vuông sau (biết sử dụng camera mặc định với thể tích nhìn thiết lập đủ lớn để bao trọn hình vẽ) Tìm ma trận biến đổi để xoay hình chữ nhật xung quanh tâm Đoạn mã: void DrawSquare() { glColor3f(1.0, 0.0, 0.0); glBegin(GL_POLYGON); glVertex2d(1.0, 1.0); glVertex2d(3.0, 1.0); glVertex2d(3.0, 3.0); glVertex2d(1.0, 3.0); glEnd(); } a Hãy tìm ma trận biến đổi để xoay hình vuông góc 45 độ quanh tâm b Tìm tọa độ đỉnh A, B, C, D c Hiện thực hàm RotateSquare(double angle) để xoay hình vuông quanh tâm với góc cho trước CÂU : Cho đoạn mã OpenGL vẽ khối vuông sau (biết sử dụng camera mặc định với thể tích nhìn thiết lập đủ lớn để bao trọn hình vẽ) void DrawSquare() { glColor3f(1.0, 0.0, 0.0); glBegin(GL_POLYGON); glVertex3d(-2.0,-2.0, glVertex3d(-2.0, 2.0, glVertex3d( 2.0, 2.0, glVertex3d( 2.0,-2.0, glEnd(); } 2.0); 2.0); 2.0); 2.0); void Draw3DSquare() { glPushMatrix(); DrawSquare(); glRotated(90, 0.0, 1.0, 0.0); DrawSquare(); glRotated(90, 1.0, 0.0, 0.0); DrawSquare(); glRotated(90, 0.0, DrawSquare(); glRotated(90, 1.0, DrawSquare(); glRotated(90, 0.0, DrawSquare(); glRotated(90, 1.0, glPopMatrix(); 1.0, 0.0); 0.0, 0.0); 1.0, 0.0); 0.0, 0.0); } Khối vuông có kích thước x x từ (-2, -2, -2) đến (2, 2, 2) a Hãy viết đoạn code để xoay khối vuông hình bên Lưu ý: đường chéo khối vuông Ok nằm mặt phẳng Oxz CÂU : (Sinh viên xem code đính kèm phần code mẫu) Phần code mẫu cung cấp hàm void DrawSquare() dùng để vẽ hình vuông có kích thước 2x2 mặt phẳng 0xz Sinh viên cần thực hàm sau: - Hàm vẽ kim tự tháp double DrawPyramid(double scaleLayer) (hình bên dưới) o Input:  scaleLayer: tỉ lệ layer gần (ví dụ: với scaleLayer = 0.9, tỉ lệ cạnh layer 0.9, layer 0.9 (khoảng cách layer sinh viên tự quy định) o Output:  Chiều cao kim tự tháp - Hàm vẽ kim tự tháp xếp chồng void DrawStackPyramid(int nStacks, double scaleLayer) (hình bên dưới) o Input:  nStack: số tầng kim tự tháp  scaleLayer: thông số truyền vào cho hàm DrawPyramid - tỉ lệ layer kim tự tháp (Kích thước kim tự tháp tầng 1/2 kim tự tháp tầng trên) Kết lời gọi hàm DrawStackPyramid(3, 0.9) CÂU : Đọc hiểu hàm sau: void drawFigure() { float fLen = 1.0/2.0; glColor3f(0, 0, 0); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glBegin(GL_TRIANGLES); glVertex2f(0, 1); glVertex2f(fLen*sin(PI/3), 1-fLen*cos(PI/3)); glVertex2f(-fLen*sin(PI/3), 1-fLen*cos(PI/3)); glEnd(); float fDelta = 0.19; glColor3f(1, 1, 1); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glBegin(GL_TRIANGLES); glVertex2f(0, 1- fDelta*cos(PI/3)/sin(PI/3)); glVertex2f(fLen*sin(PI/3)-fDelta, 1-fLen*cos(PI/3)); glVertex2f(-fLen*sin(PI/3)+fDelta, 1-fLen*cos(PI/3)); glEnd(); glColor3f(0, 0, 0); glRectf(-fDelta/3.0, 0, fDelta/3.0, 0.9); } Hãy viết chương trình để vẽ hình vẽ sau, biết cửa sổ hình có kích thước 900×600 : Gợi ý: sử dụng hàm biến đổi glRotatef, glTranslatef, glPushMatrix, glPopMatrix Lưu ý: câu thực code, sinh viên chuẩn bị chương trình cho TA chấm cần thiết PHỤ LỤC Mã nguồn khởi động câu #include #include #define PI 3.1415 #define WIDTH 600 #define HEIGHT 600 floatColorArr[14][3] = { { 0.0, 1.0, 0.0 }, { 1.0, 1.0, 0.0 }, { 1.0, 0.0, 1.0 }, { 0.0, 1.0, 1.0 }, { 0.3, 0.3, 0.3 }, { 0.5, 0.5, 0.5 }, { 0.9, 0.9, 0.9 }, { 1.0, 0.5, 0.5 }, { 0.0, 0.0, 1.0 }, { 0.5, 1.0, 0.5 }, { 0.5, 0.5, 1.0 }, { 0.0, 0.0, 0.0 }, { 1.0, 1.0, 1.0 }, { 1.0, 0.0, 0.0 } }; void setCameraVolume(float l, float r, float b, float t){ glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, 3.0 / 4.0, 0.001, 1000); } void processTimer(int value){ glutTimerFunc(1000 / 60, processTimer, value); glutPostRedisplay(); } void DrawSquare() { glBegin(GL_POLYGON); glVertex3d(-1.0, glVertex3d(-1.0, glVertex3d( 1.0, glVertex3d( 1.0, glEnd(); } 0.0,-1.0); 0.0, 1.0); 0.0, 1.0); 0.0,-1.0); double DrawPyramid(double scaleLayer) { // TODO return 0; } void DrawStackPyramid(int nStacks, double scaleLayer) { // TODO } void Draw(){ glClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); setCameraVolume(-1, 4, -1, 4); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 10.0, 6.0, 16.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0 ); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glScaled(3, 3, 3); DrawSquare(); glFlush(); glutSwapBuffers(); } int main(int argc, char** argv[]){ glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(HEIGHT, WIDTH); glutCreateWindow("Tut - Cau 6"); glEnable(GL_DEPTH_TEST); glutDisplayFunc(Draw); glutTimerFunc(1000 / 60, processTimer, 1); glutMainLoop(); return 0; } 10 ... fDelta*cos(PI /3) /sin(PI /3) ); glVertex2f(fLen*sin(PI /3) -fDelta, 1-fLen*cos(PI /3) ); glVertex2f(-fLen*sin(PI /3) +fDelta, 1-fLen*cos(PI /3) ); glEnd(); glColor3f(0, 0, 0); glRectf(-fDelta /3. 0, 0, fDelta /3. 0,... { glColor3f(1.0, 0.0, 0.0); glBegin(GL_POLYGON); glVertex3d(-2.0,-2.0, glVertex3d(-2.0, 2.0, glVertex3d( 2.0, 2.0, glVertex3d( 2.0,-2.0, glEnd(); } 2.0); 2.0); 2.0); 2.0); void Draw3DSquare()... glBegin(GL_TRIANGLES); glVertex2f(0, 1); glVertex2f(fLen*sin(PI /3) , 1-fLen*cos(PI /3) ); glVertex2f(-fLen*sin(PI /3) , 1-fLen*cos(PI /3) ); glEnd(); float fDelta = 0.19; glColor3f(1, 1, 1); glPolygonMode(GL_FRONT_AND_BACK,

Ngày đăng: 10/04/2017, 23:56

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w