งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

418382 สภาพแวดล้อมการทำงาน คอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 4 ประมุข ขันเงิน

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "418382 สภาพแวดล้อมการทำงาน คอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 4 ประมุข ขันเงิน"— ใบสำเนางานนำเสนอ:

1 สภาพแวดล้อมการทำงาน คอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 4 ประมุข ขันเงิน

2 RASTERIZATION

3 Projection Transformation เปลี่ยน eye space เป็น clip space พิกัดใน clip space จะใช้เป็นตัวบอกว่าเราจะเห็น vertex ใดหรือไม่เห็น vertex ใด กระบวนการตัดสินใจ : vertex ที่เห็นจะต้องมี – -1 ≤ x ≤ 1 – -1 ≤ y ≤ 1 – -1 ≤ z ≤ 1 Projection transform ยังมีผลต่อลักษณะภาพที่ เราเห็นอีกด้วย

4 Projection Transform ใน OpenGL OpenGL จะจำ matrix ของ projection transform เอาไว้ เวลาต้องการเปลี่ยนแปลง projection matrix ให้ เปลี่ยน mode ของ matrix เป็น GL_PROJECTION ด้วยคำสั่ง glMatrixMode(GL_PROJECTION); หลังจากนั้นใช้คำสั่งในการเปลี่ยนแปลง matrix อื่นแบบเดิม เช่น glLoadIdentity(), glMultMatrix(…), ฯลฯ ส่วนมากเราจะสั่ง glLoadIdentity() ทันที หลังจากสั่ง glMatrixMode(GL_PROJECTION) เสร็จแล้ว เพื่อเคลียร์ค่า projection matrix ก่อน ใส่ค่าใหม่

5 Projection Transformation ที่สำคัญ 2 แบบ Orthographic Projection Perspective Projection

6 Orthographic Projection ปริมาตรของบริเวณที่เห็นเป็นปริซึม ไม่มี foreshortening กล่าวคือ ไม่ว่าวัตถุจะอยู่ ใกล้ไกลก็เห็นขนาดเท่ากันหมด หลังจากฉาก เส้นขนานยังเป็นเส้นขนานอยู่ ใช้ในโปรแกรมช่วยเขียนแบบ /CAD เนื่องจาก ขนาดของวัตถุเป็นเรื่องสำคัญ

7 Orthographic Projection ( ต่อ )

8 Orthographic Projection ( ต่อ )

9 การนิยาม Orthographic Projection นิยามได้โดยการนิยามปริซึมของปริมาตรที่เรา ต้องการมองเห็น ปริซึมนี้สามารถนิยามได้ด้วยตัวเลข 3 คู่ – left และ right --- ขอบเขตในแนวแกน x – top และ bottom --- ขอบเขตในแนวแกน y – near และ far --- ขอบเขตในแนวแกน -z ( เพราะเรามอง ในแนว -z) ค่าทั้งหกเป็นพิกัดใน eye space ปริซึมที่นิยามคือ {(x,y,z) : left ≤ x ≤ right, top ≤ y ≤ bottom, near ≤ -z ≤ far}

10 ปริซึมปริมาตรที่มองเห็น

11 การนิยาม Orthographic Projection ( ต่อ ) Matrix ของ orthographic projection ต้องทำ อะไรบ้า – ส่ง x = left ไป x = -1 – ส่ง x = right ไป x = 1 – ส่ง y = bottom ไป y = -1 – ส่ง y = top ไป y = 1 – ส่ง z = -far ไป z = 1 – ส่ง z = -near ไป z = -1

12 Matrix ของ Orthographic Projection

13 คำสั่ง OpenGL เกี่ยวกับ Orthographic Projection glOrtho(left, right, bottom, top, near, far) – คูณ matrix ปัจจุบันด้วย matrix ของ orthographic projection ในหน้าก่อน – ก่อนใช้ควรเรียก glMatrixMode(GL_PROJECTION) glLoadIdentity() ก่อนเพื่อเปลี่ยน mode และเคลียร์ค่า projection matrix เดิม glOrtho2D(left, right, bottom, top) – เหมือนกับ glOrtho แต่ให้ค่า near เป็น 0 และ ค่า far เป็น 1

14 Perspective Projection ปริมาตรของบริเวณที่เห็นเป็น frustum ( ปีระมิด ยอดตัด ) มี foreshortening กล่าวคือ อะไรที่อยู่ใกล้จะ เห็นใหญ่กว่า หลังจากฉายแล้ว เส้นขนานอาจจะไม่ขนานกัน เหมือนเดิม ให้ความเป็นสามมิติ เพราะเหมือนกับที่ตา คนทำงาน ทำให้เหมือนเข้าไปอยู่ในฉากจริงๆ ใช้กับโปรแกรมทางความบันเทิง

15 Perspective Projection ( ต่อ )

16 Perspective Projection (cont.) orthographicperspective

17 การนิยาม Perspective Projection นิยามด้วยเลข 6 ตัวเหมือนกับ orthographic projection

18 การนิยาม Perspective Projection ( ต่อ ) ปริมาตรที่มองเห็นคือปีระมิดยอดตัดที่มียอดเป็น สี่เหลี่ยม {(x,y,z) : left ≤ x ≤ right, bottom ≤ y ≤ top, z = -near} ซึ่งยอดของมันถูกฉายต่อไปจนถึง z = -far

19 การนิยาม Perspective Projection ( ต่อ ) ให้จุด (x,y,z) มาใน eye space แล้วมันจะถูก แปลงเป็นอะไรใน clip space? (0,0,0) (x,y,z)

20 การนิยาม Perspective Projection ( ต่อ ) หา x ใน clip space (0,0,0) (x,y,z)

