418341...
description
Transcript of 418341...
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 แตละตวเปนคาคงทในตารางตอไปนConstant Relevant Factor Computed Blend Factor
GL_ZERO source or destination (0, 0, 0, 0)
GL_ONE source or destination (1, 1, 1, 1)
GL_DST_COLOR source (Rd, Gd, Bd, Ad)
GL_SRC_COLOR destination (Rs, Gs, Bs, As)
GL_ONE_MINUS_DST_COLOR source (1, 1, 1, 1)-(Rd, Gd, Bd, Ad)
GL_ONE_MINUS_SRC_COLOR destination (1, 1, 1, 1)-(Rs, Gs, Bs, As)
GL_SRC_ALPHA source or destination (As, As, As, As)
GL_ONE_MINUS_SRC_ALPH A source or destination (1, 1, 1, 1)-(As, As, As, As)
GL_DST_ALPHA source or destination (Ad, Ad, Ad, Ad)
GL_ONE_MINUS_DST_ALPH A source or destination (1, 1, 1, 1)-(Ad, Ad, Ad, Ad)
GL_SRC_ALPHA_SATURATE source (f, f, f, 1); f=min(As, 1-Ad)
กำาหนดเครองหมายทใชในสมการ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 bufferCf คอสของหมอก
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)I I 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>