我正在研究一个项目,我试图在我的形状周围包裹一个图像,特别是一个球体。问题是图像确实覆盖了大部分球体,只覆盖了部分。如何将图像调整到完全适合整个球体的位置?
import java.io.IOException;
import org.lwjgl.*;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.*;
import static org.lwjgl.opengl.EXTFramebufferObject.glGenerateMipmapEXT;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.util.glu.GLU.gluPerspective;
import org.lwjgl.util.glu.Sphere;
import org.newdawn.slick.opengl.*;
import org.newdawn.slick.util.ResourceLoader;
private void render() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0, 0, -8);
glRotatef(rotateAngle, 0, 1, 0);
Sphere s = new Sphere();
s.setNormals(GL_SMOOTH);
s.setTextureFlag(true);
glEnable(GL_TEXTURE_2D);
glGenerateMipmapEXT(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, t.getTextureID());
s.draw(3, 64, 64);
}
答案 0 :(得分:0)
根据我为LWJGL Sphere
类找到的文档,您的纹理应该已覆盖整个球体。代码中的一个问题是在绑定纹理之前设置了一些纹理属性。您希望在glBindTexture
和glGenerateMipmapEXT()
来电之前移动glTexParamteri
来电。
要使用固定的OpenGL管道控制纹理的缩放,可以通过将矩阵模式设置为GL_TEXTURE
来将变换应用于纹理坐标。例如,要使纹理更大,请尝试:
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glScalef(0.5f, 0.5f, 0.5f);
glMatrixMode(GL_MODELVIEW);
通过将纹理坐标除以因子2,您将使纹理图像看起来大两倍。
答案 1 :(得分:0)
为了使整个图像覆盖形状,纹理必须在2的幂中,例如32x1024或128x128。