Upload
joshwa
View
32
Download
0
Embed Size (px)
DESCRIPTION
418341 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 10. ประมุข ขันเงิน. Blending. เวลาเรากำหนดสีด้วย glColor*(…) เราสามารถกำหนด alpha ของสีได้ด้วย Alpha มีไว้ใช้ควบคุมการทำ blending - PowerPoint PPT Presentation
Citation preview
418341 สภาพแวดลอมการทำางานคอมพวเตอรกราฟกสการบรรยายครงท 10
ประมข ขนเงน
Blending
• เวลาเรากำาหนดสดวย glColor*(…) เราสามารถกำาหนด alpha ของสไดดวย
• Alpha มไวใชควบคมการทำา blending• Blending คอการคำานวณสของ pixel ใหมเมอ
fragment ใหมกำาลงจะถกเขยนลงบน framebuffer โดยนำาเอาสของ pixel เดมมารวมคำานวณดวย
Blending (ตอ)
• ทเราเรยนผานมาใชวธการคำานวณสของ pixel สองแบบ– เอาสของ fragment ทมาทหลงเขยนทบลงบน framebuffer– เกบสของ fragment ทใกลตาทสดเอาไว (z-buffer
algorithm)• OpenGL สามารถทำาการคำานวณสไดหลายแบบกวาน
มาก • การคำานวณสหลายๆ แบบ ทไมใชสองแบบขางบนนเรา
กเรยกตขลมวา blending
การใชและเลกใช blending
• เวลาจะทำา blending ตองสงคำาสงglEnable(GL_BLEND);
• เวลาจะเลกทำา blending (กลบไปใช z-buffer หรอการวาดทบ) ใหสงglDisable(GL_BLEND);
Source และ Destination
• เวลาทำา blending จะมขอมลสทเกยวของสองตว– Source คอ ส RGBA ของ fragment อนใหมทกำาลงจะ
ถกเขยนลงบน pixel หนงของ framebuffer– Destination คอ ส RGBA ของ pixel ทอยบน
framebuffer เรยบรอยแลว• เราอาจคดไดวา destination คอสทคำานวณจากส
ของ fragment ทเกดจากรปรางทถกสงวาดกอน source ทงหมด
สมการ Blending
• การคำานวณสใหมจะเปนไปตามสมการขางลางน
โดยท คอสของ source
คอสของ destination เรยกวา “blending factor” ของ source เรยกวา “blending factor” ของ dest’
),,,(colornew adasbdbsgdgsrdrs DASADBSBDGSGDRSR
),,,( ssss ABGR),,,( dddd ABGR
),,,( abgr SSSS
),,,( abgr DDDD
คำาสงกำาหนด Blending Factor
• เราสามารถกำาหนด blending factor ไดดวยคำาสงglBlendFunc(GLenum src, GLenum dest)และคำาสงglBlendFuncSeparate(GLenum srcRGB, GLenum srcAlpha, GLenum destRGB, GLenum destAlpha)
• สองฟงกชนนตางกนตรงท glBlendFuncSeparate สามารถกำาหนด blending factor โดยแยก RGB กบ A ออกจากกนได
คาคงทกำาหนดสำาหรบ Blending Factor
• คาทใสให argument แตละตวเปนคาคงทในตารางตอไปน
กำาหนดเครองหมายทใชในสมการ Blending
• เรายงสามารถเครองหมายทใชรวมสของ source กบ destination เขาดวยกนได มนไมจำาเปนตองเปนเครองหมายบวก
• เครองหมายนสามารถกำาหนดไดดวยคำาสงglBlendEquation(GLenum mode)และglBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
• เชนเคย glBlendEquationSeparate สามารถกำาหนดเครองหมายของ RGB และ A แยกกนได
คาคงทในการกำาหนดเครองหมายในการทำา blending
คาคงท การคำานวณสใหมGL_FUNC_ADD
GL_FUNC_SUBTRACT
GL_FUNC_REVERSE_SUBTRACT
GL_MIN
GL_MAX
GL_LOGIC_OP
DCSC ds
DCSC ds
SCDC sd
),min( DCSC ds
),max( DCSC ds
DCSC ds op
GL_LOGIC_OP
• กรณทใช GL_LOGIC_OP คำาวา “op” จะถกแทนดวยเครองหมายทางตรรกศาสตรซงสามารถกำาหนดไดดวยคำาสง glLogicOp()
ตวอยาง: Matting
• การนำารปสองรปมาซอนกน• รปทอยดานหนาบาง pixel อาจม alpha ไมเปน 0
แสดงวา pixel โปรงแสง ทำาใหเหนรปทอยขางหลง• กรณนให destination blending factor เปน
GL_ONE_MINUS_SRC_ALPHA• และให source blending factor เปน
GL_SRC_ALPHA
ด demo
ตวอยาง: Billboarding
• การสรางวตถคลายสามมตจากภาพ เชน ตนไม เปนตน
• ทำาใหไมตองวางสามเหลยมจำานวนมาก• ใชภาพทบาง pixel ม alpha เทากบ 0• จะวาไปกเหมอนทำา matting ในสามมต• ให destination blending factor เปน
GL_ONE_MINUS_SRC_ALPHA• และ source blending factor เปน GL_SRC_ALPHA
ตวอยาง: Billboarding (ตอ)
ตวอยาง: การรวมรปสามรปเขาดวยกน
• ให destination blending factor เปน GL_ONE• ให source blending factor เปน GL_SRC_ALPHA• วาดรปแตละรปดวย alpha = 1/3
ตวอยาง: ปรบส RGB
• วาดภาพภาพหนงลงบน framebuffer โดยไมตองทำา blending
• หลงจากนนใช destination blending factor เปน GL_SRC_COLOR
• และใช source blending factor เปน GL_ZERO• หลงจากนนวาดสเหลยมสเดยวทบลงบนภาพนน
การวาดวตถโปรงแสงในสามมต• ตองวาดวตถทบแสดงใหหมดกอนโดยใช depth
buffer• หลงจากนนเปด blending• แลววาดวตถโปรงแสง• ขอควรระวง 1: เพอใหไดภาพทถกตอง เราตอง
วาดวตถโปรงแสงจากดานหลงไปดานหนา
การวาดวตถโปรงแสงในสามมต (ตอ)
• ขอควรระวง 2: เวลาวาดวตถโปรงแสงจะตองทำาการปองกนไมใหวตถโปรงแสงไปเปลยนแปลง depth buffer
• เราสามารถทำาให depth buffer ไมถกเขยนทบไดดวยการสงglDepthMask(GL_FALSE);
• และทำาใหมนถกเขยนทบไดใหมอกครง (เพอวาดรปวตถทบแสงใหม) ดวยคำาสงglDepthMask(GL_TRUE);
ด demo
ดโคดglPushMatrix ();
glTranslatef (-0.15, -0.15, solidZ);glMaterialfv(GL_FRONT, GL_EMISSION, mat_zero);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_solid);glCallList (sphereList);
glPopMatrix ();
glPushMatrix ();glTranslatef (0.15, 0.15, transparentZ);glRotatef (15.0, 1.0, 1.0, 0.0);glRotatef (30.0, 0.0, 1.0, 0.0);glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_transparent);glEnable (GL_BLEND);glBlendFunc (GL_SRC_ALPHA, GL_ONE);glDepthMask (GL_FALSE);glCallList (cubeList);glDepthMask (GL_TRUE);glDisable (GL_BLEND);
glPopMatrix ();
หมอก• หมอกใน OpenGL ทำาให pixel มสเปลยนไปตาม
ระยะหางจากตา• ทำาใหเกด effect เหมอนหมอกจรงๆ ได• เวลาใชหมอกตองสง
glEnable(GL_FOG);เวลาเลอกใชสงglDisable(GL_FOG);
การคำานวณหมอก• การคำานวณหมอกตองม depth buffer เพอวดระยะหาง
จากตา ดงนนตองม GLUT_DEPTH ใน glutInitDisplay• การคำานวณหมอกจะทำาหลงจาก render รปขนตอนอน
ทงหมด• เวลาคำานวณสของ pixel เมอมหมอกจะใชสตรตอไปน
C คอสของ pixel หลงจากคำานวณแลวf คอ fog factor ทจะบอกวธคำานวณในสไลดตอไปCi คอสของ pixel ใน frame buffer
Cf คอสของหมอก
fi CfCfC )1(
Fog Factor
• เราสามารถกำาหนดวธการคำานวณ fog factor ไดโดยคำาสงglFogi(GL_FOG_MODE, GLenum mode)โดย mode มคาไดสามคาดงตอไปน
– GL_EXP
– GL_EXP2
– GL_LINEAR
)( zdensityef
2)( zdensityef
startendzendf
การเซตหมอกคาตางๆ• เราสามารถเซตคาสของหมอกไดโดยคำาสง
glFogfv(GL_FOG_COLOR, Glfloat *color)เชนfloat fog_color[4] = {0.5f, 0.5f, 0.5f, 1.0f};glFogfv(GL_FOG_COLOR, fog_color);
การเซตหมอกคาตางๆ (ตอ)
• เราสามารถเซตคา density ของหมอก (ใชในการคำานวณกรณ GL_EXP และ GL_EXP2) ไดดวยคำาสงglFogf(GL_FOG_DENSITY, GLfloat density)
• เราสามารถเซตคา start และ end (ใชในการคำานวณกรณ GL_LINEAR) ไดดวยคำาสงglFogf(GL_FOG_START, GLfloat start) และglFogf(GL_FOG_END, GLfloat end)ตามลำาดบ
ด demo
การชกตวอยางและการสรางคน
ภาพดจตอล• ประกอบดวย พกเซล เรยงกนเปนตาราง“ ”
รปจาก http://en.wikipedia.org/wiki/Pixel
พกเซลคออะไร?
• พกเซลไมใช– กลองสเหลยม– จดวงกลม– เสนขด
รปจาก http://en.wikipedia.org/wiki/Pixel
พกเซลคออะไร? (ตอ)
• มนคอตวเลขสามตวแทนคา RGB ณ จดจดหนงบนระนาบภาพ
• “จด ทวาน”– ไมมขนาด ความกวาง ความยาว– ไมมมต– มองไมเหน– มแต ตำาแหนง“ ”
ภาพคออะไร?
• ฟงกชนจากระนาบสองมต ไปยงความเขมแสง
• รปภาพเปนฟงกชนตอเนอง• สามารถมองวาแตละจดมความสงของมน
R2
ภาพดจตอล• สรางโดยการหาคาของฟงกชนภาพ ณ จดทเรยง
กนเปนตารางสเหลยม• กระบวนการทำาเชนนเรยกวา การชกตวอยาง
(sampling)
ภาพดจตอล (ตอ)
การสรางคน• เมอไดภาพดจตอล ซงเปนตวอยางหลายๆ
ตวอยางทเราชกมาจากภาพ • เราตองทำาการสรางคน (reconstruction) เพอให
ไดฟงกชนตอเนองสองมตอนใหม
การสรางคน (ตอ)
• เราตองการใหภาพทเราสรางคนเหมอนกบภาพตนแบบทสดเทาทจะเปนไปได
• ปกตแลวอปกรณแสดงผลจะสรางภาพคนใหเราโดยอตโนมต
• สวนมากดวยการวาดสของตวอยางทชกมาเปนสเหลยม
เอเลยสซง• แตการสรางคนดวยการวาดเปนสเหลยมนเอง
ทำาใหเกดปญหาตามมาหลายอยาง เรยกรวมๆ วา เอเลยสซง (aliasing)
• ทำาใหภาพออกมาดไมด จะดไมดมากโดยเฉพาะเวลาทำาภาพเคลอนไหว
เอเลยสซง (ตอ)
• ขอบเปนหยกๆ
เอเลยสซง (ตอ)
• รายละเอยดหายหรอถกขยายใหญเกนไป
เอเลยสซง (ตอ)
• จตรกรรมฝาผนงดไมสวย
การแปลงฟเรยร
โดเมนความถ• ฟงกชนเกอบทกฟงกชนสามารถเขยนอยในรปผล
บวกของฟงกชนไซนหรอโคไซนได• ถาเขยนในรปแบบน เราเรยกวามนอยใน โดเมน
ความถ (frequency domain)• ถาเขยนแบบปกตจะเรยกวาอยใน โดเมนปรภม
(spatial domain)• นกถงเสยง ซงเปนฟงกชนการเคลอนทของลำาโพง– เราสามารถเอาเสยงไปใส spectrum analyzer– มนจะบอกวาเสยงความถเทานมความดงเทาไหร
โดเมนความถ (ตอ)
• ฟงกชนทเปลยนแปลงเรว มความถสง• ฟงกชนทเปลยนแปลงชา มความถตำา
โดเมนความถ (ตอ)
• ฟงกชนในโดเมนปรภม
ความถตำา ความถสง
โดเมนความถ (ตอ)
• เมออยในโดเมนความถ
ขอบเขตแคบ ขอบเขตกวาง
การแปลงฟเรยร (ตอ)
• เรามฟงกชน ในโดเมนปรภม• การแปลงฟเรยรทำาใหเราไดฟงกชน ใน
โดเมนความถ• ความสมพนธระหวางทงสองฟงกชน:
f (x)
F (! )
F (! ) =Z 1
¡ 1f (x)e¡ i2¼! xdx
f (x) =Z 1
¡ 1F (! )ei2¼! xd!
การแปลงฟเรยร (ตอ)
• เราใชสญลกษณ แทนการแปลงฟเรยรของ
• การแปลงฟเรยรเปนฟงกชนเชงเสน
F f f (x)g f (x)
F f f (x)g= F (! ) =Z 1
¡ 1f (x)e¡ i2¼! xdx
F f f (x) + g(x)g= F f f (x)g+ F fg(x)gF fcf (x)g= cF f f (x)g
การคณและการแปลงฟเรยร• ถาเราทำาการแปลงฟเรยรของผลคณของฟงกชน
สองฟงกชน• เราจะไดคอนโวลชนของการแปลงฟเรยรของ
ฟงกชนสองฟงกชนนน
• ในทำานองเดยวกน
F f f (x)g(x)g= F (! ) G(! )
F f f (x) g(x)g= F (! )G(! )
คอนโวลชน• มนยามดงน
• มความหมายเหมอนกบการ เลอน ไปคณ“ ”กบ ทละคาของ แลวเอาผลลพธทงหมดมาบวกกน
f (x) g(x) = (f g)(x) =Z 1
¡ 1f (t)g(x ¡ t)dt
f (x)g(x)x
คอนโวลชน (ตอ)
ทฤษฎการชกตวอยาง
ดแรกเดลตาฟงกชน• สญลกษณ • ฟงกชนททำาคอนโวลชนกบอะไรกไดคาของ
ฟงกชนนน
• ถาเลอน แลว กจะเลอนตามไปดวย
±(x)
f (x) ±(x) = f (x)
±(x) f (x)
f (x) ±(x ¡ t) = f (x ¡ t)
ดแรกเดลตาฟงกชน (ตอ)
• หนาตาของมน
• หาคาจรงไมได แตรวา integrate แลวได 1Z 1
¡ 1±(x) dx = 1
การชกตวอยาง• คอการเอาฟงกชนภาพมาคณกบดเรกเดลตา
ฟงกชนทวางไวหางเปนระยะเทาๆ กน
ชาฮฟงกชน• ดเรกเดลตาฟงกชนทเอามาเรยงหางกนเปนระยะ
เทาๆ กนมชอเรยกวา ชาฮฟงกชน (Shah) หรอ หวของดแรก (Dirac comb)
• สญลกษณ
• โดยคา คอ คาบ ของฟงกชน“ ”
I I IT (x) = T1X
k=¡ 1±(x ¡ kT)
I I IT (x)
T
ชาฮฟงกชน (ตอ)
ชาฮฟงกชน (ตอ)
• เมอนำาชาฮฟงกชนทมคาบ ไปทำาการแปลงฟเรยร จะไดชาฮฟงกชนทมคาบ
T1=T
F f II IT (x)g= 1T
1X
k=¡ 1±(! ¡ k=T) = III1=T (! )
การชกตวอยาง (อกครง)
• ดงนนการชกตวอยางทกๆ คาบ สามารถเขยนเปนประโยคสญลกษณไดวา
• การแปลงฟเรยรของฟงกชนขางบนคอ
T
f (x)II IT (x)
F f f (x)II IT (x)g= F (! ) I I I1=T (! )
การชกตวอยาง (อกครง)
• เราทำาการคณ กบ ในโดเมนปรภม• เราจะลองเขยนฟงกชนและผลลพธทเกดขนกบ
มนของการคณในโดเมนความถด• ยำาวาเราไมไดตองแปลงฟงกชนเหลานใหอยใน
โดเมนความถจรงๆ ฟงกชนทกฟงกชนเขยนอยในโดเมนความถไดอยแลว เราแคดเฉยๆวาถาเขยนอยในโดเมนความถแลวเกดอะไรขน
f (x) I I IT (x)
การชกตวอยาง (ตอ)
• สมมตวาฟงกชน ในโดเมนความถคอ• และให มหนาตาเชนน
• การคณ กบ ในโดเมนปรภมมคาเทากบการเอา กบ มาทำาคอนโวลชนกน
F (! )f (x)
F (! )
f (x) I I IT (x)
F (! ) I I I1=T (! )
การชกตวอยาง (ตอ)
• เมอเอามนมาทำาคอนโวลชนกบ จะไดI I I1=T (! )
การชกตวอยาง (ตอ)
• แลวตอนนเราไดอะไรบาง• เรารวาหลงจากการชกตวอยางแลว เราจะไดฟงกชน
ทมหนาตาคลายๆ รปขางลางในโดเมนปรภม
• กลาวคอมนเปนดแรกเดลตาฟงกชนความสงตำาตางกนเรยงกนเปนชวงๆ
f (x)I I IT (x)
การชกตวอยาง (ตอ)
• แตถาเราเขยนฟงกชนดแรกเดลตาสงๆ ตำาในโดเมนความถ เราจะได
ซงมลกษณะเหมอนเอาฟงกชนตนฉบบ ในโดเมนความถมาถายเอกสารแลวแปะเปนชวงๆ ระยะหางเทากน
F (! )
การชกตวอยาง (ตอ)
• ขอสงเกต:– ดแรกเดลตาฟงกชนแตละตวในโดเมนปรภมจะหางกน
เปนระยะ– แตจดศนยกลางของฟงกชน แตละตวในโดเมน
ความถจะหางกนเปนระยะ – ยงเราสมถขนเทาไหร กอปปของฟงกชน กจะ
หางขนไปเรอยๆ
TF (! )
1=TF (! )
การชกตวอยาง (ตอ)
• เรากลาววาฟงกชน เปนฟงกชนความถจำากด (band limit) ถาเราเขยนมนอยในโดเมนความถ แลวมนจะมคาเปน ถา มคาสงถงระดบหนง
• กลาวคอม (ยอมาจากคำาวา band)ททำาให ถา
f (x)F (! ) !
B F (! ) = 0
F (! )
j! j > B
B¡ B
การชกตวอยาง (ตอ)
• ถา มความถจำากด และถา มคานอยพอ กอปป ของ จะอยหางกนและไมซอนทบกน
• แตถา มคามากเกนไป (เราชกตวอยางไมถพอ) กอปป ของ อาจซอนทบกนได
Tf (x) F (! )
T F (! )
การชกตวอยาง (ตอ)
• แลวตองเลอก ใหมคาเทาไหร ถงจะไดกอปป ทไมซอนทบกน?
• คำาตอบคอตองเลอกให• นนคอตองสมใหถกวาความถสงสดของ
สองเทา• ความถนเรยกวา ความถไนควสท (Nyquist
Frequency)
T1=T > 2B
f (x)
การชกตวอยาง (ตอ)
B B
1=T
การสรางกลบ• ในการสรางกลบ เราตองการเอาฟงกชนทชก
ตวอยางมาแลวมาทำาอะไรสกอยางใหไดฟงกชนทคลายฟงกชนตนฉบบมากทสด
• สมมตวาฟงกชนตนฉบบมความถจำากด และเราตวอยางมนทความถสงกวาความถไนควสท ปญหาของเราคอ
ทำาอยางไรจะได จาก ?
การสรางกลบ (ตอ)
• ตองลบสวนเกนทอยรอบนอกออกไป• คณดวย กลอง“ ” ในโดเมนความถ
£
ฟงกชนกลอง• สญลกษณ¦ T (! )
¦ T (! ) =(
1=(2T) j! j < T0 otherwise
T¡ T
1=(2T)
ซงคฟงกชน• ฟงกชนกลองทวามานนอยในโดเมนความถ ถา
ทำาใหอยในโดเมนปรภมแลวจะมหนาตาเปนอยางไร?
• โดยท
F ¡ 1f ¦ T (x)g= sinc(Tx)
sinc(x) =(
1; x = 0sinx=x; otherwise
การสรางกลบ (ตอ)
การสรางกลบ (ตอ)
• เขยนการสรางกลบจากการชกตวอยางเปนประโยคสญลกษณในโดเมนความถไดวา
• เมอเขยนอยในโดเมนปรภม จะไดเปน
• ดงนน การสรางกลบคอการเอาฟงกชนทชกตวอยางมาแลวมาทำาคอนโวลชนกบซงคฟงกชน
(F (! ) I I I 1=T (! ))¦ T (! )
(f (x)I I I T (x)) sinc(Tx)
การสรางกลบ (ตอ)
• ถา มความถจำากดและเราชกตวอยางดวยความถสงกวาความถไนควสทของมน เราจะสามารถสรางฟงกชน กลบคนได เนองจาก
ดงนน
f (x)f (x)
(F (! ) I I I 1=T (! ))¦ T (! ) = F (! )
(f (x)I I I T (x)) sinc(Tx) = f (x)
การสรางกลบ (ตอ)
• แตถาเราชกตวอยางดวยความถตำากวาความถไนควสท กอปป ของ จะซอนทบกน และเมอคณดวยฟงกชนกลองจะไดฟงกชนอกอนหนงทไมเหมอน ทกประการ
F (! )
F (! )
การสรางกลบ (ตอ)
• ความไมเหมอนกนทกประการทเกดจากการชกตวอยางดวยความถไมมากพอนเองทเปนสาเหตของเอเลยสซงทงหมด
ฟงกชนตนแบบ ฟงกชนทสรางคนทมเอเลยสซง
การบรรเทาเอเลยสซง
เอเลยสซง• เอเลยสซงเวลาทำาการสรางภาพสามมตเกดขน
จาก– ฟงกชนภาพเปนฟงกชนความถไมจำากด เนองจากม
ความไมตอเนองของส ณ ขอบเขตของวตถและเงา– จตรกรรมฝาผนงมความไมตอเนอง
เอเลยสซง (ตอ)
• เอเลยสซงทเกดจากขอบเขตของวตถ
เอเลยสซง (ตอ)
• เอเลยสซงทเกดจากความไมตอเนองของจตรกรรมฝาผนง
เอเลยสซง (ตอ)
• ปกตแลวการบรรเทาเอเลยสซงจากความไมตอเนองของรปทรงและเงาทำาไดยาก– ความไมตอเนองของรปทรงและเงาเปนฟงกชนทม
ความถไมจำากด– เราไมสามารถลบสวนความถไมจำากดนออกไปได
• แตการบรรเทาเอเลยสซงจากความไมตอเนองของจตรกรรมฝาผนงทำาไดงายกวา– เพราะเราสามารถดดแปลงรปเพอลบสวนทมความถสง
ออกไปไดกอนนำามนมาใชคำานวณส
เทคนคการบรรเทาเอเลยสซงทวๆ ไป• เพมความถการชกตวอยาง (วาดใหละเอยดขน)– ใชไดผลด แตไมคอยคมคาเพราะตองเสยวาดเพมขน
• ชกตวอยางแบบสมๆ– แทนทจะชกตวอยางแบบเปนตารางมระเบยบ กชกให
มนหลดๆ ออกไปจากตำาแหนงทมนควรจะเปนสกเลกนอย แบบสมๆ
– ทำาใหภาพมคลนรบกวนเยอะขน แตเอเลยสซงกถกเปลยนเปนคลนรบกวนดวย ทำาใหภาพดสบายตาขน
เทคนคการบรรเทาเอเลยสซงทวๆ ไป (ตอ)
• เพมความถการชกตวอยางโดยอาศยการเรยนรจากภาพ– ถาภาพสวนไหนมความเปลยนแปลงสมาก กใหสมมากขน
• สวนขอบของวตถ• จดสองจดทอยขางกนทสตางกนมากๆ
– ลดการคำานวณลงไดพอสมควร แตกมขอบกพรอง• จดสองจดทอยตดกนบางค อาจจะมสตางกนมาก แตความจรงไม
ตองสมเพมกได เชน จดสองจดขางกนทสตางกนเนองจากจตรกรรมฝาผนง
• บรเวณทตองการความถการสมสงอาจจะไมถกสมความถสงขนกได
การชกตวอยางแบบ มวในบลอก“ ”• ปกตเราจะชกตวอยางโดยในแตละพกเซลเราจะยง
รงส ไปทกลางพกเซลนน“ ”
• แตมนทำาใหเกดเอเลยสซงไดงาย
การชกตวอยางแบบ มวใน“บลอก ” (ตอ)
• เราสามารถชกตวอยางแบบมวๆ เพอเปลยนเอเลยสซงเปนคลนรบกวน
• แตแบบนบางพกเซลจะไมถกชกตวอยางออกมาเลย
การชกตวอยางแบบ มวใน“บลอก ” (ตอ)
• เราสามารถรวมสองวธขางตนเขาดวยกน โดยในแตละพกเซลเราจะชกตวอยางมาหนงตว แตตำาแหนงของตวอยางนนจะมวเอา
• วธนเปนวธชกตวอยางทไดผลดมาก
การชกตวอยางแบบ มวใน“บลอก ” (ตอ)
• ภาพในอดมคต คำานวณดวยการชกตวอยาง 256 ตวอยางในหนงพกเซล
การชกตวอยางแบบ มวใน“บลอก ” (ตอ)
• 1 ตวอยางตอหนงพกเซล
การชกตวอยางแบบ มวใน“บลอก ” (ตอ)
• มวในบลอก หนงตวอยางตอหนงพกเซล
การชกตวอยางแบบ มวใน“บลอก ” (ตอ)
• มวในบลอก 4 ตวอยางตอหนงพกเซล
ฟลเตอรการสรางกลบ
การสรางกลบ (อกรอบ)
• การสรางภาพกลบคอการนำาเอาฟงกชนทชกตวอยางออกมาแลวมาทำาคอนโวลชนกบฟงกชนตวหนง
• ฟงกชนตวนเราจะเรยกวา เคอรเนล (kernel) หรอ ฟลเตอร (filter)
• เรารวาฟงกชนซงคเปนฟงกชนการสรางกลบในอดมคต– มนสามารถสรางฟงกชนเดมออกมาไดถาเราชกตวอยาง
ดวยความถสงกวาความถไนควสท
การสรางกลบ (ตอ)• แตจรงๆ เวลาจะแสดงผล เราไมไดสรางฟงกชนตอเนอง
ตนฉบบกลบแตอยางไร• เวลาเราสงจอภาพใหแสดงภาพ หรอจะเซฟภาพลงในไฟล
เราตองสงตวอยางของฟงกชนไปใหจอภาพหรอดสกอยด• ตวอยางทจะสงใหจอภาพหรอดสก เปนตวอยางทจดของ
มนเรยงกนเปนระเบยบ หนงตวอยางตอหนงพกเซล• แตตอนเราชกตวอยาง เราอาจไมไดชกตวอยางแบบนน
(ถาชกแบบนนกแลวไป ไมตองทำาอะไร)• บางท เราอาจชกตวอยางมากกวาหนงตวอยางในหนง
พกเซล
การสรางกลบ (ตอ)
เราอาจจะชกตวอยางแบบน แตตวอยางทตองสงใหจอภาพเปนแบบน
การสรางกลบ (ตอ)
• สงทเราตองทำาคอตองหาคาของตวอยางทชกมาอยางเปนระเบยบ หนงตวอยางตอหนงพกเซล จากตวอยางทเราชกมาจรงๆ ซงอาจไมคอยเปนระเบยบนก หรออาจมมากกวาหนงตวตอหนงพกเซล
การสรางกลบ (ตอ)
• การหาคาทวานเราจะนำาเอาตวอยางทอยใกลๆ จดทเราตองการหาคาฟงกชนมาถวงนำาหนกแลวเฉลย
โดยท คอฟลเตอร คอคาความเขมแสงทไดจากการยงเรย คอคาความเขมแสงทเราตองการหา
I (x;y) =P
i f (x ¡ xi ;y ¡ yi )L(xi ;yi )Pi f (x ¡ xi ;y ¡ yi )
f (¢;¢)L(¢;¢)I (¢;¢)
การสรางกลบ (ตอ)
ฟลเตอร• เราใชซงคฟงกชนเปนฟลเตอรไมได– มนมขอบเขตกวางเกนไป หมายความวาจะตองใช
ตวอยางทกตวทสมมา– นอกจากนมนยงอาจทำาใหเกนคลนกระเพอม (ringing)
ในภาพได ถาตวอยางทสมมาความถตำากวาความถไนควสท
ฟลเตอร (ตอ)
• ฟลเตอรทคนนยมใช ไดแก– กลอง– สามเหลยม– เกาส– มทเชล– ซงคแบบถกจำากดขอบเขต (แลงคซอส
กลอง
เอเลยสซงเตมไปหมด
สามเหลยม
เรยบและเบลอ
เกาส
เบลอมากๆ
มทเชล
คมกวาเกาส
ซงคแบบถกจำากดขอบเขต
ANTI-ALISING ใน OPENGL
Antialiasing ใน OpenGL
• การทำา antialiasing ของจดและเสน• การทำา multisampling
การทำา antialiasing ของจดและเสน• ถาตองการทำา antialiasing ของจดใหสง
glEnable(GL_POINT_SMOOTH);• ถาตองการทำา antialiasing ของเสนใหสง
glEnable(GL_LINE_SMOOTH);• เมอถาจะเลกใชใหสง glDisable(…) ตามสมควร
การทำา antialiasing ของจดและเสน (ตอ)
• การทำา antialiasing ของจดและเสนใน OpenGL เปนการกำาหนดคา alpha ของ fragment ทประกอบขนเปนจดหรอเสนนน
• คา alpha ถกคำานวณดวย unweighted area sampling
• ดงนนถาจะทำา antialiasing จะตอง– สง glEnable(GL_BLENDING);– และสง glBlendFunc(…) ใหเหมาะสม
การทำา antialiasing ของจดและเสน (ตอ)
• แลวจะสง glBlendFunc อยางไร?• ปกตแลวใช
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
• แตกสามารถใช glBlendFunc(GL_SRC_ALPHA, GL_ONE)เพอทำาใหจดตดสวางขน
การทำา antialiasing ของจดและเสน (ตอ)
• ขอควรระวง– เนองจากเราใช blending ลำาดบการวาดเสนและจดจง
มผลตอรป– ถามวตถทบแสงอยในฉากดวย • ตองวาดวตถทบแสงใหหมดกอน แลวคอยวาดเสนและจด • และจะตองมการทำาให depth buffer เปนแบบ readonly
ดวย• ดรายละเอยดในการบรรยายครงท 16
ด demo
การทำา multisampling
• สามารถใชไดกบรปทรงใดๆ กได• แตเสยเวลาการทำานานมาก• หลกการคอสราง fragment เพมขน 4 เทา• แลวทำาสรางภาพทจะนำาไปแสดงโดยใหสของ 1
fragment ของ primitive ทจะเอาไปแสดง เทากบคาเฉลยของสของ 4 fragment (สเหลยมกวาง 2 pixel ยาว 2 pixel) ของทสรางขนมา
ขนตอน• เพม GLUT_MULTISAMPLE ลงใน
glutInitDisplayMode ดงน:
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH |
GLUT_MULTISAMPLE);
• เวลาใชใหสง glEnable(GL_MULTISAMPLING);
ด demo
ปญหาการ compile บน Windows
• Multisampling เปนความสามารถใหมทเพมเขามาใน OpenGL เวอรชนหลงๆ
• แต OpenGL ทมากบ Windows อยทเวอรชน 1.1 ซงมอายประมาณ 10 ปแลว
• ดงนนถา compile โคดตวอยางตามธรรมดาแลวจะพบวามนไมรจกคา GL_MULTISAMPLE
GLEW
• OpenGL Extension Wrangler (GLEW) เปนไลบรารทใชในการเขาถงความสามารถของ OpenGL อนใหมๆ ทไมมในเวอรชนเกา หรอทมเฉพาะในฮารดแวรบางตว
• สามารถ download มนไดท http://glew.sourceforge.net
• ให download Win32 binary ของมนมา แลวแตก zip ไฟล
• นำา glew32.dll ไปใสไวท c:\windows\system32• เสรจแลวนำา glew.h และ glew32.lib ไปใสไวใน
solution ของโปรแกรมของเรา เชนเดยวกบ GLUT
GLEW (ตอ)
• เวลาใชงาน GLEW ให include ไฟล glew.h กอน glut.h เชน
#include <windows.h>#include <GL/glew.h>#include <GL/glut.h>