OpenGL правильно прикрепить текстуру

Проблема:

В течение нескольких часов я пытался установить простой png перекрестия в качестве текстуры (чтобы позже я мог придерживаться середины вида, как обычное перекрестие), но не повезло.

Я пишу на Java с помощью JOGL.

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);
}

Результат:

демонстрация

Оригинальный png:

демонстрация

1

Решение

Может быть, есть еще проблемы, но, по крайней мере, это выглядит неправильно:

gl.glTexCoord2f(2f, 1.0f);

Ваша текстура повторяется по горизонтали 2 раза, потому что режим обтекания повторение и установленные вами координаты закончились 1 (в этом случае 2f). Чтобы это исправить, замените 2f с 1f:

gl.glTexCoord2f(1f, 1.0f);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]