关闭

【LWJGL2 WIKI】【辅助库篇】Slick-Util库:第一部分-读取图片

标签: javalwjgl
519人阅读 评论(0) 收藏 举报
分类:

原文:http://wiki.lwjgl.org/wiki/Slick-Util_Library_-Part_1-_Loading_Images_for_LWJGL

Slick-Util支持png, jpg, gif, tga格式图片,它可以读取它们用作OpenGL纹理。
用它读图片很简单,图片的细节会被存在Slick-Util的Texture类里。Texture类为你提供一些属性,比如宽和高之类的。用TextureLoader类和getTexuture()方法读取图片到Texture类中,需要先指定图片类型(”PNG”,”TGA”等),然后指定图片路径。下面是个例子:

Texture texture;

public void init() throws IOException {

  texture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("res/image.png"));
}

读完后,用Texture.bind()绑定纹理。
将一个纹理绑定到OpenGL方形的完整代码如下:

import java.io.IOException;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.newdawn.slick.Color;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import org.newdawn.slick.util.ResourceLoader;

public class TextureExample {

    /** The texture that will hold the image details */
    private Texture texture;


    /**
     * Start the example
     */
    public void start() {
        initGL(800,600);
        init();

        while (true) {
            GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
            render();

            Display.update();
            Display.sync(100);

            if (Display.isCloseRequested()) {
                Display.destroy();
                System.exit(0);
            }
        }
    }

    /**
     * Initialise the GL display
     *
     * @param width The width of the display
     * @param height The height of the display
     */
    private void initGL(int width, int height) {
        try {
            Display.setDisplayMode(new DisplayMode(width,height));
            Display.create();
            Display.setVSyncEnabled(true);
        } catch (LWJGLException e) {
            e.printStackTrace();
            System.exit(0);
        }

        GL11.glEnable(GL11.GL_TEXTURE_2D);              

        GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);         

            // enable alpha blending
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

            GL11.glViewport(0,0,width,height);
        GL11.glMatrixMode(GL11.GL_MODELVIEW);

        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glOrtho(0, width, height, 0, 1, -1);
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
    }

    /**
     * Initialise resources
     */
    public void init() {

        try {
            // load texture from PNG file
            texture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("res/image.png"));

            System.out.println("Texture loaded: "+texture);
            System.out.println(">> Image width: "+texture.getImageWidth());
            System.out.println(">> Image height: "+texture.getImageHeight());
            System.out.println(">> Texture width: "+texture.getTextureWidth());
            System.out.println(">> Texture height: "+texture.getTextureHeight());
            System.out.println(">> Texture ID: "+texture.getTextureID());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * draw a quad with the image on it
     */
    public void render() {
        Color.white.bind();
        texture.bind(); // or GL11.glBind(texture.getTextureID());

        GL11.glBegin(GL11.GL_QUADS);
            GL11.glTexCoord2f(0,0);
            GL11.glVertex2f(100,100);
            GL11.glTexCoord2f(1,0);
            GL11.glVertex2f(100+texture.getTextureWidth(),100);
            GL11.glTexCoord2f(1,1);
            GL11.glVertex2f(100+texture.getTextureWidth(),100+texture.getTextureHeight());
            GL11.glTexCoord2f(0,1);
            GL11.glVertex2f(100,100+texture.getTextureHeight());
        GL11.glEnd();
    }

    /**
     * Main Class
     */
    public static void main(String[] argv) {
        TextureExample textureExample = new TextureExample();
        textureExample.start();
    }
}

Credit

Tutorial Credit - Ninja Cave

Kevin Glass for writing the Slick Library and initial example code.

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30400次
    • 积分:704
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:0篇
    • 译文:28篇
    • 评论:1条
    文章分类
    最新评论