我有一个带有纹理的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();
}
答案 0 :(得分:1)
我不确定切片模式的含义,但更改纹理坐标会起作用。有很多对glTexCoord2f
的调用,所以可能是一个变量来替换1.0f
调用中glTexCoord2f
的所有实例,然后改变它,直到得到一个好的结果。您已经将纹理包装模式设置为重复,这是必需的。
类似的东西:
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);
这样做的缺点是你需要一个可以平铺的纹理,否则这可能看起来不太好。
另一个选择是更大的纹理,当然:)