【推荐下载】android opengl es实例画三角形
opengl学习(三)----绘制简单图形(一)

opengl学习(三)----绘制简单图形(⼀)今天说⼀说⼏种简单的图元。
所有的⼏何图元都是根据它们的顶点来描绘的。
⽽顶点就是它们在屏幕上的坐标位置。
我喜欢把这⼏个简单的图元称为点线⾯。
点,可以看到⼀个顶点;线,就是两个顶点指定的⼀条有限长度的线段;⾯,其实更准确讲是⼀个凸多边形。
opengl⾥所讲的多边形是内部⽤颜⾊填充的,视觉上称为⾯我个⼈认为是更贴近的。
当然,多边形也是由指定的顶点组成的。
需要注意的是,要想被opengl按照设计被绘制必须正确的认识到,所谓的多边形是顶点都处于⼀个平⾯上,凸多边形。
凸多边形不能理解的,请问度娘。
来看⼀个例⼦:C++代码1. glBegin(GL_POLYGON);2. glVertex2f(0.0, 0.0);3. glVertex2f(0.0, 3.0);4. glVertex2f(4.0, 3.0);5. glVertex2f(6.0, 1.5);6. glVertex2f(4.0, 0.0);7. glEnd();先不去关⼼代码本⾝,这段代码最终的结果是要指定5个顶点绘制⼀个凸五边形。
注意,不是5条线段⽽是⼀个凸五边形的平⾯。
不管是点线⾯的哪⼀种,都是需要指定⼀组顶点的。
如何判定顶点指定的开始和结束就是glBegin和glEnd的⼯作。
引⽤void glBegin(Glenum mode);标志着⼀个顶点数据列表的开始,它描述了⼀个⼏何图元。
mode参数指定了图元的类型。
void glEnd(void);标志着⼀个顶点数据列表的结束。
mode设置的不同,代表着将要绘制的图元也不同。
下⾯这个表就是图元的名称和含义:值含义GL_POINTS 单个的点GL_LINES ⼀对顶点被解释为⼀条直线GL_LINE_STRIP ⼀系列的连接直线GL_LINE_LOOP 和上⾯相同,但第⼀个顶点和最后⼀个顶点彼此相连GL_TRIANGLES 3个顶点被解释为⼀个三⾓形GL_TRIANGLES_STRIP 三⾓形的连接串GL_TRIANGLES_FAN 连接成扇形的三⾓形系列GL_QUADS 4个顶点被解释为⼀个四边形GL_QUADS_STRIP 四边形的连接串GL_POLYGON 简单的凸多边形的边界试想着,如果将glBegin(GL_POLYGON)修改为glBegin(GL_POINTS),绘制出来的将是什么图形呢? 哈哈,那就是5个点⽽已么。
极坐标编程三角形

