Java Libgdx SpriteBatch.draw()指定4个顶点
我正在使用libGdx创建一个2d游戏,并尝试使用这个特殊的方法来绘制一个简单的2d纹理,单独指定4个顶点Java Libgdx SpriteBatch.draw()指定4个顶点,java,opengl,sprite,draw,libgdx,Java,Opengl,Sprite,Draw,Libgdx,我正在使用libGdx创建一个2d游戏,并尝试使用这个特殊的方法来绘制一个简单的2d纹理,单独指定4个顶点 draw(Texture texture, float[] spriteVertices, int offset, int length) 说明:使用给定顶点绘制矩形。必须有4个顶点,每个顶点按以下顺序由5个元素组成:x、y、颜色、u、v 其他的画法很好用,但我不能用这个。我尝试的是这个 batch.draw(boxTexture, new float[] {-5, -5, 0, Col
draw(Texture texture, float[] spriteVertices, int offset, int length)
说明:使用给定顶点绘制矩形。必须有4个顶点,每个顶点按以下顺序由5个元素组成:x、y、颜色、u、v
其他的画法很好用,但我不能用这个。我尝试的是这个
batch.draw(boxTexture, new float[] {-5, -5, 0, Color.toFloatBits(255, 0, 0, 255), 0, 0,
5, -5, 0, Color.toFloatBits(255, 255, 255, 255), 1, 0,
5, 5, 0, Color.toFloatBits(255, 255, 255, 255), 1, 1,
-5, 5, 0, Color.toFloatBits(255, 255, 255, 255), 0, 1}, 3, 3);
我不太熟悉OpenGL的工作原理,特别是偏移量和长度应该是多少。有谁更了解这项工作吗
更新:
它使用网格工作,但后来发现没有透明度,这很烦人。最后,我只是在SpriteBatch中添加了一个自定义方法,因为它更容易让我动脑。顶点是顺时针绘制的
public void drawQuad (Texture texture, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float col) {
if (!drawing) throw new IllegalStateException("SpriteBatch.begin must be called before draw.");
if (texture != lastTexture) {
switchTexture(texture);
} else if (idx == vertices.length) //
renderMesh();
final float u = 0;
final float v = 1;
final float u2 = 1;
final float v2 = 0;
vertices[idx++] = x1;
vertices[idx++] = y1;
vertices[idx++] = col;
vertices[idx++] = u;
vertices[idx++] = v;
vertices[idx++] = x2;
vertices[idx++] = y2;
vertices[idx++] = col;
vertices[idx++] = u;
vertices[idx++] = v2;
vertices[idx++] = x3;
vertices[idx++] = y3;
vertices[idx++] = col;
vertices[idx++] = u2;
vertices[idx++] = v2;
vertices[idx++] = x4;
vertices[idx++] = y4;
vertices[idx++] = col;
vertices[idx++] = u2;
vertices[idx++] = v;
}
偏移量和长度用于获取
精灵顶点的切片。在您的例子中,它们应该是0
和数组.length
(将顶点放在局部变量中以计算长度)
另外,我不确定它是否需要,但我强烈怀疑应该以三角形友好的方式传递顶点。您当前正在执行逆时针枚举。通常,对于四边形,您应该使用如下的Z模式:
3-4
\
1-2
4-3
1-2
(这是因为OpenGL获取列表中的每组3个顶点并渲染生成的三角形,因此顶点1、2、3和2、3、4都应该是有用的三角形。)偏移量是数组中开始的位置(对于您来说为0),长度是数组需要经过的索引数。对于您的情况:4个点,每个点有5条数据:4*5=20
Draw从未开始渲染过程,因为值3浮动不足以生成三角形(最小值为15)
至于p.T.的答案,这个特殊的函数做扇形渲染,所以正确的顺序是顺时针或逆时针
此外:
你将这些点和纹理放在其中的顺序将使纹理倒置(我不知道这是否是有意的)
这是错误的,需要这样:
3-4
\
1-2
4-3
1-2
谢谢,但还是不走运。我是通过绘制网格来实现的,所以我会朝这个方向去做。我注意到你的浮点数组每个顶点应该有5个元素,但是在你的例子中你指定了6个元素-x,y,?未知?,颜色,u,v-也许这就是为什么这对你不起作用的原因?另外,不确定为什么将偏移量/长度指定为3,3-是否应该使用0,floatarray.length?(我意识到这是一个古老的问题,但对我来说,这是谷歌搜索结果中最重要的一个。)