21 การนิยาม Perspective Projection ( ต่อ ) เริ่มจากการหา x ใน eye space ของจุดปลาย สองจุด (0,0,0) (x,y,z)

22 การนิยาม Perspective Projection ( ต่อ ) อาศัยความรู้เรื่องสามเหลี่ยมคล้าย ได้ว่า ดังนั้น (0,0,0)

23 การนิยาม Perspective Projection ( ต่อ ) ทำนองเดียวกัน ดังนั้น (0,0,0)

24 การนิยาม Perspective Projection ( ต่อ ) เรารู้ว่า สำหรับค่าคงที่ a และ b บางตัว (0,0,0) (x,y,z)

25 การนิยาม Perspective Projection ( ต่อ ) เนื่องจากถ้า x = -zl/n แล้ว x clip = -1 และถ้า x = -zr/n แล้ว x clip = 1 ได้ว่า เมื่อแก้สมการออกมาจะได้ว่า

26 การนิยาม Perspective Projection ( ต่อ ) กล่าวคือ ในทำนองเดียวกันเราก็จะได้ว่า

27 การนิยาม Perspective Projection ( ต่อ ) แล้ว z clip ควรจะมีค่าเท่าไหร่ ? ค่า z clip จะถูกใช้เป็น “ ความลึก ” ของ fragment z clip จะต้องมีคุณสมบัติสองประการ – ถ้า z น้อย z clip ก็ต้องน้อยตามไปด้วย – perspective matrix จะต้องส่งเส้นตรงไปยังเส้นตรง ตัวอย่าง z clip ที่ใช้ไม่ได้ – z clip =z –

28 การนิยาม Perspective Projection ( ต่อ ) z clip ที่ OpenGL ใช้มีรูป เนื่องจาก z clip = -1 ถ้า z = -n และ z clip = 1 ถ้า z = -f จะได้ว่า

29 การนิยาม Perspective Projection ( ต่อ ) เมื่อแก้สมการออกมาแล้วจะได้ว่า กล่าวคือ

30 การนิยาม Perspective Projection ( ต่อ ) กล่าวคือ perspective projection matrix จะต้อง ส่ง ไปยัง

31 Matrix ของ Perspective Projection

32 คำสั่ง OpenGL เกี่ยวกับ Perspective Projection glFrustum(left, right, bottom, top, near, far) – คูณ matrix ปัจจุบันด้วย matrix ของ perspective projection ในหน้าก่อน – ก่อนใช้ควรเรียก glMatrixMode(GL_PROJECTION) glLoadIdentity() ก่อนเพื่อเปลี่ยน mode และเคลียร์ค่า projection matrix เดิม

33 คำสั่ง OpenGL เกี่ยวกับ Perspective Projection ( ต่อ ) gluPerspective(fovy, aspect, near, far) – คูณ matrix ปัจจุบันด้วย perspective projection matrix เช่นเดียวกับ glFrustrum – มีผลเหมือนกับสั่ง glFrustum โดยได้ top = near * tan(fovy / 2) bottom = -top right = aspect * top left = -right

34 คำสั่ง OpenGL เกี่ยวกับ Perspective Projection ( ต่อ ) – fovy ย่อมาจาก field of view Y หมายถึงความกว้าง ของมุมมองตามแนวแกน y ( มีหน่วยเป็นองศา ) – aspect คือ aspect ratio ของหน้าตัดของปีระมิด – ปีระมิดที่ gluPerspective สร้างมีหน้าตาเป็นดัง ข้างล่าง

35 คำสั่ง OpenGL เกี่ยวกับ Perspective Projection ( ต่อ ) สังเกตว่าคำสั่ง glFrustum สามารถสร้างปีระมิด ที่ไม่สมมาตรรอบแกน z ได้ แต่ปีระมิดที่สร้างด้วย gluPerspective จะเป็นปีระ มิดที่สมมาตรรอบแกน z เสมอ

36 RASTERIZATION

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65 HIDDEN SURFACE REMOVAL

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81 DEPTH BUFFER ใน OPENGL

82 เมื่อ Render โดยไม่มี Depth Buffer

83 จริงๆ แล้ว code เป็นอย่างนี้ glColor3d(0.5, 1, 0.5); glBegin(GL_TRIANGLES); glVertex3d(0, 0.5, 0); glVertex3d(-0.5, -0.5, 0); glVertex3d(0.5, -0.5, 0); glEnd(); glColor3d(1, 0.5, 0.5); glBegin(GL_TRIANGLES); glVertex3d(0, -0.75, 1); glVertex3d(0.40, 0, 1); glVertex3d(-0.40, 0.30, -1); glEnd();

84 จริงๆ แล้วภาพควรจะเป็นแบบนี้

85 การใช้ Depth Buffer ใน GLUT เวลาสั่ง glutInitDisplayMode ให้เพิ่ม GLUT_DEPTH ด้วย glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH) เรียก glEnable(GL_DEPTH_TEST) เวลาเรียก glClear ให้เพิ่ม GL_DEPTH_BUFFER_BIT glClear(GL_COLOR_BUFFER_BIT | GLUT_DEPTH_BUFFER_BIT)

86 โค้ดตัวอย่าง int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutInitWindowSize(600, 600); glutCreateWindow("No Depth Buffering"); glutDisplayFunc(display); glEnable(GL_DEPTH_TEST); glutMainLoop(); return 0; }

87 ILLUMINATION

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123


ดาวน์โหลด ppt 418382 สภาพแวดล้อมการทำงาน คอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 4 ประมุข ขันเงิน

งานนำเสนอที่คล้ายกัน


Ads by Google