OpenGL: текстовый рендерер не отображает английские латинские буквыJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 OpenGL: текстовый рендерер не отображает английские латинские буквы

Сообщение Anonymous »

У меня есть простой код для отображения заданной буквы:

Код: Выделить всё

import com.jogamp.opengl.GL4;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.util.FPSAnimator;
import com.jogamp.opengl.util.awt.TextRenderer;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import static com.jogamp.opengl.GL4.*;

public class Test extends Frame implements GLEventListener {
static FPSAnimator animator;
private static int[] vao = new int[1];
private static int[] vbo = new int[4];

private static GLCanvas canvas;
private static GL4 gl;
private static int WIDTH = 750, HEIGHT = 750;
private float letterRotationAngle = 0.0f;

private TextRenderer textRenderer;

public Test() {
canvas = new GLCanvas();
canvas.addGLEventListener(this);
this.add(canvas);
this.setSize(WIDTH, HEIGHT);
this.setVisible(true);

addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});

animator = new FPSAnimator(canvas, 60);
animator.start();
}

public static void main(String[] args) {
new Test();
}

@Override
public void init(GLAutoDrawable drawable) {
gl = (GL4) drawable.getGL();
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

gl.glGenVertexArrays(vao.length, vao, 0);
gl.glBindVertexArray(vao[0]);
gl.glGenBuffers(vbo.length, vbo, 0);
gl.glEnableVertexAttribArray(0);
gl.glEnableVertexAttribArray(1);

textRenderer = new TextRenderer(new Font("Verdana", Font.BOLD, 20));
}

@Override
public void display(GLAutoDrawable drawable) {
gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
testLetter();
}

private void testLetter() {
String letters = "S";
for (int i = 0; i < letters.length(); i++) {
float angle = letterRotationAngle + i * 180;
float letterX = 0.0f + 0.15f * (float) Math.cos(Math.toRadians(angle));
float letterY = 0.0f + 0.15f * (float) Math.sin(Math.toRadians(angle));

display(letterX, letterY, letters.charAt(i));
}
}

private void display(float x, float y, char letter) {
int screenX = (int) ((x + 1) * WIDTH / 2);
int screenY = (int) ((y + 1) * HEIGHT / 2);

textRenderer.beginRendering(WIDTH, HEIGHT);
textRenderer.setColor(Color.WHITE);
textRenderer.draw(String.valueOf(letter), screenX, screenY);
textRenderer.endRendering();
}

@Override
public void dispose(GLAutoDrawable drawable) {
textRenderer.dispose();
}

@Override
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {}
}
Когда буква — «S», ничего не отображается (только черный фон). Однако если я поменяю буквы на "Й", оно отобразится (белая буква Й на черном фоне).
Я не понимаю, что может быть причиной такого поведения, почему не отображаются английские буквы?

Подробнее здесь: https://stackoverflow.com/questions/791 ... in-letters
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»