Рисунок OpenGL в центре окна - PullRequest
2 голосов
/ 30 июля 2010

Я начал иметь дело с OpenGL.Мое приложение написано на Java с использованием SWT в качестве оконной системы.

Используя http://lwjgl.org/ и SWT, я могу использовать OpenGL на своем холсте SWT.Я написал следующий простой код OpenGL в моем слушателе рисования холста:

// clear to background color
GL11.glClearColor(.3f, .5f, .8f, 1.0f);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);

// draw rectangle
GL11.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glBegin(GL11.GL_POLYGON);
GL11.glVertex3f(0.1f, 0.1f, 0.0f);
GL11.glVertex3f(0.1f, 0.9f, 0.0f);
GL11.glVertex3f(0.9f, 0.9f, 0.0f);
GL11.glVertex3f(0.9f, 0.1f, 0.0f);
GL11.glEnd();
GL11.glFlush();

Я хочу знать, как добавить слушатель изменения размера на свой холст, чтобы мой прямоугольник всегда был в центре окна.Как мне это сделать?

1 Ответ

4 голосов
/ 31 июля 2010

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

Кроме того, ваши матрицы беспорядок.Матрица проекции используется только для проекции и просмотра модели для других преобразований (вращение, масштабирование, перемещение и т. Д.).

// Viewport (needs to be done on canvas resize only)
GL11.glViewport(0.0, 0.0,                   // Set viewport size
                canvas.getBounds().width,
                canvas.getBounds().height);

// Projection (only needs to be set once in most cases)
GL11.glMatrixMode(GL11.GL_PROJECTION);        // Select projection matrix
GL11.glLoadIdentity();                        // Clear it
GL11.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);  // Set your projection

// model/view transforms
GL11.glMatrixMode(GL11.GL_MODELVIEW);  // Select modelview matrix
GL11.glLoadIdentity();                 // Clear it

// Draw (shortcut)
GL11.glRectf(0.1f, 0.1f, 0.9f, 0.9f);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...