我正在尝试为OpenGL ES渲染器创建一个有用/通用的二维多边形类。 当我创建一个多边形时,我会给它几个参数:
Polygon(Vector3 centerpoint, int numVertices, float inPolySize)
接着,我尝试生成顶点。这是我遇到困难的地方。我需要确定顶点的数量,获取一个角度,找到该角度的x/y位置,并考虑大小,然后再根据位置进行偏移。
OpenGL使用大量的数据数组。没有像Vector3列表这样好用的东西。相反,它是由float[]数组组成的,第一个索引是X1,第二个是Y1,第三个是Z1,第四个是X2,以此类推...
final int XPOS = 0;
final int YPOS = 1;
final int ZPOS = 2;
int mvSize = 3; // (x, y, z);
float[] vertices = new float[mvSize * mNumVertices];
for (int verticeIndex = 0; verticeIndex < mNumVertices; verticeIndex++)
{
double angle = 2 * verticeIndex * Math.PI / mNumVertices;
vertices[mvSize * verticeIndex + XPOS] = (((float)Math.cos(angle)) * mPolygonSize) + mPosition.GetX();
vertices[mvSize * verticeIndex + YPOS] = (((float)Math.sin(angle)) * mPolygonSize) + mPosition.GetY();
vertices[mvSize * verticeIndex + ZPOS] = mPolygonSize + mPosition.GetZ();
}
很遗憾,我的三角形从来都不是完美的。它倾斜了很多,尺寸似乎也不对...
我猜我把尺寸放到了错误的公式中,有人可以帮忙吗?
编辑: 这里有一些样本数据 Polygon test = new Polygon( new Vector3(0, 1, 0), 3, .5f);
vertices[0] = -0.25
vertices[1] = 1.4330127
vertices[2] = 0.0
vertices[3] = -0.25
vertices[4] = 0.5669873
vertices[5] = 0.0
vertices[6] = 0.5
vertices[7] = 1.0
vertices[8] = 0.0
vertices[9] = -0.25
vertices[10] = 1.4330127
vertices[11] = 0.0
vertices[0]=Math.cos(0)*0.5f+0.0f=1.0f*0.5f=0.5f
。(尽管代码只是将构造函数参数存储在字段中...) - Stefan Hanke