【文档说明】计算机图形学computer-graphics课件17.ppt,共(38)页,1.123 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-77497.html
以下为本文档部分文字说明:
BuffersSoftwareCollege,ShandongUniversityInstructor:ZhouYuanfengE-mail:yuanfeng.zhou@gmail.comReview2•Rasterization
:Polygonscanconversionalgorithm;•Hiddensurfaceremoval•Aliasing3Objectives•IntroduceadditionalOpenGLbuffers•Learntoreadandwritebuffers•
Learntouseblending4BufferDefineabufferbyitsspatialresolution(nxm)anditsdepth(orprecision)k,thenumberofbit
s/pixelpixel5OpenGLFrameBuffer6OpenGLBuffers•Colorbufferscanbedisplayed-Front-Back-Auxiliary-Overlay•Depth•Accumulation-Highresolutionbuffer•Stenci
l-Holdsmasks7WritinginBuffers•Conceptually,wecanconsiderallofmemoryasalargetwo-dimensionalarrayofpix
els•Wereadandwriterectangularblockofpixels-Bitblocktransfer(bitblt)operations•Theframebufferispartofthisme
mory(Doublebuffer)•LeftandrightbuffersforStereroimagesframebuffer(destination)writingintoframebuffersourcememoryBit-blockwriting•Asca
n-linewritingwhilepolygonfilling•Characterdisplay•Clearallpixelbuffer8BitBltcopy•BOOLBitBlt(intx,inty,intnWidth,i
ntnHeight,CDC*pSrcDC,intxSrc,intySrc,DWORDdwRop);//SRCCOPY•Copiesabitmapfromthesourcedevicecontexttothiscurrentdevicecontext.(Froma
BitmapinmemorytocurrentCDC)910WritingModelReaddestinationpixelbeforewritingsourceSource:sDestination:d’d’=f(s,d)11BitWritingModes(16m
odes)•Sourceanddestinationbitsarecombinedbitwise•16possiblefunctions(onepercolumnintable)replaceORXORMode3&6Mode6Mode31213XORmode•RecallfromChapte
r3thatwecanuseXORbyenablinglogicoperationsandselectingtheXORwritemodeS(SM)M•XORisespeciallyuseful
forswappingblocksofmemorysuchasmenusthatarestoredoffscreenIfSrepresentsscreenandMrepresentsamenuthesequenceSS
MMSMSSMswapstheSandM14ThePixelPipeline•OpenGLhasaseparatepipelineforpixels-Writingpixelsinvolves•Movingpix
elsfromprocessormemorytotheframebuffer•Formatconversions•Mapping,Lookups,Tests-Readingpixels•Formatconversi
on15RasterPosition•OpenGLmaintainsarasterpositionaspartofthestate•SetbyglRasterPos*()(worldcoord)-glRasterPos3f(x,y,z);•Thera
sterpositionisageometricentity-Passesthroughgeometricpipeline-Eventuallyyieldsa2Dpositioninscreencoordinates-Thispositio
nintheframebufferiswherethenextrasterprimitiveisdrawn16BufferSelection•OpenGLcandrawintoorreadfromanyo
fthecolorbuffers(front,back,auxiliary)•Defaulttothebackbuffer•ChangewithglDrawBufferandglReadBuffer•Notethatformatofthepixelsintheframebufferisdiffer
entfromthatofprocessormemoryandthesetwotypesofmemoryresideindifferentplaces-Needpackingandunpacking-DrawingandreadingcanbeslowOpenGLcodeLib3d
sMesh*mesh=f3ds->meshes[i];//由3ds文件中读取出需要数据glGenBuffers(1,&m_Vertex[i]);glGenBuffers(1,&m_Index[i]);glBindBuffer(GL_ARRAY_B
UFFER,m_Vertex[i]);glBufferData(GL_ARRAY_BUFFER,(sizeof(float)*9*mesh->nfaces)+(sizeof(float)*3*mesh->nvertices),TotleV,GL_STATIC_DRAW);glVert
exPointer(3,GL_FLOAT,0,BUFFER_OFFSET(0));glNormalPointer(GL_FLOAT,0,BUFFER_OFFSET(V_size));glBindBuffer(GL_ARRAY_B
UFFER,m_Vertex[0]);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,m_Index[0]);glDrawElements(GL_TRIANGLES,DrawCount[0],GL_U
NSIGNED_SHORT,NULL);1718Bitmaps•OpenGLtreats1-bitpixels(bitmaps)differentlyfrommulti-bitpixels(pixelmaps)•Bi
tmapsaremasksthatdetermineifthecorrespondingpixelintheframebufferisdrawnwiththepresentrastercolor-0colorunchanged-1colorchangedbasedonwr
itingmode•Bitmapsareusefulforrastertextcursor(XOR)-GLUTfont:GLUT_BIT_MAP_8_BY_1319RasterColor•SameasdrawingcolorsetbyglColor*()•Currentrastercolori
sfixedbylastcalltoglRasterPos*()•Geometrydrawninblue•OnesinbitmapuseadrawingcolorofredglColor3f(1.0,0
.0,0.0);glRasterPos3f(x,y,z);glColor3f(0.0,0.0,1.0);glBitmap(…….glBegin(GL_LINES);glVertex3f(…..)20Drawing
BitmapsglBitmap(width,height,x0,y0,xi,yi,bitmap)firstrasterpositionsecondrasterpositionoffsetfromrasterpositionincrement
sinrasterpositionafterbitmapdrawnTextdefinitioninOpenGL•Rastertextisfasterthanvectortext;•Times,Courier,ComputerModern;•Size:10pt
,24pt(1inch=72pt)21TextinOpenGL•8x13textisdefinedinGLUT_BITMAP_8_BY_13;•Thesizeoftextisrelatedwithresolutionofs
creen;•Define8x13text:•GLubytemy_font[128][13];•base=glGenLists(128);•for(i=0;i<128;i++){•glNewList(base+i,GL_COMPILE);•glBitMap(8,13,0.0,0.0,10.0
,0.0,my_font[i]);•glEndList();•}2223Example:CheckerBoardGLubytewb[2]={0x00,0xFF};GLubytecheck[512];inti,j;for(i=0;i<64;i++
)for(j=0;j<8,j++)check[i*8+j]=wb[(i/8+j)%2];glBitmap(64,64,0.0,0.0,0.0,0.0,check);24ImageFormats•Weoftenworkwithimagesinastandardformat(
JPEG,TIFF,GIF,PS,EPS)•Howdoweread/writesuchimageswithOpenGL?•NosupportinOpenGL-OpenGLknowsnothingofimageformats-Somecodeavai
lableonWeb-Canwritereaders/writersforsomesimpleformatsinOpenGLPS&EPS•PostScript(PS)imageforcontrollingprinterRGB
imageconvertsto7bitsASCII;soPSimagecanbeidentifiedbyprinter,butitislarge.•EncapsulatedPostScript(EPS)issimilartoPSimage.25GIFimage•CompuServeIncor
porated(1987)GraphicsInterchangeFormatColorIndexImagelow-resolutionsmallanimations(imageslices)26TIFF•Tagged(标签)ImageFileFormat•Highquality•First
forscannedcopy•Losslesscompression•Cansavevectorboundaryofimage27JPEG•lossycompression•Highcompressionratio•Discretecosinetransform28Sizec
omparison•Image1200x1200•TIFF:1440198bytes(about1.37m)•JPEG:80109and38962bytes(about78kb)•EPS:abouttwiceofTIFF•CompressedTIFF:abouthalfsize•
ZIPcompression:TIFFandEPSaresimilar29TIFFJPEG-18JPEG-3730DisplayingaPPMImage(Linux)•PPMisaverysimpleformat(24bits)•Eachimagefileconsistsofahe
aderfollowedbyallthepixeldata•HeaderP3#comment1#comment2.#commentnrowscolumnsmaxvaluepixels31Readingt
heHeaderFILE*fd;intk,nm;charc;inti;charb[100];floats;intred,green,blue;printf("enterfilename\n");scanf("%s",b);fd=fopen(b,"r");fscanf
(fd,"%[^\n]",b);if(b[0]!='P'||b[1]!='3'){printf("%sisnotaPPMfile!\n",b);exit(0);}printf("%sisaPPMfile\n",b);che
ckfor“P3”infirstline32ReadingtheHeader(cont)fscanf(fd,"%c",&c);while(c=='#'){fscanf(fd,"%[^\n]",b);printf("%s\n",b)
;fscanf(fd,"%c",&c);}ungetc(c,fd);skipovercommentsbylookingfor#infirstcolumn33ReadingtheDatafscanf(fd,"%d%d%d",&n,&m,&k);printf("%dro
ws%dcolumnsmaxvalue=%d\n",n,m,k);nm=n*m;image=malloc(3*sizeof(GLuint)*nm);s=255./k;for(i=0;i<nm;i++){fscanf(fd,"%d%d%d",&red,&green,&blue);image[3
*nm-3*i-3]=red;image[3*nm-3*i-2]=green;image[3*nm-3*i-1]=blue;}scalefactor34PixelMaps•OpenGLworkswithrectangulararraysofpixelscalledpixel
mapsorimages•Pixelsareinonebyte(8bit)chunks-Luminance(grayscale)images1byte/pixel-RGB3bytes/pixel•Threefunctions-Drawpixels:processormemorytoframeb
uffer-Readpixels:framebuffertoprocessormemory-Copypixels:framebuffertoframebufferPixelformat•Imageinmemory:RGB,RGBA,Index•Format:intorfloat•glPix
elMap3536OpenGLPixelFunctionsglReadPixels(x,y,width,height,format,type,myimage)startpixelinframebuffersizety
peofimagetypeofpixelspointertoprocessormemoryGLubytemyimage[512][512][3];glReadPixels(0,0,512,512,GL_RGB,GL_UNSIGNED_BYTE,myi
mage);glDrawPixels(width,height,format,type,myimage)startsatrasterposition37ScalingtheImageDataWecanscaleth
eimageinthepipelineglPixelTransferf(GL_RED_SCALE,s);glPixelTransferf(GL_GREEN_SCALE,s);glPixelTransferf(GL_BLUE_SCALE,s);Wemayhavetoswapbyte
swhenwegofromprocessormemorytotheframebufferdependingontheprocessor.Ifso,wecanuseglPixelStorei(GL_UNPACK_SWAP_BYTES,GL
_TRUE);38Thedisplaycallbackvoiddisplay(){glClear(GL_COLOR_BUFFER_BIT);glRasterPos2i(0,0);glDrawPixels(n,m,GL_RGB,GL_UNSIGNED_INT,image);glF
lush();}