【问题标题】:openGL / JOGL: Why do some Textures render "Smoothed" and some not?openGL / JOGL:为什么有些纹理渲染“平滑”而有些则没有?
【发布时间】:2011-11-13 23:24:02
【问题描述】:

以下代码是在我的 JOGL 练习应用中渲染单个立方体的方法:

        public void render(GL gl)
        {
            texture.enable();

            gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);

            texture.bind(); // textures clockwise from top left when
            // facing

            gl.glBegin(GL.GL_QUADS);

            // north facing side
            if (renderSide[0])
                {
                    gl.glNormal3i(0, 1, 0);
                    gl.glTexCoord2f(0.0f, 0.0f);
                    gl.glVertex3fv(v2, 0);
                    gl.glTexCoord2f(1.0f, 0.0f);
                    gl.glVertex3fv(v1, 0);
                    gl.glTexCoord2f(1.0f, 1.0f);
                    gl.glVertex3fv(v5, 0);
                    gl.glTexCoord2f(0.0f, 1.0f);
                    gl.glVertex3fv(v6, 0);
                }
            // east facing side
            if (renderSide[1])
                {
                    gl.glNormal3i(1, 0, 0);
                    gl.glTexCoord2f(0.0f, 0.0f);
                    gl.glVertex3fv(v3, 0);
                    gl.glTexCoord2f(1.0f, 0.0f);
                    gl.glVertex3fv(v2, 0);
                    gl.glTexCoord2f(1.0f, 1.0f);
                    gl.glVertex3fv(v6, 0);
                    gl.glTexCoord2f(0.0f, 1.0f);
                    gl.glVertex3fv(v7, 0);
                }
            // south facing side
            if (renderSide[2])
                {
                    gl.glNormal3i(0, -1, 0);
                    gl.glTexCoord2f(0.0f, 0.0f);
                    gl.glVertex3fv(v4, 0);
                    gl.glTexCoord2f(1.0f, 0.0f);
                    gl.glVertex3fv(v3, 0);
                    gl.glTexCoord2f(1.0f, 1.0f);
                    gl.glVertex3fv(v7, 0);
                    gl.glTexCoord2f(0.0f, 1.0f);
                    gl.glVertex3fv(v8, 0);
                }
            // west facing side
            if (renderSide[3])
                {
                    gl.glNormal3i(-1, 0, 0);
                    gl.glTexCoord2f(0.0f, 0.0f);
                    gl.glVertex3fv(v1, 0);
                    gl.glTexCoord2f(1.0f, 0.0f);
                    gl.glVertex3fv(v4, 0);
                    gl.glTexCoord2f(1.0f, 1.0f);
                    gl.glVertex3fv(v8, 0);
                    gl.glTexCoord2f(0.0f, 1.0f);
                    gl.glVertex3fv(v5, 0);
                }
            // top side
            if (renderSide[4])
                {
                    gl.glNormal3i(0, 0, 1);
                    gl.glTexCoord2f(0.0f, 0.0f);
                    gl.glVertex3fv(v1, 0);
                    gl.glTexCoord2f(1.0f, 0.0f);
                    gl.glVertex3fv(v2, 0);
                    gl.glTexCoord2f(1.0f, 1.0f);
                    gl.glVertex3fv(v3, 0);
                    gl.glTexCoord2f(0.0f, 1.0f);
                    gl.glVertex3fv(v4, 0);
                }

            gl.glEnd();
            texture.disable();

每个 Cube 都调用此代码,每个 Cube 都以相同的方式初始化,但是某些纹理的处理方式不同并且“模糊”,而其余的则没有,

这是一张图片:

每个块的每一帧都会调用此渲染方法,那么问题是如何永久地显示为单个块的呢?

还有一个附带问题,我的应用程序存在大量内存泄漏,我无法追踪,问题出在这里吗?除了设置相机和光源,这是大部分 OpenGL 代码!

【问题讨论】:

    标签: java opengl memory-leaks render textures


    【解决方案1】:

    GL_TEXTURE_MAG_FILTER 是每个纹理对象的状态。绑定你的纹理对象,然后设置它。

    【讨论】:

    • 一针见血!非常感谢
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 2021-02-27
    • 2013-05-13
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多