OpenGLJavaGltexCoord问题。我做得不对吗?

OpenGLJavaGltexCoord问题。我做得不对吗?,java,opengl,sprite-sheet,Java,Opengl,Sprite Sheet,好的,我是一名自学成才的程序员,我正在尝试使用lwjgl和slik utils制作一个库,提供制作游戏的工具。我一直在尝试制作一张spritesheet,我正在使用glTexCoord()尝试只获取图像的一部分。但尽我最大的努力,我没有工作。这是绘图代码 public SpriteSheet draw(int x, int y, Point2D p) { GL11.glPushMatrix(); float x1 = p.posX * size + (size / 2F)

好的,我是一名自学成才的程序员,我正在尝试使用lwjgl和slik utils制作一个库,提供制作游戏的工具。我一直在尝试制作一张spritesheet,我正在使用glTexCoord()尝试只获取图像的一部分。但尽我最大的努力,我没有工作。这是绘图代码

public SpriteSheet draw(int x, int y, Point2D p)
    {
    GL11.glPushMatrix();
    float x1 = p.posX * size + (size / 2F);
    float y1 = p.posY * size + (size / 2F);
    float d = 1F / texture.getImageHeight();
    int i = size / 2;
    //Texture centers for coords
    float x2 = x1 * d;
    float y2 = y1 * d;
    float d1 = i * d;

    GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture.getTextureID());
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2f(x2 - d1, y2 - d1);
    //GL11.glTexCoord2f(0, 0);
    GL2D.vertex(x - i, y - i);
    GL11.glTexCoord2f(x2 - d1, y2 + d1);
    //GL11.glTexCoord2f(0, 1);
    GL2D.vertex(x - i, y + i);
    GL11.glTexCoord2f(x2 + d1, y2 + d1);
    //GL11.glTexCoord2f(1, 1);
    GL2D.vertex(x + i, x + i);
    GL11.glTexCoord2f(x2 + d1, y2 - d1);
    //GL11.glTexCoord2f(1, 0);
    GL2D.vertex(x - i, y + i);
    GL11.glEnd();
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);
    GL11.glPopMatrix();
    //TexturedQuad2D t = new TexturedQuad2D(32, 32, Color.black, texture);
    //t.draw(x, y);
    return this;
}

是的,你做错了:)
你的x和y是你的世界空间坐标,而不是你的纹理坐标空间,想象你的x和y在坐标700800上,你的纹理大小是512。700/512=1.4,纹理坐标从0变为1。
所以,作为第一步,尝试将纹理坐标设置为0和1

 GL11.glTexCoord2f(0, 0);
 GL11.glTexCoord2f(0, 1);
 GL11.glTexCoord2f(1, 1);
 GL11.glTexCoord2f(1, 0);
现在,作为第二步,开始了解如何计算纹理坐标的一部分
所以,如果我们有一个有两帧的精灵,第一帧从0到0.5,第二帧从0.5到1

//first frame would be
 GL11.glTexCoord2f(0, 0);
 GL11.glTexCoord2f(0, 1);
 GL11.glTexCoord2f(0.5, 1);
 GL11.glTexCoord2f(0.5, 0);
//second frame would be
 GL11.glTexCoord2f(0.5, 0);
 GL11.glTexCoord2f(0.5, 1);
 GL11.glTexCoord2f(1, 1);
 GL11.glTexCoord2f(1, 0);
现在,作为第三步,编写一个sprite类来计算这个坐标


第二个注意事项是您是否为OpenGL anywhere GL11.glEnable(GL11.GL\U TEXTURE\U 2D)启用纹理;要获得任何纹理?

我启用了2d纹理,使用我的世界坐标是什么意思?我不认为我在用这些来计算纹理坐标,我已经启用了2d纹理,你说用我的世界坐标是什么意思?我不认为我在用这些来计算纹理坐标。您可能会将点2D与绘制坐标混淆。传递给方法的x和y是绘制坐标,点是实际图像上的精灵坐标。因此,如果点是0,0,那么它应该在图像的左下角绘制第一个正方形。正方形应具有大小变量的长度和宽度。事实上,我知道所有的计算都是正确的。我确实误解了坐标。你们在屏幕上看到什么了吗?如果没有,请尝试禁用面剔除GL11.glDisable(GL11.GLU剔除面);当p为0时,它应该是正确的,我想,必须重新检查坐标顺序,但是当p为256,256时,它是不正确的,因为这样你会得到256的大小;256*256+(256/2)我设置的点系统在本例中的工作方式与此不同。它将纹理拆分为大小为int的正方形,然后说0,0是左下角的正方形,然后在256x256纹理中,大小为16,右上角的正方形将是15,15i尝试在绘图时禁用面剔除,但没有效果。老实说,我看不出哪里出了问题:(