Состояние OpenGL по умолчанию предполагает размер видового экрана, который равен размеру окна, к которому впервые был привязан контекст. Все матрицы являются тождественными. Таким образом, вы эффективно рисуете пространство так называемых нормализованных координат устройства (NDC). В этом пространстве видимый видовой экран имеет диапазон координат [-1; 1] в любом направлении.
Ваш наивный код предполагает, что позиции вершин должны быть в единицах пикселей. Однако все вне диапазона [-1; 1] находится за пределами экрана, а ваши «координаты пикселей» находятся вне видимого окна просмотра. Вам нужно установить видовое окно и проекцию так, чтобы они соответствовали вашему размеру окна, если вы хотите использовать пиксели в качестве единиц координат.
private void drawLine() {
GL.glViewport(0, 0, window_width, window_height);
GL.glMatrixMode(GL_PROJECTION);
GL.glLoadIdentity();
GL.glOrtho(0, window_width, 0, window_height, -1, 1);
GL.glMatrixMode(GL_MODELVIEW);
GL.glLoadIdentity();
GL.glClear(GL.GL_COLOR_BUFFER_BIT);
GL.glBegin(GL.GL_LINES);
GL.glVertex3f(100.0f, 100.0f, 0.0f); // origin of the line
GL.glVertex3f(200.0f, 140.0f, 5.0f); // ending point of the line
GL.glEnd();
GL.glFlush();
this.SwapBuffer(); // if the form doesn't automatically swap
}
Если предположить, что код, который вы разместили весь код у вас есть, вы теряете много, как создание OpenGL окна/контекста, настройки просмотра, а также указав матрицу проекции. Вы должны прочитать это немного больше и изучить некоторые учебники OpenGL. OpenGL не будет магически работать с winforms, как это. –
Даже если бы все это работало, и вы могли бы нарисовать форму, у вас все равно будет проблема с вашей линией, находящейся далеко за пределами диапазона координат нормализованных устройств, что [-1, 1] во всех трех осях , –
Да, это единственный код, который у меня есть до сих пор. Думаю, мне нужно читать намного больше. спасибо –