我已用下面的代碼生成的n邊多邊形:如何確定UV紋理座標n邊多邊形
public class Vertex
{
public FloatBuffer floatBuffer; // buffer holding the vertices
public ShortBuffer indexBuffer;
public int numVertices;
public int numIndeces;
public Vertex (float[] vertex)
{
this.setVertices(vertex);
}
public Vertex (float[] vertex, short[] indices)
{
this.setVertices(vertex);
this.setIndices(indices);
}
private void setVertices(float vertex[])
{
// a float has 4 bytes so we allocate for each coordinate 4 bytes
ByteBuffer factory = ByteBuffer.allocateDirect (vertex.length * 4);
factory.order (ByteOrder.nativeOrder());
// allocates the memory from the byte buffer
floatBuffer = factory.asFloatBuffer();
// fill the vertexBuffer with the vertices
floatBuffer.put (vertex);
// set the cursor position to the beginning of the buffer
floatBuffer.position (0);
numVertices = vertex.length;
}
protected void setIndices(short[] indices)
{
ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
ibb.order(ByteOrder.nativeOrder());
indexBuffer = ibb.asShortBuffer();
indexBuffer.put(indices);
indexBuffer.position(0);
numIndeces = indices.length;
}
}
然後創建n邊多邊形:
public class Polygon extends Mesh
{
public Polygon(int lines)
{
this(lines, 1f, 1f);
}
public Polygon(int lines, float xOffset, float yOffset)
{
float vertices[] = new float[lines*3];
float texturevertices[] = new float[lines*2];
short indices[] = new short[lines+1];
for (int i = 0; i < lines;i++)
{
vertices[i*3] = (float) (xOffset * Math.cos(2*Math.PI*i/lines));
vertices[(i*3)+1] = (float) (yOffset * Math.sin(2*Math.PI*i/lines));
vertices[(i*3)+2] = 0.0f;//z
indices[i] = (short)i;
texturevertices[i*2] =(float) (Math.cos(2*Math.PI*i/lines)/2 + 0.5f);
texturevertices[(i*2)+1] = (float) (Math.sin(2*Math.PI*i/lines)/2 + 0.5f);
}
indices[lines] = indices[0];
shape = new Vertex(vertices,indices);
texture = new Vertex(texturevertices, indices);
}
}
正如你所看到的那樣,我正在按順序設置indeces,這樣我就可以將它們呈現爲線條。現在我希望紋理多邊形。我該怎麼做呢?
我曾嘗試實現這個:
從這裏:http://en.wikipedia.org/wiki/UV_mapping
但是,結果是真窮。我如何瀏覽座標並確定紋理的排序?
一個相關的參考可以在這裏找到:How to draw a n sided regular polygon in cartesian coordinates?
編輯我更新根據下面馬蒂奇Oblak給出的答案,這就是結果:
旋轉是沒關係。
這是非常接近...但沒有雪茄。原有的質感如下:
你好!非常感謝你 - 這種方式比我想要的更近,我已經嘗試過了,而且我可能只是有點偏離軌道,我可以請你再看一次嗎?我編輯了上面的問題。 – 2013-03-22 12:42:34
它的一切都很好,你只需要最後一個閉合頂點。indices [lines] = indices [0](或index [1]如果indices [0]位於中心)也不會忘記在索引中需要額外的位置所以它應該被定義爲short [lines + 1](或lines + 2) – 2013-03-22 12:59:51
我有最後一個頂點的額外索引,我仍然得到相同的結果。我添加了更多的代碼,以便您可以獲得完整的圖片。對不起,只是複製循環,這是我的愚蠢。 – 2013-03-22 14:12:15