《深入了解opengl》第三讲:抗犬齿

《深入了解opengl》第三讲:抗犬齿

ID:1503038

大小:35.50 KB

页数:4页

时间:2017-11-12

《深入了解opengl》第三讲:抗犬齿_第1页
《深入了解opengl》第三讲:抗犬齿_第2页
《深入了解opengl》第三讲:抗犬齿_第3页
《深入了解opengl》第三讲:抗犬齿_第4页
资源描述:

《《深入了解opengl》第三讲:抗犬齿》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《深入了解OpenGL》第三讲:抗犬齿时间:2010-08-1714:22点击:1052次继《深入了解OpenGL:颜色混合》、《深入了解OpenGL:顶点线性变换》之后,CocoaChina会员zenny_chen为我们带来了OpenGL系列教程的第三讲:抗犬齿。原帖地址http://www.cocoachina.com/bbs/read继《深入了解OpenGL:颜色混合》、《深入了解OpenGL:顶点线性变换》之后,CocoaChina会员“zenny_chen”为我们带来了OpenGL系列教程的第三讲:抗犬齿。原帖地址http://www.cocoachina.com/bbs/

2、read.php?tid-28590.html,欢迎参与讨论。下面是教程正文   我们从第一讲到现在所绘制出的图形的边缘都会存在比较明显的犬齿印,如果边缘不处于水平、垂直或斜45度角的话。这一讲,我们将介绍如何摆脱这大煞风景的犬齿。   抗犬齿的第一种做法是比较直观、易懂的。我们通过将线段边缘所覆盖到的像素面积进行判断,如果覆盖到了大部分的像素,那么使用线段颜色的比例就高,否则线段颜色的比例就低。也就是说,我们通过淡化边缘覆盖到一个面积小的像素来达成抗犬齿效果。我们可以看到红宝石书的第149页,图6-3。像素A、B、M以及N所覆盖到的像素面积很小,因此这些像素基本上就用背景色。这种方

3、式的算法是:将OpenGL片断的覆盖比例与alpha值相乘,并且将这个值作为新的alpha把片断与帧缓存中对应的像素进行混合。   我们下面将介绍一下如何多线段进行抗犬齿。   首先,我们要用glEnable()开启GL_LINE_SMOOTH,这个用于启动直线的抗犬齿功能。然后我们可以调用glHint()函数来指定,暗示OpenGL做何种质量的抗犬齿。选项一般有:GL_FASTEST,这个是速度最快,但质量最差的;GL_NICEST,这个是速度最慢,但效果最好的;GL_DONT_CARE,这个是默认方式,没有偏向。下面贴代码:////MyView.m//OpenGLTest////

4、CreatedbyZennyChenon4/25/10.//Copyright2010GreenGamesStudio.Allrightsreserved.//P44 #import"MyView.h" #include#include  @implementationMyView -(id)initWithFrame:(NSRect)frame{self=[superinitWithFrame:frame];if(self){//Initializationcodehere.}returnself;} staticconststru

5、ctVertexInfo{GLfloatvertices[3];}vertexList[]={//line1{-0.8f,0.0f,-2.0f},{-0.2f,0.0f,-2.0f}, //line2{0.2f,0.0f,-2.0f},{0.8f,0.0f,-2.0f},}; -(void)prepareOpenGL{glEnable(GL_CULL_FACE);glEnable(GL_DEPTH_TEST); glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3,GL_FLOAT,0,vertexList); glFront

6、Face(GL_CCW);glCullFace(GL_BACK); glShadeModel(GL_SMOOTH); glClearColor(0.4,0.4,0.4,1.0); glViewport(0,0,320,320); glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-1.0,1.0,-1.0,1.0,1.0,5.0); glMatrixMode(GL_MODELVIEW);glLoadIdentity();glRotatef(10.0f,0.0f,0.0f,1.0f); glHint(GL_LINE_SMOOTH_

7、HINT,GL_NICEST);glBlendEquation(GL_FUNC_ADD);glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);glLineWidth(1.5f);} -(void)drawRect:(NSRect)dirtyRect{ //Drawingcodehere.glClear(GL_COLOR_BUFFER_BIT

8、GL_DEPTH_BUFFER_BIT); glEnable(GL_B

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。