【问题标题】:How to make the texture in sliced mode?如何在切片模式下制作纹理?
【发布时间】:2013-08-14 11:34:30
【问题描述】:

我有一个带有纹理的GL.GL_QUAD_STRIP,因为GL.GL_QUAD_STRIP 的大小比纹理图像的大小要大得多,所以这个图像会被拉伸和模糊,所以我想也许有一种方法可以在“切片”中设置这个纹理” 模式 使其 更加 清晰 和 锐利 .

编辑:“切片”我的意思是在图像结束的位置,我将再次开始绘制,除了看起来有点硬拉伸。

这就是我目前所拥有的 -

double m_x , m_y  , m_z ; 
Texture m_cubeSides ; 

public void display(GLAutoDrawable gLDrawable)
{
        final GL gl = gLDrawable.getGL();
        gl.glTexParameteri ( GL.GL_TEXTURE_2D,GL.GL_TEXTURE_WRAP_T,GL.GL_LINEAR_MIPMAP_LINEAR);
        gl.glTexParameteri( GL.GL_TEXTURE_2D,GL.GL_TEXTURE_WRAP_S,GL.GL_LINEAR_MIPMAP_LINEAR);
        m_cubeSides.bind();
        gl.glBegin(GL.GL_QUAD_STRIP);

        // Quad 1

        gl.glTexCoord2f(1.0f, 0.0f);
        gl.glVertex3d(m_x, m_y, 0);
        gl.glTexCoord2f(1.0f, 1.0f);
        gl.glVertex3d(m_x, 0, 0);
        gl.glTexCoord2f(0.0f, 0.0f);
        gl.glVertex3d(0, m_y, 0);
        gl.glTexCoord2f(0.0f, 1.0f);
        gl.glVertex3d(0, 0, 0);

        // Quad 2 - front 

        gl.glTexCoord2f(1.0f, 0.0f);
        gl.glVertex3d(0, m_y, m_z);
        gl.glTexCoord2f(1.0f, 1.0f);
        gl.glVertex3d(0, 0, m_z);
        gl.glTexCoord2f(0.0f, 0.0f);
        gl.glVertex3d(m_x, m_y, m_z);
        gl.glTexCoord2f(0.0f, 1.0f);
        gl.glVertex3d(m_x, 0, m_z);

        //  Quad 3 - east side 

        gl.glTexCoord2f(1.0f, 0.0f);
        gl.glVertex3d(m_x, m_y, m_z);
        gl.glTexCoord2f(1.0f, 1.0f);
        gl.glVertex3d(m_x, 0, m_z);
        gl.glTexCoord2f(0.0f, 0.0f);
        gl.glVertex3d(m_x, m_y, 0);
        gl.glTexCoord2f(0.0f, 1.0f);
        gl.glVertex3d(m_x, 0, 0);

        //  Quad 4 - west side 

        gl.glTexCoord2f(1.0f, 0.0f);
        gl.glVertex3d(0, m_y, 0);
        gl.glTexCoord2f(1.0f, 1.0f);
        gl.glVertex3d(0, 0, 0);
        gl.glTexCoord2f(0.0f, 0.0f);
        gl.glVertex3d(0, m_y, m_z);
        gl.glTexCoord2f(0.0f, 1.0f);
        gl.glVertex3d(0, 0, m_z);

        gl.glEnd(); 
}

【问题讨论】:

    标签: opengl textures jogl


    【解决方案1】:

    我不确定你所说的切片模式是什么意思,但是改变纹理坐标会起作用。对glTexCoord2f 的调用非常多,所以也许是一个变量来替换glTexCoord2f 调用中1.0f 的所有实例,然后改变它直到你得到一个好的结果。您已经将纹理环绕模式设置为重复,这是必需的。

    类似:

     float textureMax = 5.0f;
     ...
     gl.glTexCoord2f(textureMax , 0.0f);
     gl.glVertex3d(m_x, m_y, 0);
     gl.glTexCoord2f(textureMax ,textureMax );
     gl.glVertex3d(m_x, 0, 0);
     gl.glTexCoord2f(0.0f, 0.0f);
     gl.glVertex3d(0, m_y, 0);
     gl.glTexCoord2f(0.0f, textureMax );
     gl.glVertex3d(0, 0, 0);
    

    不过,这样做的缺点是您需要一个可以平铺的纹理,否则这可能看起来不太好。

    当然,另一个选择是更大的纹理:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-17
      • 2012-10-02
      • 2018-03-02
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 2016-12-25
      相关资源
      最近更新 更多