300 likes | 437 Views
3D Game Programming 2D primitive. Ming-Te Chi Department of Computer Science, National Chengchi University. Outline. Imaging and Raster Primitives( 4rd ch7) Alpha and blending ( 4rd ch6 ) ( 5 th ch3 ). IMAGING AND RASTER PRIMITIVES. Electromagnetic spectrum. Image from wiki.
E N D
3D Game Programming2D primitive Ming-Te Chi Department of Computer Science, National Chengchi University
Outline • Imaging and Raster Primitives(4rd ch7) • Alpha and blending (4rd ch6) (5th ch3)
Electromagnetic spectrum Image from wiki
Three-Color Theory • Human visual system has two types of sensors • Rods: • monochromatic, night vision • Cones: • Color sensitive • Three types of cone • Only three values • (the tristimulusvalues) are sent to the brain
Additive / Subtractive color Y M C Subtractive Color Printer Additive Color LCD, projector
RGB color space Green Black (0, 0, 0) Red Blue rgb color cube in another view
HSV color space • HSV • hue, • Saturation, • Value, HSV UI
Imaging and Raster Primitives • Describe OpenGL’s raster primitives: • bitmaps • image rectangles • Demonstrate how to get OpenGL to read and render pixel rectangles
Pixel-based primitives • Bitmaps • 2D array of bit masks for pixels • update pixel color based on current color • Images • 2D array of pixel color information • complete color information for each pixel • OpenGL does not understand image formats
Per Vertex Poly. Frag FB Raster CPU DL Texture Pixel Pixel Pipeline • Programmable pixel storage and transfer operations glBitmap(), glDrawPixels() Rasterization (including Pixel Zoom) Pixel Storage Modes Pixel-Transfer Operations (and Pixel Map) Per FragmentOperations FrameBuffer CPU glCopyTex*Image(); TextureMemory glReadPixels(), glCopyPixels()
Positioning Image Primitives glRasterPos3f( x, y, z ) • Raster position transformed like geometry • discarded if raster positionis outside of viewport • may need to fine tuneviewport for desiredresults Raster Position
glWindowPos2f(x, y) • Specify the raster position in window coordinates for pixel operations
height yorig width xorig xmove Rendering Bitmaps glBitmap( width, height, xorig, yorig, xmove, ymove, bitmap ) • render bitmap in current colorat • advance raster position by after rendering
Rendering Fonts using Bitmaps • OpenGL uses bitmaps for font rendering • each character is stored in a display list containing a bitmap • window system specific routines to access system fonts • glXUseXFont() • wglUseFontBitmaps()
Rendering Images glDrawPixels( width, height, format, type, pixels ) • render pixels with lower left of image at current raster position • numerous formats and data typesfor specifying storage in memory • best performance by using format and type that matches hardware height width
Reading Pixels glReadPixels( x, y, width, height, format, type, pixels ) • read pixels from specified (x,y) position in framebuffer • pixels automatically converted from framebuffer format into requested format and type • Framebuffer pixel copy glCopyPixels( x, y, width, height, type )
glCopyPixels() glDrawPixels() Frame Buffer Memory glReadpixels()
RasterPosition glPixelZoom(1.0, -1.0); Pixel Zoom glPixelZoom( x, y ) • expand, shrink or reflect pixelsaround current raster position • fractional zoom supported
Storage and Transfer Modes • Storage modes control accessing memory • byte alignment in host memory • extracting a subimage • Transfer modes allow modify pixel values • scale and bias pixel component values • replace colors using pixel maps
Pixel Packing void glPixelstorei(GLenum pname, GLint param); unpack FrameBuffer Memory pack
Alpha • An alpha channel, representing transparency information on a per-pixel basis. • Alpha =0: full transparent • Alpha =1 :a fully opaque pixel.
Writing Model • Use A component of RGBA (or RGBa) color to store opacity • During rendering we can expand our writing model to use RGBA values blend source blending factor destination component source component Color Buffer destination blending factor
Blending • glBlendFunc(Glenum S, Glenum D); • Cf = (Cs*S) + (Cd*D) • glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Ex: Cs={Rs, Gs, Bs, As}, Cd ={Rd, Gd, Bd, Ad}, Cf = (Cs*As) + (Cd*(1-As))
B F C C Compositing foreground color alpha matte background plate composite F compositing equation =0 B
B F C C Compositing composite F compositing equation =1 B
Order Dependency • Is this image correct? • Probably not • Polygons are renderedin the order they passdown the pipeline • Blending functionsare order dependent
class RGBApixmap RGBApixmap pic; pic.readBMPFile(“stand.bmp”); pic.setChromaKey(232, 248, 248); //draw glPixelZoom(1.0, 1.0); glWindowPos2i(picX, picY); pic.blend(); // alternative draw pic.blendtex(picX, picY, 1.0, 1.0);