我正在尝试将png文件加载为纹理,但是,即使没有任何错误,我也看不到纹理。 我唯一得到的是一种颜色的正方形。 我已经搜索了示例,但看不到我在做什么错误。 这是代码:

        final Image image = SWTImageFactory.getImage(ImageFactory.CROSS_SYMBOL_IMAGE);
        final ImageData imageData = image.getImageData();

        ByteBuffer buffer = ByteBuffer.allocate(4*imageData.width * imageData.height);
        int p, r, g, b, a;

        for (int y = 0; y<imageData.height; y++) {
            for (int x = 0; x < imageData.width; x++) {

                p =  imageData.getPixel(x, y);
                a = (p >> 24) & 0xFF;  // get pixel bytes in ARGB order
                r = (p >> 16) & 0xFF;
                g = (p >> 8) & 0xFF;
                b = (p >> 0) & 0xFF;

                buffer.put((byte)r);   // fill in bytes in RGBA order
                buffer.put((byte)g);
                buffer.put((byte)b);
                buffer.put((byte)a); 
             }
        }

        buffer.rewind();
        gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, 4,imageData.width, imageData.height,0,
                        GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, buffer);

        gl.glEnable(GL.GL_TEXTURE_2D);
        int [] textures = new int [1];
        gl.glGenTextures(1, textures, 0); 

        gl.glBindTexture(GL.GL_TEXTURE_2D, textures[0]);

        gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT);
        gl.glTexParameteri (GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT);
        gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER,GL.GL_LINEAR);
        gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER,GL.GL_LINEAR);

        gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE);  

        gl.glBegin(GL.GL_QUADS);

        gl.glTexCoord2f(0.0f, 0.0f);
        gl.glVertex3f(100.0f, 100.0f, 0.0f);

        gl.glTexCoord2f(0.0f, 1.0f);
        gl.glVertex3f(100.0f, 200.0f, 0.0f);

        gl.glTexCoord2f(1.0f, 1.0f);
        gl.glVertex3f(200.0f, 200.0f, 0.0f);

        gl.glTexCoord2f(1.0f, 0.0f);
        gl.glVertex3f(200.0f, 100.0f, 0.0f);

        gl.glEnd();
        gl.glDisable(GL.GL_TEXTURE_2D);

===============>>#1 票数:1

在绑定任何纹理(或者可能绑定了其他纹理)之前,您正在调用gl.glTexImage2D ,但是此函数会更改当前绑定的纹理对象的纹理图像。 因此,在您的代码中,您应该在gl.glBindTexture(GL.GL_TEXTURE_2D, textures[0])之后调用它。

顺便说一句,我希望不要在每一帧都调用此代码(绘图功能会在此提示),因为您不应该在每一帧(都放在一边,不要创建一个新的纹理对象(从硬盘中读取图像)) t实际上将其删除)。 实际上,您应该在一些初始化代码中创建纹理对象,将图像放入其中并调整其参数,以便在绘图代码中,您仅需调用glBindTexture (甚至可以调用glEnable(GL_TEXTURE_2D)或类似的东西)。

  ask by Cristina translate from so

未解决问题?本站智能推荐:

1回复

绘制纹理四边形OpenGL无法正常工作

我正在尝试渲染一组纹理四边形。 我可以渲染彩色的四边形,但不能渲染纹理的四边形(屏幕显示为空。) 我正在使用LWJGL和PNGDecoder。 初始化我的OGL的代码: 用于解码我的图像的代码: 我的decodeStreamToBuffer(InputStrea
1回复

java / opengl:在64位VM上加载纹理

在64位环境中运行时,纹理加载器似乎不再起作用。 我不确定原因是64位VM本身还是文件位于64位文件系统上。 要加载的图像是RGBA png文件,它在32位Windows系统上正确显示,但是在我的64位win7上,某些颜色通道似乎被翻转了。 这是我的代码: 有谁知道这可能是
1回复

LWJGL多纹理无法正常工作

我目前正在学习一些OpenGL,并且希望将2种不同的纹理(漫反射和镜面反射)应用于立方体。 问题是只有(纹理单元0的)第一个纹理可以访问。 两个采样器似乎都在使用它,而不是使用两个不同的采样器。 即使我将两个采样器制服均指定为1,也会使用第一个(漫反射纹理)。 我想我一定是忽略了一些
2回复

Java OpenGL仅蓝色纹理

我在“纹理”和OpenGL中遇到了一些问题。 我做了一个小的.obj加载程序(带有“纹理加载”),但是所有内容都绘制为蓝色。 例: 我加载纹理。 我将纹理与GL11.glBindTexture(GL11.GL_TEXTURE_2D,textureId)绑定。 如果我做: 它
2回复

Java openGL绘制纹理

我尝试在LWJGL中绘制基本纹理,但不能。 我的主班: 还有我的纹理加载器: 这不是一个实际的游戏,只是一个在Java中学习和练习openGL的测试。 还有谁能给我推荐一本关于OpenGL的好书?
1回复

纹理无法正确显示OpenGL

我正在尝试为正在创建的游戏的菜单加载简单的背景纹理,但纹理显示不正确。 例如,如果我使用此纹理: http : //s15.postimage.org/mqvuhq463/Super_Mario_Galazy_Background.png,则整个背景为蓝色,如果我使用此纹理: http :
2回复

OpenGL纹理无法正确渲染

我遇到的问题是我无法使纹理以正确的比例进行渲染,并且由于某种原因,纹理也在以一定的间隔重复自身。 这是即时通讯使用的纹理(我正在努力用此纹理填充屏幕): 渲染后看起来像这样(红色轮廓是整个屏幕,纹理以1 px边框渲染): 这是代码: 如果有人可以告诉我我做错了什么,
2回复

使用OpenGL在Java中更改纹理中的某些颜色

我需要能够创建纹理的副本并将该副本中的某些颜色更改为Java中的其他颜色。 我不太熟悉OpenGL库,也不知道它提供了什么方法来实现此目的。 我需要知道一种更改纹理中单个像素颜色的好方法,以及如何获取纹理中单个像素的颜色,以及如何复制纹理。 如果这个问题过于笼统,很抱歉,但我正在寻找一个广
1回复

OpenGL / LWJGL纹理加载,但纹理不会在四边形上渲染

我开始在Java中使用LWJGL / OpenGL来创建2D游戏,但是我很难渲染带有纹理的简单32x32四边形(正方形)。 我已经创建了纹理加载系统,并按照正确的纹理说明进行操作,但是纹理不会显示。 我的代码如下: 上面是每次调用“ render”的代码。 “ devBlock64
1回复

简单的Java OpenGL纹理管理器

我正在尝试为基于2D平铺的项目创建一个简单的纹理管理器。 我所拥有的是一个具有字符串(纹理名称)和纹理的散列图的类。 如果散列映射中不存在该名称,则它使用TextureIO.newTexture(..)创建它并将其存储到散列映射中。 这是我尝试加载纹理时得到的错误: 当我从