极坐标编程三角形极坐标编程三角形,顾名思义,是一种用极坐标计算制作的三角形图形,它可以用于美术设计、游戏开发等方面。
下面我将分步骤阐述如何制作极坐标编程三角形。
步骤一:打开计算机的绘图软件首先,我们需要打开一款功能强大的绘图软件,比如说Adobe Illustrator, Sketch或是Inkscape等。
这些软件提供了简单、便捷的极坐标计算功能,让我们可以方便地制作三角形和其他形状。
步骤二:绘制三角形的基本结构接下来,我们需要用软件的线条工具或是画板工具绘制出三角形的基本结构。
这个结构可以根据你的实际需求而定,如等边三角形、等腰三角形、锐角三角形等等。
完成这个步骤之后,你将会得到三个点的坐标值,这些坐标值即为后续的极坐标计算所需。
步骤三:计算出三角形的各个点的极坐标接下来,需要用这三个点的坐标值来计算三角形上的所有点的极坐标。
极坐标是极径和极角的组合形式,它比直角坐标系更适合表示圆形和较复杂的曲线。
例如,我们可以用如下公式得出某一点的极坐标:r = √(x^2 + y^2)ø = arctan(y/x)计算出各个点的极坐标之后,我们就可以根据需要进行旋转、大小缩放、颜色搭配等调整。
步骤四:添加中心点和背景最后,我们可以将三角形移到画布的中心位置,继而根据需要给三角形添加背景色、华丽的边框、外阴影效果、字体及图形元素等。
独特、美观的极坐标编程三角形图标已经成功制作,为一款游戏或是网站带来更加专业、优雅的界面效果。
要想制作出高质量的图标,我们不仅需要正确地计算极坐标,还需要不断练习和实践。
想要成为一名优秀的设计师,我们需要始终关注行业的发展趋势,不断学习新知识、新技术,为我们的作品注入更加先进、前沿的元素,让自己成为行业的佼佼者。
Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)

Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)标签:图形androidpathfloatclass2012-01-20 20:02 151861人阅读评论(64) 收藏举报分类:android(12)版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+] 1、首先说一下canvas类:Class OverviewThe Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing).这个类相当于一个画布,你可以在里面画很多东西;我们可以把这个Canvas理解成系统提供给我们的一块内存区域(但实际上它只是一套画图的API,真正的内存是下面的Bitmap),而且它还提供了一整套对这个内存区域进行操作的方法,所有的这些操作都是画图API。
也就是说在这种方式下我们已经能一笔一划或者使用Graphic来画我们所需要的东西了,要画什么要显示什么都由我们自己控制。
这种方式根据环境还分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。
两种的主要是区别就是可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。
OpenGL ES教程一

