LWJGL / OpenGL如何调整图像大小以适应我的球体?

时间:2014-05-17 02:25:57

标签: java opengl lwjgl

我正在研究一个项目,我试图在我的形状周围包裹一个图像,特别是一个球体。问题是图像确实覆盖了大部分球体,只覆盖了部分。如何将图像调整到完全适合整个球体的位置?

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);
}

2 个答案:

答案 0 :(得分:0)

根据我为LWJGL Sphere类找到的文档,您的纹理应该已覆盖整个球体。代码中的一个问题是在绑定纹理之前设置了一些纹理属性。您希望在glBindTextureglGenerateMipmapEXT()来电之前移动glTexParamteri来电。

要使用固定的OpenGL管道控制纹理的缩放,可以通过将矩阵模式设置为GL_TEXTURE来将变换应用于纹理坐标。例如,要使纹理更大,请尝试:

glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glScalef(0.5f, 0.5f, 0.5f);
glMatrixMode(GL_MODELVIEW);

通过将纹理坐标除以因子2,您将使纹理图像看起来大两倍。

答案 1 :(得分:0)

为了使整个图像覆盖形状,纹理必须在2的幂中,例如32x1024或128x128。