我在我的Android游戏中使用OpenGL ES版本3并实现了实例化。如果我使用相同大小/尺寸的相同顶点的多边形,它的效果很好。如果我想为每一帧创建更改精灵状态,我可以跳转到纹理图集的不同UV坐标。
v_TexCoordinate = a_TexCoordinate + uvCoordsOffset[gl_InstanceID];
那就是..我只是用一个由偏移坐标组成的均匀vec来改变纹理坐标。
但是 - 问题来了。
如果我想做同样但具有不同尺寸的精灵怎么办?
在drawcall中......
GLES30.glDrawElementsInstanced(GLES30.GL_TRIANGLES, 6, GLES20.GL_UNSIGNED_SHORT, indexOffset, nFallingObj);
我只能发送一个多边形,即截图中的绿色恐龙顶点。我把它作为基本多边形,我想要达到地图集的红色恐龙。如上所述,我可以使用纹理偏移轻松完成此操作但是你看它是怎么变成的?使用了绿色恐龙的多边形,但我想要改变红色恐龙的颜色。
这个问题有没有简单的解决方案? 提前谢谢!!!
一些源代码
draw-method
public void drawFallingObjects() {
GLES30.glUseProgram(mProgramHandle);
GLES30.glEnableVertexAttribArray(mPositionHandle);
GLES30.glVertexAttribPointer(mPositionHandle, CreateGLContext.POSITION_DATA_SIZE, GLES20.GL_FLOAT, false, CreateGLContext.STRIDE, 0);
GLES30.glEnableVertexAttribArray(mTextureCoordinateHandle);
GLES30.glVertexAttribPointer(mTextureCoordinateHandle, CreateGLContext.TEXTURE_COORDINATE_DATA_SIZE, GLES20.GL_FLOAT, false,
CreateGLContext.STRIDE, CreateGLContext.POSITION_DATA_SIZE * CreateGLContext.BYTES_PER_FLOAT);
GLES30.glUniform2fv(uvCoordsOffsetLoc, nFallingObj, uvOffsetVec, 0);
GLES30.glUniformMatrix4fv(mMVPMatrixHandle, nFallingObj, false, mMVPMatrixMajor, 0);
GLES30.glDrawElementsInstanced(GLES30.GL_TRIANGLES, 6, GLES20.GL_UNSIGNED_SHORT, indexOffset, nFallingObj);
}
顶点着色器代码
void main()
{
v_Color = a_Color;
v_TexCoordinate = a_TexCoordinate + uvCoordsOffset[gl_InstanceID];
gl_Position = u_MVPMatrix[gl_InstanceID] * a_Position;
}
答案 0 :(得分:0)
如果我想做同样的事情但是有不同的精灵怎么办? 尺寸?
您的MVP矩阵可以编码缩放和倾斜,这是调整屏幕精灵大小所需的全部内容。