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

翻译 2016年01月03日 16:02:29

原文: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.

相关文章推荐

【LWJGL2 WIKI】【辅助库篇】Slick-Util库:第二部分-读取声音

原文:http://wiki.lwjgl.org/wiki/Slick-Util_Library_-Part_2-_Loading_Sounds_for_LWJGLJava自带支持WAV和AIF格式,...

【LWJGL2 WIKI】【辅助库篇】Slick-Util库:介绍

原文:Introduction”>http://wiki.lwjgl.org/wiki/Slick-Util_Library-_Introduction 译注:获取地址和安装方法去原文里找吧,这里只...

【LWJGL2 WIKI】【现代OpenGL篇】画颜色方形

原文:http://wiki.lwjgl.org/wiki/The_Quad_coloredIntroduction 介绍本教程介绍颜色。每个方形的角将被分配一个不同的颜色,为此我们必须使用shade...

【LWJGL2 WIKI】【现代OpenGL篇】交叉数据画方形

原文:http://wiki.lwjgl.org/wiki/The_Quad_interleavedIntroduction 介绍我们之前把顶点数据分别存在不同的VBO之内。其实也可以交叉或混合保存数...

【LWJGL2 WIKI】【基础篇】基础1:显示

原文:http://wiki.lwjgl.org/wiki/LWJGL_Basics_1_%28The_Display%29Introduction 介绍LWJGL库使用自带的轻量级本地窗口(即所谓的...

【LWJGL2 WIKI】【现代OpenGL篇】用BufferSubData更新VBO方形

原文:http://wiki.lwjgl.org/wiki/The_Quad_updating_a_VBO_with_BufferSubDataIntroduction 介绍VBO一旦设置好,我们可以...

【LWJGL2 WIKI】【基础篇】基础4:计时

原文:http://wiki.lwjgl.org/wiki/LWJGL_Basics_4_(Timing)Timers 计时器精确计时对于高性能游戏很重要。一般计时器的精度至少得是1毫秒。 Java...

【LWJGL2 WIKI】【现代OpenGL篇】用投影、视图、模型矩阵画方形

原文:http://wiki.lwjgl.org/wiki/The_Quad_with_Projection,_View_and_Model_matricesIntroduction 介绍在OpenG...

【LWJGL2 WIKI】【基础篇】基础3:方形

原文:http://wiki.lwjgl.org/wiki/LWJGL_Basics_3_%28The_Quad%29Introduction 介绍本教程教你怎样在LWJGL里使用OpenGL,但是并...

【LWJGL2 WIKI】【现代OpenGL篇】用纹理画方形

原文:http://wiki.lwjgl.org/wiki/The_Quad_texturedIntroduction 介绍本教程将讲怎样对模型贴纹理,其他方形的部分就和之前教程中讲的差不多。后面可以...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)