【推荐下载】android opengl es实例画三角形

合集下载

opengl学习(三)----绘制简单图形(一)

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画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)

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教程一

图元是构成复杂物体的基本绘图要素。

在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用三角形模拟生成球面[优质文档]

在看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简单例子

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绘制一个三角形(正确的方式)

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三角形。

利用迭代法构造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)的名字命名。

它是由等边三角形不断重复迭代而成的。

自定义View实现三角形(正三角,倒三角)

自定义View实现三角形(正三角,倒三角)

⾃定义View实现三⾓形(正三⾓,倒三⾓)⾃定义的属性如下:<declare-styleable name="TriangleView"><!--模式--><attr name="tlv_mode"><!--倒三⾓--><enum name="inverted" value="0"/><!--正三⾓--><enum name="regular" value="1"/></attr><!--颜⾊--><attr name="tlv_color" format="color|reference"/></declare-styleable>具体代码如下:import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.support.annotation.IntDef;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;import ng.annotation.Retention;import ng.annotation.RetentionPolicy;/*** 三⾓形*/public class TriangleView extends View{private Paint paint;private Path path;private int color;private int mode;private final int DEFAULT_WIDTH=48;private final int DEFAULT_HEIGHT=24;private int width = 0;private int height =0;/*** 倒三⾓*/public static final int INVERTED = 0;/*** 正三⾓*/public static final int REGULAR = 1;@IntDef({INVERTED, REGULAR})@Retention(RetentionPolicy.SOURCE)public @interface ShapeMode {}public TriangleView(Context context) {this(context,null);}public TriangleView(Context context, @Nullable AttributeSet attrs) {this(context,attrs,0);}public TriangleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context,attrs);}private void init(Context context,AttributeSet attrs){TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TriangleView);color = typedArray.getColor(R.styleable.TriangleView_tlv_color, Color.BLACK);mode = typedArray.getInt(R.styleable.TriangleView_tlv_mode, INVERTED);typedArray.recycle();paint = new Paint();paint.setColor(color);paint.setAntiAlias(true);paint.setStyle(Paint.Style.FILL);path= new Path();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec);width = measureSize(widthMeasureSpec, DEFAULT_WIDTH);height = measureSize(heightMeasureSpec, DEFAULT_HEIGHT);setMeasuredDimension(width, height);}private int measureSize(int measureSpec, int defaultSize) {int newSize = 0;int mode = MeasureSpec.getMode(measureSpec);int size = MeasureSpec.getSize(measureSpec);switch (mode) {case MeasureSpec.AT_MOST:newSize = Math.min(size, defaultSize);break;case MeasureSpec.EXACTLY:newSize = size;break;case MeasureSpec.UNSPECIFIED:newSize = defaultSize;break;}return newSize;}public void setColor(int color){this.color=color;paint.setColor(color);invalidate();}public void setMode(@ShapeMode int mode){this.mode=mode;invalidate();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);drawTriangle(canvas);}private void drawTriangle(Canvas canvas) {if(mode==INVERTED) {path.moveTo(0f, 0f);path.lineTo(width, 0f);path.lineTo(width / 2.0f, height);}else {path.moveTo(width/2.0f,0f);path.lineTo(0,height);path.lineTo(width,height);}path.close();canvas.drawPath(path, paint);}}。

计算机图形学基础OpenGL

计算机图形学基础OpenGL

计算机图形学基础OpenGL1. 使用OpenGL在屏幕上画一条直线,其中端点的坐标分别是(2,3)和(6,9)。

