不管是我们玩的游戏,看到电影,林林总总的计算机图形,它们有着大量优美着色的曲线或者表面,在opengl里面,却都是通过一些基本图形元素组成的,比如直线,再比如多边形。
就好比画画,画之前是要做一些准备工作的。至少我们要有一张画纸,承载我们要画的图形。但是计算机跟真实的画纸是不一样的。纸是白色的,直接花就好;在计算机世界里,这张画布是一块内存,保存着我们之前已经画上去的图像,为了重新画我们需要的东西,我们需要先将之前的图像都清除。
一般而言,将它清除为我们需要的某种颜色既可。比如是描绘黑夜,那就将清除颜色设置为黑色;绘制蓝天就将背景颜色设置为蓝色等等。当然如果是要将背景进行被图形覆盖的话,背景色清除成什么颜色就无所谓了。
当我说到这里,是不是有人要问,既然可以被图形覆盖,那我画个大矩形框不就可以了。当然,没有问题,真的。但是(好吧,肯定是要转折的啦),从效率上将,调用几个清除函数比画矩形框要快的多。而且,openGL中,程序员可以任意的改变系统坐标位置,观察角度,观察位置等等,如果是这种情况,这个矩形框设多大呢,放在哪里合适呢?还是乖乖清除为某种颜色吧,亲,方便呢~
下面来介绍一下清楚函数。先看一个例子[/size][size=large][size=small][/size]
glClearColor(0.0,0.0,0,0.0);
glClear(GL_COLOR_BUFFER_BIT)
这两句代码是讲,将窗口清除为黑色。第一句是设置清除颜色;第二句则是把窗口清除为当前颜色。glClear()只有一个参数,指定需要清除的缓冲区。这个例子里需要清除的只是当前背景颜色,所以,界面上显示的图形界面还可以看到,只是背景变为了黑色。
缓冲区类型如下表:
| 缓冲区 名称 |
| 颜色缓冲区 GL_COLOR_BUFFER_BIT |
| 深度缓冲区 GL_DEPTH_BUFFER_BIT |
| 积累缓冲区 GL_ACCUM_BUFFER_BIT |
| 模板缓冲区 GL_STENCIL_BUFFER_BIT |
OpenGL允许同时清除多个缓冲区。这就好比捡豆子,多种颜色的豆子,捡的过程中,将它们一一放入不同的盘子和每次只捡一种颜色放入盘子,哪个更快一些?
使用时,缓冲区值是以或的方式进行的。其它三种缓冲区设置值的函数后续用到时再提及,因还未学习透彻,在此先不讲述。
讲完画布,我们来看一看计算机中的画笔。其实也不能算是画笔,只能说是画笔的颜色。我们将背景清除为一种颜色,并不代表我们画出来的那个物什它也需要这种颜色。而且一般而言,物体的颜色是五颜六色的,所以需要有一个函数不停的更替画笔颜色。
glColor3f(float red,float green, float blue);
这个函数就是用来设置颜色的,每个参数的取值都在0.0~1.0之间,分别代表红绿蓝。
需要注意的是,如果画完一个物体,再不指定新的颜色的情况下,下一个物体的颜色会沿用之前设置的颜色,直至重新设置画笔颜色为止。
分享到:
相关推荐
本项目是基于 OpenGL ES 实现的绘画板,实现了平滑曲线、自定义笔触、画笔大小调节、画笔颜色调节、撤销重做、橡皮擦等功能。 如何导入 将 GLPaintView 文件夹拷贝到工程中 引入头文件 #import "GLPaintView.h" ...
通过学习如何导入、使用和调整自定义画笔,可以极大地提高图像处理和设计的灵活性,创造出独一无二的艺术作品。所以,对于任何想在Photoshop中提升创作水平的用户来说,掌握自定义画笔的使用是非常重要的。
4-7-2(Canvas画布) 4-8(Paint画笔) 4-9(Bitmap位图渲染与操作) 5-1(飞行射击游戏实战) 6-1(360°平滑游戏摇杆) 6-10-1(Socket协议) 6-10-2(Http协议) 6-11(本地化与国际化) 6-2(多触点缩放位图) 6-3(触屏手势识别) 6...
- **OpenGL着色器**:介绍OpenGL着色器的概念及其在QML中的应用。 - **着色器元素**:讲解如何使用着色器元素来增强QML的表现力。 - **片段着色器**:展示如何使用片段着色器来实现特定的效果。 - **波浪效果**:...
通过学习和理解这个“类似画笔的绘图控件源代码”,开发者可以了解到如何在自己的应用程序中实现类似的功能,从而提升应用的交互性和创意性。这个源代码对于初学者来说是一份宝贵的教育资源,对于有经验的开发者来说...
- **图片(Images)**:讨论如何在画布上显示和操作图片。 - **转换(Transformation)**:解释如何对画布对象执行旋转、缩放等变换。 - **组合模式(Composition Mode)**:介绍如何设置画布元素之间的混合模式。 -...
PhotoShop App为用户提供了GUI界面和画布,可以使用不同的颜色和画笔进行绘制,绘画。 用户可以导入图像,对其进行编辑并将新创建的图像保存回系统。 应用程序提供了不同的工具,如铅笔,刷子,喷雾罐,印章和过滤...
### QML Book in Chinese ...通过以上章节的内容,本书提供了全面且深入的Qt/QML学习资料,不仅涵盖了基础知识,还深入探讨了许多高级主题和技术细节。无论是新手还是有经验的开发者,都能从中获得有价值的指导和灵感。
- **序(Preface)**:介绍了学习QML的背景和目的。 - **Qt5介绍(Qt5Introduction)**: - Qt5是一款跨平台的应用程序开发框架,支持多种操作系统。 - 包括C++ API和QML两种主要编程方式。 - **Qt构建模块...
OpenGL画图程序,如"OPEN GL Paint program",是一种基于OpenGL图形库的创新应用,它允许用户在屏幕上绘制和编辑图像。...通过不断学习和实践,开发者可以创造出功能丰富且性能优秀的OpenGL画图程序。
开发者可以通过这个压缩包学习Skia的内部结构,了解其工作原理,并进行二次开发,以满足特定的图形需求。 对于想要深入研究或使用Skia的开发者来说,了解以下关键概念非常重要: - **画布(Canvas)**:是Skia的...
《QmlBook》学习中文Pdf版是一本针对Qml初学者的入门书籍,它涵盖了Qml编程语言的基础知识和相关技术的使用方法。本书不仅适合初学者,也适合希望进一步了解Qml技术的专业开发者。本书通过系统的章节布局,从最基础...
总之,"ImageFilterForAndroid-master"项目为安卓开发者提供了一个全面的图像处理和手绘画板实践平台,通过对源码的研究和学习,开发者不仅可以掌握基本的图像处理技术,还能深入了解安卓应用的开发流程,提高自己的...
- 画布与画笔的绘制技术。 - 图层管理与撤销重做功能的实现。 #### 十二、Android天气预报加widget源码 天气预报应用通常包含Widget功能,便于用户快速查看信息。 **关键技术点:** - 天气数据API的调用与解析。 -...
- 使用Interface Builder或SwiftUI创建简洁直观的界面,包含画布区域、颜色选择器、画笔粗细调节、橡皮擦、撤销/重做按钮等。 - 考虑手势识别,例如捏合缩放画布,滑动平移视图。 2. **图形上下文(Graphics ...
- **二维变换**:介绍如何对画布元素进行二维变换操作。 - **三维变换**:讲解如何应用三维变换来增加深度感。 #### 九、粒子模拟 ##### 9.1 概念 - **粒子系统**:解释粒子系统的原理及其在Qt5中的实现。 - **粒子...
Canvas提供了三个构造函数,分别用于创建无参数的画布、基于Bitmap的画布和基于OpenGL的画布。Canvas的主要功能在于其以`draw`开头的方法,如`drawArc`、`drawCircle`等,它们用于在画布上绘制各种形状和图像。例如...
在IT领域,MFC(Microsoft Foundation Classes)是微软提供的一套C++库...MFC虽然在现代开发中逐渐被其他框架取代,但它在教学和小型项目中仍有着一定的应用价值,尤其是对于理解和学习Windows GUI编程原理十分有帮助。
### Android的图形处理引擎——Skia框架学习 #### 一、Skia框架概述 Skia是一个功能强大的开源向量图形处理库,它包含了多种图形处理功能,如字体渲染、坐标变换、位图处理等,其设计简洁高效,常被比作轻量级的...