原文:http://www.pixelbender.cn/?p=68
(原文代码有许多错误,请测试时一一校正)
在使用着色器创建绘制填充
时,您将使用绘图 API 方法来创建矢量形状。正如使用绘图 API 可将任何位图图像用作位图填充一样,着色器的输出将用于填充该形状。
var canvas:Sprite = new Sprite();
canvas.graphics.beginShaderFill(myShader);
canvas.graphics.drawRect(10, 10, 150, 150);
canvas.graphics.endFill();
// add canvas to the display list to see the result
beginShaderFill() 方法注意点
- 参数 Shader: 无需
指定图像输入
。
- 调用
clear
()
方法会清除填充
。
-
只要绘制 3 个或更多个点
,或者调用
endFill()
方法时,应用程序就会呈现填充
。
private function onLoadComplete(event:Event):void
{
shader = new Shader(loader.data);
// 给着色器参数赋值
shader.data.point1.value = [topMiddle.x, topMiddle.y];
shader.data.point2.value = [bottomLeft.x, bottomLeft.y];
shader.data.point3.value = [bottomRight.x, bottomRight.y];
this.addEventListener(Event.ENTER_FRAME, updateShaderFill);
}
private function updateShaderFill(event:Event):void
{
colorAngle += 0.6;
var c1:Number = 1 / 3 + 2 / 3 * Math.cos(colorAngle);
var c2:Number = 1 / 3 + 2 / 3 * Math.cos(colorAngle + d120);
var c3:Number = 1 / 3 + 2 / 3 * Math.cos(colorAngle - d120);
// 给着色器参数赋值
shader.data.color1.value = [c1, c2, c3, 1.0];
shader.data.color2.value = [c3, c1, c2, 1.0];
shader.data.color3.value = [c2, c3, c1, 1.0];
canvas.graphics.clear();
// 开始绘图,三个点即可
canvas.graphics.beginShaderFill(shader);
canvas.graphics.moveTo(topMiddle.x, topMiddle.y);
canvas.graphics.lineTo(bottomLeft.x, bottomLeft.y);
canvas.graphics.lineTo(bottomRight.x, bottomLeft.y);
canvas.graphics.endFill();
}
分享到:
相关推荐
在使用OpenGL进行图形渲染时,边界填充可以结合顶点着色器和片段着色器来实现。顶点着色器处理几何形状的顶点,而片段着色器则决定每个像素的颜色。通过编程这些着色器,我们可以自定义填充规则。 CodeBlock作为...
在OpenGL中,填充通常与绘图命令如`glBegin()`和`glEnd()`配合使用,定义一个形状的边界,然后OpenGL自动进行内部填充。 在OpenGL编程中,我们首先需要设置颜色和模式,比如`glColor3f()`用于设定颜色,`...
`initgraph()`函数用于初始化图形环境,指定驱动器和模式,以便后续绘图操作能够在窗口中进行。`setbkcolor()`则用于设置背景颜色,这里设置为白色(颜色代码14)。 #### 填充算法实现 种子填充的核心在于找到起始...
例如,使用OpenGL可以学习顶点、着色器、纹理映射等技术,从而创建复杂的3D场景。而在SDL或GTK+中,你可以学习如何创建窗口、设置颜色、画线、画圆、填充区域等基本操作。 接下来,我们转向计算机仿真。计算机仿真...
在计算机软件中,例如图像编辑器或绘图程序,填充功能通常有多种模式。常见的填充方式包括: 1. **单色填充**:选择一种颜色,将整个图形内部填充为该颜色。 2. **渐变填充**:从一种颜色平滑过渡到另一种颜色,常...
OpenGL库本身并不直接提供扫描线填充的函数,但开发者可以通过OpenGL的绘图命令(如glBegin, glEnd, glVertex等)和自定义的顶点着色器来实现。在VS2017环境下,你可以使用OpenGL的扩展库,如GLUT或GLEW,来辅助开发...
在标签中提到了"OpenGL",这表明源代码将涉及OpenGL的核心概念,如顶点坐标、着色器、纹理映射、深度测试等。"2D"标签意味着大部分代码将专注于二维空间的渲染,但理解3D概念对2D图形的实现也是有益的,因为许多...
5. **绘制**: 在`onDrawFrame()`方法中,使用`glUseProgram()`启用着色器程序,`glBindTexture()`绑定纹理,`glDrawArrays()`或`glDrawElements()`绘制图形。这将基于之前设置的顶点和纹理信息计算并输出像素。 6. ...
QT与OpenGL结合使用,可以创建出强大的3D图形应用程序。QT是一个流行的开源C++框架,提供了丰富的GUI(图形用户界面)工具,而...在后续的学习中,开发者可能会接触到更复杂的主题,如纹理映射、着色器、变换和动画等。
3. **颜色选择与填充**:应用中通常会包含颜色选择器,让用户可以选择不同的颜色进行着色。这可以通过色彩选择对话框或者色彩滑块实现,然后将选择的颜色保存到全局变量中,供绘图时使用。填充功能则需要判断相邻...
此外,还可以利用OpenGL的硬件加速功能,如片段着色器,来进一步提高填充速度。 总结来说,基于AEL的扫描线填充算法在OpenGL中的实现涉及到了计算机图形学的基本概念,包括顶点处理、事件处理、数据结构的设计和...
加枫简易绘图器是一款基于SDK开发的图形处理软件,主要功能是提供基本的图形绘制能力,包括直线、圆、长方形和圆角矩形。用户可以根据个人需求选择不同的颜色进行绘制,使得这款绘图器在简单易用的同时,具备了一定...
在数据统计图的实现中,顶点着色器可能用于定位图表的坐标,而片段着色器则用于根据数据值填充颜色或绘制条形图。 接着,"shader histogram"标签表明程序可能包含了直方图的绘制。直方图是一种统计图形,通过将数据...
7. **光照和着色**:了解`Program3D`和着色器语言(如GLSL或AGAL),以实现光照效果和自定义表面着色。 8. **事件处理**:如何响应用户的输入,如鼠标点击或键盘按键,以交互式地改变3D场景。 9. **性能优化**:理解...
OpenTK作为.NET的OpenGL绑定,为.NET开发者提供了一套完整的API接口,包括顶点数组、纹理映射、着色器编程等。 在描述中提到的"划线"和"画圆"功能,这通常涉及到OpenGL的基本绘图命令,如glBegin()和glEnd()来定义...
Shader是绘图过程中的着色器,它有五个子类: BitmapShader: 位图渲染 LinearGradient: 线性渲染 SweepGradient: 梯度渲染 RadialGradient: 光束渲染 ComposeShader: 组合渲染 渲染模式:Shader.TileMode ...
5. 使用着色器:现代OpenGL不再使用固定管线,而是采用可编程的着色器模型。你需要编写顶点着色器和片段着色器,用`glCreateShader()`和`glShaderSource()`加载着色器源码,`glCompileShader()`编译着色器,最后用`...
3. `Shader`:着色器,可以为Paint添加复杂的颜色效果,如渐变、图案填充等。 4. `Matrix`:矩阵对象,用于图形的平移、旋转、缩放和斜切等变换。 四、性能优化 1. 重用Paint对象:避免频繁创建和销毁Paint,这...
例如,SolidColorBrush用于单色填充,LinearGradientBrush和RadialGradientBrush则允许你创建线性或径向的渐变效果,而ImageBrush可以将图像作为填充内容。 接下来,我们讨论如何使用Silverlight进行绘图。通常,这...
在本书中,读者将深入理解OpenGL的函数调用和使用方式,涵盖从基本的绘图操作到复杂的着色器编程。OpenGL的API包含了大量函数,这些函数主要分为几个部分:上下文管理、缓冲区管理、顶点数据处理、渲染模式设置、...