gpt4 book ai didi

java - opengl java glTexCoord 问题。我做得不对吗?

转载 作者:行者123 更新时间:2023-12-01 15:17:01 25 4
gpt4 key购买 nike

好吧,我是一个自学成才的程序员,我正在尝试使用 lwjgl 和 slik-utils 制作一个库来提供制作游戏的工具。我一直在尝试制作 Sprite 表,并且我正在使用 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在坐标700, 800上,你的纹理大小是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);

现在作为第二步开始弄清楚如何计算纹理坐标的一部分
因此,如果我们有一个具有 2 帧的 Sprite ,我们将第一帧从 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 类来为您计算这个坐标!

ps。第二个通知是您是否在任何地方启用 OpenGL 纹理 GL11.glEnable(GL11.GL_TEXTURE_2D); 来获取任何纹理?

关于java - opengl java glTexCoord 问题。我做得不对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11480178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com