图元是构成复杂物体的基本绘图要素。
在OpenGL ES中,你可以使用的图元有点,线,三角形。
它们都有非常强的自我解释性,我觉得你需要有些例子让你看到它们。
首先,让我们来看看一些代码,然后我们可以谈论这是怎么回事,这样您就可以使用它来创建一些自己的代码。
图元#1 -三角形三角形是最“复杂”的图元,但是很容易使用,并且非常实用,这将是你可以绘制的第一个OpenGL的图元。
当我们绘制一个三角形的时候,我们需要告诉OpenGL在3d空间中的三角形的3系坐标,并且,OpenGL将非常顺利的渲染这个三角形。
在开始之前,复制00教程中的项目代码或者从这里下载下项目代码:AppleCoder-OpenGLES-00.tar.gz .在XCode中打开,开启EAGLView.m文件,找到drawView函数。
这里就是施展魔法的地方。
首先,我们需要定义一个三角形。
要做到这点,我们需要知道在我们要处理的坐标的两种类型:模型和世界。
模型坐标是指我们正在绘制的实际图元,世界坐标告诉OpenGL观察者在哪里。
(在世界坐标中,观察者一般在(0.0,0.0,0.0)的地方)第一个例子将说明这点。
首先,我们定义这个三角形在模型空间使用3 x 3d 坐标(x,y,z):constGLfloattriangleVertices[] = {0.0, 1.0, -6.0,// Triangle top centre-1.0, -1.0, -6.0,// bottom left1.0, -1.0, -6.0,// bottom right};如上所示,这里使用了3个坐标来表示一个三角形,需要注意的是,我们定义三角形顶点是逆时针来显示的。
虽然描述三角形的可以用逆时针也可以用顺时针,但是我们必须和上述一样用逆时针来描述三角形。
不过,我建议你用逆时针来描述三角形,因为我们以后可以用逆三角形来达到一些先进的功能。
(补充:逆三角形在3d中被认为是正面,而顺三角形则被认为是反面。
opengl用三角形模拟生成球面[优质文档]
![opengl用三角形模拟生成球面[优质文档]](https://img.taocdn.com/s3/m/edae9f16bfd5b9f3f90f76c66137ee06eff94e9b.png)
在看OpenGL红皮书,看到生成球体这节,讲了很多,总感觉不如自己动手写一些代码来的实在,用OpenGL中三角形模拟球形生成.主要要点,模型视图变换,多边形表面环绕一致性,矩阵堆栈.先贴上代码.虽然是用F#写的,但是处理全是过程式的,很好理解.01 #r "F:\3D\1.0\Binaries\OpenTK\Debug\OpenTK.dll"02 #r "F:\3D\1.0\Binaries\OpenTK\Debug\OpenTK.GLControl.dll"0304open System05open System.Collections.Generic06open System.Windows.Forms07open System.Threading08open System.Drawing09open System.Drawing.Imaging010open OpenTK011open OpenTK.Graphics012open OpenTK.Graphics.OpenGL013014type loopForm() as form=015inherit Form()016let mutable x = 5.f017let mutable y = 5.f018let mutable z = 5.f019let offest = 1.f020let glControl = new OpenTK.GLControl()021let textX= new TextBox()022let textY= new TextBox()023let textZ= new TextBox()024let textLR = new TextBox()025let textUD= new TextBox()026let textInfo = new TextBox()027let labelX= new Label()028let labelY= new Label()029let labelZ= new Label()030let labelLR = new Label()031let labelUD= new Label()032let mutable first = 0033let mutable buffer = 0034let list = 0035let scale = 3.f036do037form.SuspendLayout()038glControl.Location <- new Point(10,40)039glControl.Size <- new Size(400,300)040glControl.BackColor <- Color.Red041glControl.Resize.Add(form.resize)042glControl.Paint.Add(form.paint)043form.MouseWheel.Add(form.MouseDown)044form.ClientSize <- new Size(600,400)045form.Text <- "opengl"046form.StartPosition <- FormStartPosition.Manual0 47form.Location <- new Point(1200,600)048form.Controls.Add(glControl)049form.ResumeLayout(false)050labelX.Location <- new Point(420,40)051labelY.Location <- new Point(420,70)052labelZ.Location <- new Point(420,100)053labelLR.Location <- new Point(420,130)054labelUD.Location <- new Point(420,160)055labelX.Text <- "X:" 056labelY.Text <- "Y:"057labelZ.Text <- "Z:"058labelLR.Text <- "水平:"059labelUD.Text <-"上下:"060textX.Location <- new Point(460,40)061textY.Location <- new Point(460,70)062textZ.Location <- new Point(460,100)063textLR.Location <- new Point(460,130)064textUD.Location <- new Point(460,160)065textInfo.Location <- new Point(420,190)066textInfo.Width <- 140067form.Controls.Add(textX)068form.Controls.Add(textY)069form.Controls.Add(textZ)070form.Controls.Add(textLR)071form.Controls.Add(textUD)072form.Controls.Add(labelX)073form.Controls.Add(labelY)074form.Controls.Add(labelZ)075form.Controls.Add(labelLR)076form.Controls.Add(labelUD)077form.Controls.Add(textInfo)078//#endregion 079override v.OnLoad e =080base.OnLoad e081GL.ClearColor Color.MidnightBlue082Application.Idle.Add(v.AIdle)083v.ShowUI 084textX.TextChanged.Add(form.TextChange)085textY.TextChanged.Add(form.TextChange)086textZ.TextChanged.Add(form.TextChange)087textLR.TextChanged.Add(form.TextChange)088textUD.TextChanged.Add(form.TextChange)089//踢除正反面090//GL.Enable EnableCap.CullFace091//GL.CullFace CullFaceMode.Back092//指定正反面093GL.FrontFace w094//设置材料面填充模式095GL.PolygonMode(MaterialFace.Front,PolygonMode.Fill)096GL.PolygonMode(MaterialFace.Back,PolygonMode.Line) 097//启用数组功能.098GL.EnableClientState(ArrayCap.VertexArray)099//GL.EnableClientState(ArrayCap.ColorArray)0100GL.EnableClientState(ArrayCap.IndexArray)0101//#region ""0102member v.resize (e:EventArgs) =0103GL.Viewport(0,0,glControl.ClientSize.Width,glControl.ClientSize.Height) 0104let aspect = float32 glControl.ClientSize.Width /float32glControl.ClientSize.Height0105let mutable projection =Matrix4.CreatePerspectiveFieldOfView(MathHelper.PiOver4,aspect,0.1f,64.f) 0106GL.MatrixMode MatrixMode.Projection0107GL.LoadMatrix(&projection)0108member v.paint (e:PaintEventArgs) =0109v.Render()0110member v.AIdle (e:EventArgs) =0111while (glControl.IsIdle) do0112v.Render()0113member v.TextChange (e:EventArgs) =0114x <- v.UIValue(textX)0115y <- v.UIValue(textY)0116z <- v.UIValue(textZ)0117member v.MouseDown(e:MouseEventArgs) =0118match v.ActiveControl with0119| :? TextBox as t1 -> 0120let mutable t = v.UIValue(t1)0121t <- t + float32 e.Delta * offest * 0.01f0122t1.Text <- t.ToString()0123| _ -> 0124v.Text <- v.ActiveControl.Text0125let state =float32 e.Delta * offest * 0.01f0126x<- x+state0127y<- y + state0128z <- z + state0129v.ShowUI0130member x.UIValue0131with get (text:TextBox) = 0132let mutable value = 0.f0133if System.Single.TryParse(text.Text,&value) then0 134value <- value0135value0136and set (text:TextBox) (value:float32) = text.Text<- value.ToString() 0137member v.ShowUI =0138textX.Text <- x.ToString()0139textY.Text <- y.ToString()0140textZ.Text <- z.ToString()0141textLR.Text <- v.UIValue(textLR).ToString()0142textUD.Text <- v.UIValue(textUD).ToString()0143member v.Normal (c:Vector3) =0144 c.Normalize() 0145 c * scale0146member v.Subdivide (v1:Vector3,v2:Vector3,v3:Vector3) =0 147let vs = Array.create 6 Vector3.Zero0148vs.[0] <- v10149vs.[1] <- v.Normal( Vector3.Lerp(v1,v2,0.5f))0150vs.[2] <- v.Normal( Vector3.Lerp(v3,v1,0.5f))0151vs.[3] <- v20152vs.[4] <- v.Normal( Vector3.Lerp(v2,v3,0.5f))0153vs.[5] <- v30154let is = Array.create 1200155is.[0] <- 00156is.[1] <- 10157is.[2] <- 20158is.[3] <- 20159is.[4] <- 10160is.[5] <- 40161is.[6] <- 40162is.[7] <- 10163is.[8] <- 30164is.[9] <- 20165is.[10] <-40166is.[11] <- 50167(vs,is)0168//#endregion 0169member v.CreatePane (angle:float32,x,y,z) =0170GL.PushMatrix()0171GL.Color3(Color.Green)0172GL.Rotate(angle,x,y,z)0173let mutable vv =[|Vector3.UnitY*scale;Vector3.UnitZ*scale;Vector3.UnitX*scale|]0174let mutable iv = [|0;1;2|]0175//let show array = printfn "%A" array0176let mutable t =int (v.UIValue(textInfo))0177if t > 6then0178t <- 60179elif t < 0then0180t <- 00181for j in0 .. t do0182let mutable av = Array.create 0 Vector3.Zero0183let mutable ev = Array.create 000184for i in0 .. 3 .. iv.Length - 1do0185let (vvv,iiv) =v.Subdivide(vv.[iv.[i]],vv.[iv.[i+1]],vv.[iv.[i+2]])0186let length = av.Length0187av <- Array.append av vvv0188let map = iiv |> Array.map (fun p -> p + length)0 189ev <- Array.append ev map0190vv <- av0191iv <- ev 0192//show vv0193//show iv0194GL.VertexPointer(3,VertexPointerType.Float,0,vv) 0195GL.DrawElements(BeginMode.Triangles,iv.Length,DrawElementsType.UnsignedInt, iv)0196GL.PopMatrix() 0197member v.Render =0198let mutable lookat = Matrix4.LookAt(newVector3(x,y,z),Vector3.Zero,Vector3.UnitY)0199GL.MatrixMode(MatrixMode.Modelview)0200GL.LoadMatrix(&lookat) 0201GL.Rotate(v.UIValue(textLR),0.f,1.f,0.f)0202GL.Rotate(v.UIValue(textUD),1.f,0.f,0.f)0203GL.Clear(ClearBufferMask.ColorBufferBit |||ClearBufferMask.DepthBufferBit)0204GL.Color3(Color.Green)0205v.CreatePane(0.f,0.f,1.f,0.f)0206v.CreatePane(90.f,0.f,1.f,0.f)0207//v.CreatePane(180.f,0.f,1.f,0.f)0208glControl.SwapBuffers()0209ignore0210let t = new loopForm()0211 t.Show() 0首先我们设定逆时针方向为正方向,分别设定正面为画布填充,反面为线填充,这样我们就能很容易知道我们生成的三角形倒底是不是正确生成的我们要的面向.0然后分别取用顶点数组和顶点数组索引功能.毕竟后面的点多,一个一个去组装没这个脑力,还没性能.0如何用三角开来模拟生成球面,方法肯定很多种,这里我们可以想象下,在坐标轴的原点就是球的原点,半径为1,被X,Y,Z轴分成八个部分,我们找到正右上的那边,与X,Y,Z轴的交点分别为x1(1,0,0),y1(0,1,0),z1(0,0,1).0然后我们把x1,y1,z1连起来画一个三角形.注意这里就有顺序了,想像一下,三个点的位置,要画正面是用逆时针方向,一算,x1,y1,z1这个方向就是,但是通常为了形象些,我们从y1上开始画,然后是前z1,然后是右x1.如代码是这样0let m utable vv = [|Vector3.UnitY*scale;Vector3.UnitZ*scale;Vector3.UnitX*scale|] let m utable iv = [|0;1;2|]0然后就是细分这三角形,过程就是这样,一个三角形分成四个.在for j in 0 .. t 这里,t越多,分的就越多,t是0,分一次成四个,t是1,四个再分别分成四个,就是16个.最后总的三角形就是4的t+1次方.0细分算法,大致如下,已知球面上二点,a1,a2,求在这球二点中间点ax.0已知球心在中间,得知,三个向量有如下关系,向量ax = (向量a2-向量a1)*0.5 + 向量a1.这样可以算到向量a1,那点ax就是向量a1*半径.0当一个三角形分成几个三角形,也就是三个顶点变成六个顶点,那么生成生成三角形的索引也要重新更新.具体过程用图来说明.0分的越细,球面越光滑,这样只生成了八分之一的球面,后面的如何画了,前面讲了矩阵堆栈的用法,刚好可以用在这样能在我方便生成另外几个面,v.CreatePane(90.f,0.f,1.f,0.f)这个是我们绕Y轴90度后,生成另外的一个面,为了不破坏全局坐标,我们可以在转之前调用PushMatrix记住当前矩阵,画完后再用PopMatrix回到当前矩阵.0看一下程序运行后的效果图.界面上的X,Y,Z指向人眼的位置,左右与上下指旋转方向.最下面指细分的程度,值越大,细分的越厉害.0大家可以把顶点索引变下顺序,然后再来看下效果,也可以把余下的六面全部补起.。
OpenGL简单例子

在黑色的背景下绘制一个彩色的三角形,如图一所示。
#include <stdlib.h>#include <GL/glut.h>void background(void){glClearColor(0.0,0.0,0.0,0.0);//设置背景颜色为黑色}void myDisplay(void){glClear(GL_COLOR_BUFFER_BIT);//buffer设置为颜色可写glBegin(GL_TRIANGLES);//开始画三角形glShadeModel(GL_SMOOTH);//设置为光滑明暗模式glColor3f(1.0,0.0,0.0);//设置第一个顶点为红色glVertex2f(-1.0,-1.0);//设置第一个顶点的坐标为(-1.0,-1.0)glColor3f(0.0,1.0,0.0);//设置第二个顶点为绿色glVertex2f(0.0,-1.0);//设置第二个顶点的坐标为(0.0,-1.0)glColor3f(0.0,0.0,1.0);//设置第三个顶点为蓝色glVertex2f(-0.5,1.0);//设置第三个顶点的坐标为(-0.5,1.0)glEnd();//三角形结束glFlush();//强制OpenGL函数在有限时间内运行}void myReshape(GLsizei w,GLsizei h){glViewport(0,0,w,h);//设置视口glMatrixMode(GL_PROJECTION);//指明当前矩阵为GL_PROJECTIONglLoadIdentity();//将当前矩阵置换为单位阵if(w <= h)gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w);//定义二维正视投影矩阵图一:一个彩色的三角形首先创建工程,其步骤如下:1)创建一个Win32 Console Application。
OpenTK教程-2绘制一个三角形(正确的方式)

OpenTK教程-2绘制⼀个三⾓形(正确的⽅式)向我们展⽰了如何在屏幕上画⼀个三⾓形。
但是,我说过,那是⼀种古⽼的⽅式,即使它能够正常运⾏,但是现在这已经不是“正确”的⽅式。
上篇⽂章中我们将⼏何发送到GPU的⽅式是所谓的“即时模式”,它⾮常简单,但是已经不再推荐使⽤。
在本教程中,我们将要实现同样的最终⽬标,但是我们将以更复杂的⽅式来做事情,疯了么⼤哥?我们选择更⿇烦的编写⽅式,是为了更有效率,更快速和可扩展性。
我们将像以前的教程⼀样开始,我将引⽤原⽂⼏次,所以如果还没有看过上⼀篇的话,请抽空看看。
Part 1:设置要开始,我们需要创建⼀个新的项⽬,引⽤OpenTK和System.Drawing,同上⼀个教程。
将其命名为OpenTKTutorial2。
Part 2:编码⾸先,我们需要再次做⼀些基础⼯作,就像第⼀个教程那样。
添加⼀个名为“Game”的新类。
使它成为GameWindow的⼦类(您需要为OpenTK添加⼀个using 指令才能使⽤该类)。
差不多是这样:using OpenTK;namespace OpentkTutorials2{class Game : GameWindow{}}回到Program.cs,添加代码:namespace OpentkTutorials2{class Program{static void Main(string[] args){using (var game = new Game()){game.Run(30.0);}}}}Onload⽅法和OnRenderFrame⽅法参照上⼀个教程做就⾏了。
protected override void OnLoad(EventArgs e){base.OnLoad(e);//修改窗⼝标题Title = "Hello OpenTK!";//设置背景颜⾊为,额,不知道什么蓝(需要添加 OpenTK.Graphics.OpenGL and System.Drawing引⽤)GL.ClearColor(Color.CornflowerBlue);}protected override void OnRenderFrame(FrameEventArgs e){base.OnRenderFrame(e);GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);SwapBuffers();}好了,从这⾥开始,我们可以学点新的东西了!我们⾸先需要做的是创建我们的着⾊器(Shader)。
利用迭代法构造sierpinski三角形。

利用迭代法构造sierpinski三角形。
1. 引言1.1 概述Sierpinski三角形是一种经典的几何图形,具有许多特殊的数学性质和美学价值。
它由一系列等边三角形组成,每个等边三角形都被分割成四个嵌套的小等边三角形。
Sierpinski三角形展现了迭代过程中的自相似性质,使得它成为研究自然界和工程领域中模式生成和图像压缩等问题的重要范例。
1.2 文章结构本文将详细介绍利用迭代法来构造Sierpinski三角形的原理、步骤和算法。
首先会对Sierpinski三角形的定义与特征进行说明,然后阐述迭代法作为构造该图形的基本原理。
接着,会逐步讲解如何使用迭代法来生成Sierpinski三角形,并提供具体步骤和算法供读者参考。
实例分析与解释部分将展示首次迭代结果以及多次迭代结果,并对迭代次数对Sierpinski三角形生成的影响进行深入分析。
讨论与拓展应用部分探讨了对迭代法构造Sierpinski三角形的优化方法,并展示了基于Sierpinski三角形的图像压缩算法应用实践研究。
最后的结论部分对研究成果进行总结回顾,并提出问题和不足之处,同时展望未来关于该领域进一步研究方向和可能的应用领域。
1.3 目的本文的目的是通过详细阐述迭代法构造Sierpinski三角形的原理与方法,旨在帮助读者深入理解Sierpinski三角形及其生成过程,并为相关领域的学术研究和实际应用提供启示。
通过本文内容的阐述,读者将能够掌握使用迭代法构造Sierpinski三角形所需的具体步骤和算法,同时了解该几何图形在图像压缩和其他领域中可能发挥的作用。
2. 迭代法构造Sierpinski三角形2.1 Sierpinski三角形的定义与特征Sierpinski三角形是一种经典的几何图形,以波兰数学家瓦茨沃夫·谢尔宾斯基(Wacław Franciszek Sierpiński)的名字命名。
它是由等边三角形不断重复迭代而成的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EGLSurfacesurface;
EGLContextcontext;
EGLDisplaydisplay=eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(display,0,0);
EGLUtils::selectConfigForNativeWindow(display,attribs,s.get(),config);
draw();
usleep(100*1000);
}
//clearstatus
eglMakeCurrent(mDisplay,EGL_NO_SURFACE,EGL_NO_SURFACE,
EGL_NO_CONTEXT);
eglDestroyContext(mDisplay,mContext);
eglDestroySurface(mDisplay,mSurface);
mSurface=surface;
mWidth=w;
mHeight=h;
mFlingerSurfaceControl=control;
mFlingerSurface=s;
glViewport(0,0,mWidth,mHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
#includeui/FramebufferNativeWindow.h
#includeui/EGLUtils.h
#includeui/DisplayInfo.h
#includesurfaceflinger/SurfaceComposerClient.h
usingnamespaceandroid;
intmWidth;HARED_LIBRARIES:=\
libutils\
libui\
libEGL\
libGLESv1_CM\
surface=eglCreateWindowSurface(display,config,s.get(),NULL);
context=eglCreateContext(display,config,NULL,NULL);
eglQuerySurface(display,surface,EGL_WIDTH,
intmHeight;
EGLDisplaymDisplay;
EGLDisplaymContext;
EGLDisplaymSurface;
spSurfaceControlmFlingerSurfaceControl;
spSurfacemFlingerSurface;
intinitGraphics()
{
mFlingerSurface.clear();
mFlingerSurfaceControl.clear();
eglTerminate(mDisplay);
return0;
}
Android.mk:
LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_SRC_FILES:=\
return-1;
spSurfaceControlcontrol=session-createSurface(
getpid(),0,400,300,PIXEL_FORMAT_RGB_565);
session-openTransaction();
control-setLayer(0x40000000);
//createthenativesurface
spSurfaceComposerClientsession=newSurfaceComposerClient();
DisplayInfodinfo;
status_tstatus=session-getDisplayInfo(0,dinfo);
if(status)
eglQuerySurface(display,surface,EGL_HEIGHT,
if(eglMakeCurrent(display,surface,surface,context)==EGL_FALSE)
returnNO_INIT;
mDisplay=display;
mContext=context;
glOrthof(0,mWidth,0,mHeight,0,1);
returnEGL_TRUE;
}
voiddraw(){
//printf(“startdrawing...\n”);
glColor4f(1,0,0,1);
constGLfloatvertices[3][2]={
{100,100},
{200,100},
androidopengles实例画三角形
2012/06/061054
NativeC开发opengl,网上这方面的资料很少,研究了几天才弄出来,现在贴
出来供交流,转载请注明HelloXiexh
#includestdio.h
#includeunistd.h
#includeEGL/egl.h
#includeGLES/gl.h
session-closeTransaction();
spSurfaces=control-getSurface();
//initializeopenglandegl
constEGLintattribs[]={
EGL_DEPTH_SIZE,0,
EGL_NONE
};
EGLintw,h,dummy;
EGLintnumConfigs;
eglSwapBuffers(mDisplay,mSurface);
}
intmain(intargc,char**argv){
if(!initGraphics())
{
printf(“Graphicsinitializationfailed.\n”);
returnEXIT_FAILURE;
}
while(1){
{100,200}
};
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2,GL_FLOAT,0,vertices);
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES,0,3);