OpenGL正确附加纹理
Posted
技术标签:
【中文标题】OpenGL正确附加纹理【英文标题】:OpenGL properly attach Texture 【发布时间】:2016-07-20 17:58:18 【问题描述】:问题:
尝试了几个小时将十字准线的简单 png 设置为纹理(这样我以后可以像普通十字准线一样粘贴在视图中间),但没有运气。
我正在使用 JOGL 编写 Java。
P.S 还需要使纹理的背景透明。但这是另一个问题。
代码:
public void display(GLAutoDrawable gLDrawable)
final GL2 gl = gLDrawable.getGL().getGL2();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity(); // Reset The View
gl.glTranslatef(0.0f, 0.0f, -5.0f);
gl.glTexParameteri ( GL2.GL_TEXTURE_2D,GL2.GL_TEXTURE_WRAP_T, GL2.GL_REPEAT );
gl.glTexParameteri( GL2.GL_TEXTURE_2D,GL2.GL_TEXTURE_WRAP_S, GL2.GL_REPEAT );
texture.bind(gl);
gl.glBegin(GL2.GL_QUADS);
// Front Face
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(2f, 0.0f);
gl.glVertex3f(1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(2f, 1.0f);
gl.glVertex3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-1.0f, 1.0f, 1.0f);
gl.glEnd();
public void init(GLAutoDrawable drawable)
final GL2 gl = drawable.getGL().getGL2();
gl.glShadeModel(GL2.GL_SMOOTH); // Enable Smooth Shading
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
gl.glClearDepth(1.0f); // Depth Buffer Setup
gl.glEnable(GL2.GL_DEPTH_TEST); // Enables Depth Testing
gl.glDepthFunc(GL2.GL_LEQUAL); // The Type Of Depth Testing To Do
// Really Nice Perspective Calculations
gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST);
gl.glEnable(GL2.GL_TEXTURE_2D);
try
String filename = "resources/misc/crosshair.png";
texture=TextureIO.newTexture(new File( filename ),true);
catch (IOException e)
e.printStackTrace();
throw new RuntimeException(e);
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR);
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);
结果:
原图:
【问题讨论】:
这个问题似乎与gamedev.stackexchange.com/questions/125876/…重复 【参考方案1】:也许还有更多问题,但至少这看起来不正确:
gl.glTexCoord2f(2f, 1.0f);
您的纹理水平重复 2 次,因为它的环绕模式是 repeat 并且您设置的坐标超过 1
(在本例中为 2f
)。要解决此问题,请将2f
替换为1f
:
gl.glTexCoord2f(1f, 1.0f);
【讨论】:
以上是关于OpenGL正确附加纹理的主要内容,如果未能解决你的问题,请参考以下文章