绘制平面上的多边形

计算机里的3D图形其实是由许多个平面组合而成的,所谓“绘制3D图形”,其实是通过多个平面图形形成的。下面先从绘制平面图形开始。

调用GL10图形绘制2D图形的步骤如下:

1、调用GL10的glEnableClientState(GL10.GL_VERTEX_ARRAY):方法启用顶点坐标数组。

2、调用GL10的glEnableClientState(GL10.GL_COLOR_ARRAY):方法启用顶点颜色数组。

3、调用GL10的glVertexPointer(int  size , int  type , int  stride ,  Buffer  pointer)方法设置顶点的位置数据。这个方法中pointer参数用于指定顶点坐标值,但这里并未使用三维数组来指定每个顶点X、Y、Z坐标的值,pointer依然是一个一维数组,其格式为(x1,y1,z1,x2,y2,z2,x3,y3,z3,...xN,yN,zN);也就是该数组里将会包含3N个数值,每3个值指定一个顶点的X、Y、Z坐标值。第一个参数size指定多少个元素指定一个顶点位置,该size参数通常总是3;type参数指定顶点坐标值的类型,如果顶点坐标值为float类型,则指定为GL10.GL_FLOAT;如果顶点坐标值为整数,则指定为GL10.GL_FIXED.

4、调用GL10的glColorPointer(int  size , int  type , int  stride ,  Buffer  pointer)方法设置顶点的颜色数据。这个方法中pointer参数用于指定顶点颜色值,但这里并未使用三维数组来指定每个顶点X、Y、Z坐标的值,pointer依然是一个一维数组,其格式为(r1,g1,b1,a1,r2,g2,b2,a2,r3,g3,b3,a3...rN,gN,bN,aN);也就是该数组里将会包含4N个数值,每4个值指定一个顶点的红、绿、蓝、透明度的颜色值。第一个参数size指定多少个元素指定一个顶点位置,该size参数通常总是4;type参数指定顶点坐标值的类型,如果顶点坐标值为float类型,则指定为GL10.GL_FLOAT;如果顶点坐标值为整数,则指定为GL10.GL_FIXED.

5、调用GL10的glDrawArrays(int  mode , int  first , int count)方法绘制平面,该方法的第一个参数用于中鼎绘制图形的类型,第二个参数指定从哪个顶点开始绘制,第三个参数指定总共绘制的顶点数量。

6、绘制完成后,调用GL10的glFinish()方法结束绘制;并调用glDisableClientState(int)方法来停用顶点坐标数据、顶点颜色数据。

掌握上面的步骤之后,接下来通过示例程序来绘制几个简单的图形。

先为该程序提供一个Renderer实现类,该实现类的代码如下:

时间: 2024-10-12 17:38:08

绘制平面上的多边形的相关文章

平面上两多边形相交

public static void Run_PolygonsIntersection() { int count = 0; Ps1[0] = new Point(0, 0); Ps1[1] = new Point(3, 0); Ps1[2] = new Point(0, 3); Ps1[3] = new Point(0, 0); Ps2[0] = new Point(1, 1);; Ps2[1] = new Point(4, 1); Ps2[2] = new Point(4, 4); Ps2[

Quartz2D常见图形的绘制:线条、多边形、圆

UI高级 Quartz2D http://ios.itcast.cn  iOS学院 掌握 drawRect:方法的使用 常见图形的绘制:线条.多边形.圆 绘图状态的设置:文字颜色.线宽等 图形上下文状态的保存与恢复(图形上下文栈) 图片裁剪 截图 什么是Quartz2D Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作 Ø绘制图形 : 线条\三角形\矩形\圆\弧等 Ø绘制文字 Ø绘制\生成图片(图像) Ø读取\生成PDF Ø截图\裁剪图片 Ø自定义

Unity获取摄像机在某个平面上的视野范围

这是已知平面上的一个点和平面的法线的情况下,求摄像机在平面看到的视野范围,下图绿色的框框就是了. 效果: 代码: 1 using UnityEngine; 2 using System.Collections; 3 using System; 4 5 public class CameraPlaneView : MonoBehaviour 6 { 7 #region for debug 8 public Camera viewCamera; 9 10 void Update() 11 { 12

Problem A: 平面上的点——Point类 (III)

Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定.现在我们封装一个"Point类"来实现平面上的点的操作. 根据"append.cc",完成Point类的构造方法和show()方法,输出各Point对象的构造和析构次序.实现showPoint()函数. 接口描述: showPoint()函数按输出格式输出Point对象,调用Point::show()方法实现. Point::show()方法:按输出格式输出Point对象. I

POJ C程序设计进阶 编程题#4:寻找平面上的极大点

编程题#4:寻找平面上的极大点 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个平面上,如果有两个点(x,y),(a,b),如果说(x,y)支配了(a,b),这是指x>=a,y>=b; 用图形来看就是(a,b)坐落在以(x,y)为右上角的一个无限的区域内. 给定n个点的集合,一定存在若干个点,它们不会被集合中的任何一点所支配,这些点叫做极大值点. 编程找出所有的极大

Problem E: 平面上的点——Point类 (II)

Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定.现在我们封装一个"Point类"来实现平面上的点的操作. 根据"append.cc",完成Point类的构造方法和show()方法,输出各Point对象的构造和析构次序. 接口描述: Point::show()方法:按输出格式输出Point对象. Input 输入多行,每行为一组坐标"x,y",表示点的x坐标和y坐标,x和y的值都在double数据范围内.

Problem A: 平面上的点和线——Point类、Line类 (I)

Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定,两点确定一条线段.现在我们封装一个"Point类"和"Line类"来实现平面上的点的操作. 根据"append.cc",完成Point类和Line类的构造方法和show()方法. 接口描述: Point::show()方法:按格式输出Point对象. Line::show()方法:按格式输出Line对象. Input 输入的第一行为N,表示后面有N行测试样例

Problem D: 平面上的点——Point类 (I)

Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定.现在我们封装一个"Point类"来实现平面上的点的操作. 根据"append.cc",完成Point类的构造方法和show()方法. 接口描述: Point::show()方法:按输出格式输出Point对象. Input 输入多行,每行为一组坐标"x,y",表示点的x坐标和y坐标,x和y的值都在double数据范围内. Output 输出为多行,每行为一个点

uva10245-The Closest Pair Problem(平面上的点分治)

解析:平面上的点分治,先递归得到左右子区间的最小值d,再处理改区间,肯定不会考虑哪些距离已经大于d的点对,对y坐标归并排序,然后从小到大开始枚举更新d,对于某个点,x轴方向只用考虑[x-d,x+d](x是分的中轴线),y轴方向只用考虑[y-d,y](y是这个点的y值),因为d值一直在变小,所以这个矩形包含的点数很少. 代码 #include<cstdio> #include<cstring> #include<string> #include<vector>