答案:glBegin(GL_LINES);glVertex2f(2,3);glVertex2f(6,9);glEnd(;2. 如何使用OpenGL把一个三角形绘制在屏幕上,其三个顶点的坐标分别是(1,3)、(6,7)和(9,6)?答案:glBegin(GL_TRIANGLES);glVertex2f(1,3);glVertex2f(6,7);glVertex2f(9,6);glEnd(;3. 如何使用OpenGL在屏幕上绘制一个正方形,正方形的中心点坐标为(4,6),边长为5?答案:glBegin(GL_QUADS);glVertex2f(4-2.5, 6+2.5);glVertex2f(4+2.5, 6+2.5);glVertex2f(4+2.5, 6-2.5);glVertex2f(4-2.5, 6-2.5);glEnd(;4. 如何使用OpenGL在屏幕上绘制一个圆,圆心坐标为(7,3),半径为4?答案:glBegin(GL_POLYGON);int i;for(i=0;i<360;i++)glVertex2f(7+4*cos(i*PI/180.0f),3+4*sin(i*PI/180.0f));}glEnd(;5. 如何使用OpenGL在屏幕上绘制一个贝塞尔曲线,其中(1,2)、(3,4)、(5,6)、(7,7)是控制点?答案:GLfloat points[4][2] = {{1,2}, {3,4}, {5,6}, {7,7}};glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &points[0][0]);glEnable(GL_MAP1_VERTEX_3);glBegin(GL_LINE_STRIP);int i;for (i=0;i<=30;i++)glEvalCoord1f((GLfloat) i/30.0f);glEnd(;6. 如何使用OpenGL实现2D矢量图形的缩放操作,指定缩放中心点为(-2,4),缩放比例为1.3?答案:glTranslatef(-2,4,0);。

opengl相关3点成面和4点成面的原理

opengl相关3点成面和4点成面的原理

opengl相关3点成面和4点成面的原理OpenGL是一个用于渲染2D和3D图形的开放式图形库。

它使用一组API来处理图形渲染,包括几何图形的创建和变换,光照,纹理和着色等等。

在OpenGL中,可以通过3点或4点来创建一个面(或称为三角形或四边形)。

1.三点成面的原理:在OpenGL中,一个面是由三个顶点组成的。

这三个顶点将创建一个三角形,而该三角形也是计算机图形学中最基本的几何图形。

创建三角形的步骤如下:步骤1:定义顶点坐标首先,需要定义三个顶点的坐标。

顶点坐标是一个三维坐标(x,y,z),其中x、y表示顶点在屏幕上的位置,z表示顶点的深度,即相对于屏幕观测点的距离。

步骤2:创建缓冲区并绑定需要创建一个缓冲区对象,并将其绑定到OpenGL的上下文中。

缓冲区对象用于存储顶点数据。

步骤3:将顶点数据传输到缓冲区将定义好的顶点坐标数据传输到缓冲区对象中。

可以使用glBufferData函数来传输数据。

步骤4:创建着色器程序着色器程序用于定义顶点和片元的处理逻辑。

在这里,需要创建一个顶点着色器和一个片元着色器。

顶点着色器负责处理顶点的位置,而片元着色器负责处理像素的颜色。

步骤5:设置顶点属性指针需要告诉OpenGL如何解释顶点数据。

可以使用glVertexAttribPointer函数设置顶点属性指针。

步骤6:绘制三角形最后,使用glDrawArrays函数或glDrawElements函数将三角形绘制在屏幕上。

2.四点成面的原理:在OpenGL中,一个面也可以由四个顶点组成。

创建四边形的步骤与创建三角形的步骤类似,只不过多了一个顶点。

步骤1:定义顶点坐标同样,需要定义四个顶点的坐标。

步骤2:创建缓冲区并绑定与三角形的创建步骤相同,需要创建一个缓冲区对象,并将其绑定到OpenGL的上下文中。

步骤3:将顶点数据传输到缓冲区将定义好的顶点坐标数据传输到缓冲区对象中。

步骤4:创建着色器程序同样需要创建一个顶点着色器和一个片元着色器。

android 窗口级模糊实现方式

android 窗口级模糊实现方式

android 窗口级模糊实现方式摘要:1.引言2.Android 窗口级模糊的实现原理3.实现方法一:使用Renderscript 进行模糊处理4.实现方法二:使用OpenGL ES 进行模糊处理5.实现方法三:使用第三方库进行模糊处理6.总结正文:【引言】在Android 开发中,为了提高用户体验,我们常常需要对窗口进行模糊处理。

这种模糊处理可以使得窗口后面的内容不可见,从而避免因为多个窗口叠加而产生的视觉冲突。

本文将为大家介绍三种实现Android 窗口级模糊的方法。

【实现原理】Android 窗口级模糊的实现原理主要是通过对窗口的渲染进行干预,使得窗口中的像素点呈现出模糊的效果。

具体来说,就是将窗口中的每个像素点与周围像素点进行混合,使得最终呈现出的图像具有模糊的效果。

【实现方法一:使用Renderscript 进行模糊处理】Renderscript 是一种基于OpenGL ES 的渲染脚本引擎,可以用来进行各种复杂的渲染操作。

我们可以通过编写Renderscript 脚本,实现对窗口的模糊处理。

具体步骤如下:1.创建一个Renderscript 实例。

2.编写Renderscript 脚本,实现对窗口中的每个像素点与周围像素点进行混合的操作。

3.在窗口的onDraw 方法中,使用Renderscript 实例对窗口进行渲染。

【实现方法二:使用OpenGL ES 进行模糊处理】OpenGL ES 是一种基于OpenGL 的嵌入式图形渲染引擎,可以用来进行各种复杂的图形渲染操作。

我们可以通过创建一个OpenGL ES 的渲染上下文,实现对窗口的模糊处理。

具体步骤如下:1.创建一个OpenGL ES 的渲染上下文。

2.编写OpenGL ES 的着色器代码,实现对窗口中的每个像素点与周围像素点进行混合的操作。

3.在窗口的onDraw 方法中,使用OpenGL ES 的渲染上下文对窗口进行渲染。

三角形slg格式

三角形slg格式

三角形slg格式三角形SLG格式是一种用于描述三维图形的文件格式,它可以被许多3D软件所支持,如Blender、Maya等。

本文将从以下几个方面对三角形SLG格式进行详细介绍。

一、SLG的概述1.1 SLG的定义SLG(Scalable Vector Graphics)是一种基于XML的矢量图形标准,它可以用于描述二维图形和部分三维图形。

而三角形SLG格式则是在这个基础上扩展出来的一种专门用于描述三维模型的文件格式。

1.2 SLG的特点与传统位图不同,SLG是矢量图形,它具有无限放大不失真的特点。

此外,由于其基于XML,因此可以轻松地进行编辑和修改,并且还支持动画效果。

二、SLG文件结构2.1 文件头每个SLG文件都有一个文件头部分,其中包含了该文件的版本信息以及其他元数据信息。

2.2 几何体数据几何体数据包含了模型中所有顶点、法线和面片等信息。

每个面片都由若干个顶点组成,并且每个顶点都有自己的坐标值以及法线向量。

2.3 材质数据材质数据包含了模型中所有材质的信息,如颜色、纹理等。

每个材质都有自己的名称,并且可以包含多个纹理贴图。

2.4 动画数据动画数据包含了模型中所有动画的信息,如骨骼动画、形状关键帧等。

每个动画都有自己的名称,并且可以包含多个关键帧。

三、SLG文件格式3.1 顶点数据顶点数据是SLG文件中最基本的数据类型,它用于描述模型中所有顶点的位置和法线向量信息。

每个顶点都由其x、y、z坐标值以及nx、ny、nz法线向量组成。

3.2 面片数据面片数据用于描述模型中所有面片的信息,它由若干个顶点组成。

每个面片都有自己的索引值以及材质名称。

3.3 材质数据材质数据用于描述模型中所有材质的信息,它包含了颜色、纹理等属性。

每个材质都有自己的名称,并且可以包含多个纹理贴图。

3.4 动画数据动画数据用于描述模型中所有动画的信息,它可以包括骨骼动画、形状关键帧等。

每个动画都有自己的名称,并且可以包含多个关键帧。

谢尔宾斯三角形画法

谢尔宾斯三角形画法

谢尔宾斯三角形画法谢尔宾斯三角形是一种美妙的图形,它有着独特的美感和纹理,是一种很有趣的图形设计。

谢尔宾斯三角形最初由荷兰艺术家莫里兹·谢尔宾斯于20世纪50年代发明,它基于一个简单的构造方法,可以重复使用这个构造方法,绘制出一个非常复杂的、充满纹理的图形。

谢尔宾斯三角形的绘制方法非常简单,只需要在一个正方形的三条边上分别绘制两个边长相等的小正方形,然后连接两个相邻小正方形的它们的另外两个点,就得到了谢尔宾斯三角形。

这个构造方法可以重复使用,不断在新的小正方形上绘制更多的小正方形,就会获得一个越来越复杂的谢尔宾斯三角形。

在绘制谢尔宾斯三角形时,需要注意一些细节。

首先,要保证每个小正方形都是标准的正方形,边长相等。

其次,在将相邻的两个小正方形连接起来时,需要注意方向,确保连接线条是连续的,没有中断。

最后,在绘制过程中,需要仔细观察每个小正方形的位置和方向,以确保绘制得到的图形是完整的、对称的。

谢尔宾斯三角形具有很多美妙的特性。

首先,它是一个无限递归的图形,可以不断重复使用相同的构造方法,创造出越来越复杂的图形。

其次,它具有很强的对称性,每个小正方形的位置和方向都是对称的,让我们感受到了一种和谐美妙的对称感。

最后,谢尔宾斯三角形具有非常独特的纹理,让我们感受到了一种充满生命力的动态感。

谢尔宾斯三角形在我们的生活中有很多应用。

首先,它可以作为一种装饰品,用来装饰墙壁、家具等等。

其次,它可以作为一种教育工具,用来展示数学的美妙,让学生更好地理解几何概念。

最后,它可以作为一种灵感的源泉,启发我们在设计中运用对称感和纹理感,创造出更加美妙的图形和艺术品。

绘制谢尔宾斯三角形是一项非常有趣的艺术活动,让我们可以享受到细致、对称、纹理等等美好感受。

如果你对绘画感兴趣,不妨尝试一下绘制谢尔宾斯三角形,相信你会在其中找到一份属于自己的美妙感受。

计算机图形学实验OpenGL画三角形

计算机图形学实验OpenGL画三角形

XXXXXXXX大学(计算机图形学)实验报告实验名称 OpenGL画三角形实验时间年月日专业姓名学号预习操作座位号教师签名总评一、实验目的:1.了解OpenGL画图的基本思想;2.掌握OpenGL画图的基本步骤;二、实验原理:1.2.3.三、实验内容:#include "stdafx.h"#include "glut.h"#include "math.h"void display(){glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_TRIANGLES);glColor3f(1,1,0);glVertex2f(0,0.7);glColor3f(0,1,1);glVertex2f(-0.7,-0.7);glColor3f(1,0,1);glVertex2f(0.7,-0.7);glEnd();glFlush();}int main( int argc, char **argv){glutInit(&argc, argv);glutInitWindowPosition(200,100);glutCreateWindow("Green Triangle");glutDisplayFunc(display);int();glutMainLoop();return 0;}四、实验总结:OpenGL的建立与前面学的画直线法和画圆法不同,这个要在Win32 Console Application 中建立,并且在下一步中选择A “Hello,World!” application。

另外,系统中需要增加三个文件,分别是glut.h,glut32.lib和glut32.dll。

glut.h放在X:\Microsoft Visual Studio\VC98\A TL\Includeglut32.lib放在X:\Microsoft Visual Studio\VC98\Libglut32.dll放在C:\WINDOWS\system32代码段中glColor3f(0.0,0.0,0.0);是修改颜色的,可以按照自己的要求修改颜色。

OpenGL学习脚印:绘制移动三角形

OpenGL学习脚印:绘制移动三角形

OpenGL学习脚印:绘制移动三角形OpenGL学习脚印: 绘制移动三角形写在前面本节内容翻译和整理自《Learning Modern 3D Graphics Programming》Chapter3内容。

作为学习目的,本文提炼其主要观点,删除了大部分细节部分的详述内容。

另外原文示例代码有它独有的框架组织方式,为了保持自己的一贯风格,这里重写了示例程序代码,如果发现错误,请纠正我。

转载需经过作者同意。

通过本节,你可以了解到:更新顶点数据的3种步步改进的方式在着色器中使用uniform变量本节的要点就在于: 体会如何从最初的基本思路出发,逐步改进,并完成顶点数据更新的方法。

1.在cpu内计算更新的顶点值绘制一个可移动三角形的简单思路就是修改顶点的位置。

从前面讲述可知,顶点位置存储在缓存对象VBO中,那么我们要做的就是更新VBO中的数据。

更改顶点数据由两个步骤,第一计算坐标偏移量,第二应用偏移量。

计算偏移量的代码如下所示:[cpp]view plaincopyprint?1. void ComputePositionOffsets(float &fXOffset, float &fYOffset)2. {3. const float fLoopDuration = 5.0f;4. const float fScale = 3.14159f * 2.0f / fLoopDuration;5.6. float fElapsedTime = glutGet(GLUT_ELAPSED_TIME) / 1000.0f;7.8. float fCurrTimeThroughLoop = fmodf(fElapsedTime, fLoopDuration);9.10. fXOffset = cosf(fCurrTimeThroughLoop * fScale) * 0.5f;11. fYOffset = sinf(fCurrTimeThroughLoop * fScale) * 0.5f;12. }补充:如何理解偏移量和三角形的圆周运动这涉及到一些简单的数学计算,如下图所示:这里fLoopDuration设为5.0,然后做求模计算,则fCurrTimeThroughLoop范围在[0,5.0f)之间,最后利用正弦余弦求出XY偏移量。

三角面绘制方法

三角面绘制方法

三角面绘制方法三角面的绘制方法有很多种,其中最常见的有以下几种:1.使用直尺和圆规绘制三角形:首先确定三角形的三个顶点,在纸上画出这三个点,然后使用直尺连接这三个点,得到三角形的三条边。

接着使用圆规确定角度,绘制出三角形的三个角。

最后可以使用直尺将三角形的内部填充,形成一个实心的三角形。

2.利用三角形的内角和为180度的性质绘制三角形:首先确定三角形的一个顶点和两条边的长度,利用三角形内角和为180度的性质计算出另外两个角的大小,从而确定三角形的另外两个顶点位置。

然后使用直尺连接这三个点,得到三角形的三条边。

最后可以使用圆规将三角形的内部填充,形成一个实心的三角形。

3.使用透视法绘制三角形:透视法是绘图中常用的一种方法,可以使画面更有立体感。

首先确定三角形的三个顶点,然后使用透视法将这三个点在画面中按比例放大或缩小,从而得到三角形的真实形状。

接着使用直尺连接这三个点,得到三角形的三条边。

最后可以根据需要在三角形的内部加入阴影或光线效果,使画面更加生动。

4.使用计算机软件绘制三角形:在现代科技发达的时代,计算机软件可以帮助我们更加轻松地绘制三角形。

通过CAD软件等工具,我们可以简单地输入三角形的各个参数,软件会自动绘制出精确的三角形图形。

同时,我们还可以对三角形的颜色、线条风格等进行调整,使画面更加丰富多彩。

总的来说,三角形的绘制方法有很多种,可以根据不同的需求和情境选择合适的方法进行绘制。

在绘制三角形时,要注意准确测量和计算,确保绘制出的图形符合实际要求。

希望以上介绍的方法可以帮助到您。

三角形slg格式

三角形slg格式

三角形SLG格式什么是SLG格式SLG格式是指三角形SLG格式,它是一种用于描述和表示三角形的数据格式。

在计算机图形学中,三角形是最基本的图元之一,用于构建复杂的模型和场景。

SLG格式提供了一种简洁而高效的方式来存储和处理三角形数据。

SLG格式的结构SLG格式由一系列的顶点和面组成。

每个顶点包含位置坐标、法线向量和纹理坐标等信息。

而每个面则由三个顶点索引组成,表示一个三角形。

以下是一个示例的SLG文件:# SLG Format Example## Verticesv -1.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0v 1.0 0.0 0.0 -1.0 0.0 0.5 1.0 1.5v -1.5 -1.5 -2.5 -2.5 -2.5 -2.5 -3.5 -3.## Facesf 1/1/1 2/2/2 3/3/3在上述示例中,我们可以看到SLG文件分为两个部分:顶点部分(Vertices)和面部分(Faces)。

顶点部分定义了每个顶点的位置、法线和纹理坐标,而面部分则使用顶点的索引来定义三角形。

SLG格式的优势SLG格式具有以下优势:1.简洁高效:SLG格式采用了紧凑的数据结构,只存储必要的信息,使得文件大小较小,加载和处理速度快。

2.灵活可扩展:SLG格式支持自定义属性,可以根据需要添加额外的顶点属性或面属性。

3.易于处理:由于SLG格式的结构清晰简单,对于计算机图形学算法和渲染器来说,解析和处理SLG文件非常方便。

SLG格式与其他格式的比较相比于其他三角形数据格式(如OBJ、FBX等),SLG格式具有以下特点:•SLG格式相对较小,占用更少的存储空间。

•SLG文件加载速度更快,因为它只包含必要的信息。

•SLG文件易于解析和处理,适用于实时渲染和计算机图形学算法。

然而,SLG格式也有一些限制。

由于其简洁性质,SLG格式可能不适合存储复杂模型或包含大量顶点属性和面属性的场景。

在这种情况下,其他格式可能更加适合。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EGLConfigconfig;
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);
相关文档
最新文档