OpenGL - нарисовать линию с точками - PullRequest
1 голос
/ 14 марта 2012

У меня есть следующее упражнение: В display () добавить метод drawLine.Возможно, вам понадобится что-то вроде drawLine (GL gl, int x1, int y1, int x2, int y2), теперь используя уравнение прямой, постройте отдельные точки, составляющие линию, от x1, y1 до x2, y2 вJOGL using (например) gl.glPointSize (1.0f);gl.glBegin (GL.GL_POINTS);Если вы покрасили точки в белый цвет и использовали следующие проекции

gl.glViewport(-250, -150, 250, 150);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluOrtho2D(-250.0, 250.0, -150.0, 150.0);

, то при значении линии от точек (0,0) до (100,100) ваша будет выглядеть примерно так:1004 *

enter image description here

Мой код для EventListener, где я создаю свою строку, выглядит следующим образом:

import javax.media.opengl.*;
import javax.media.opengl.glu.GLU;


public class ThirdGLEventListener implements GLEventListener {

/**
 * Interface to the GLU library.
 */
private GLU glu;

/**
 * Take care of initialization here.
 */
public void init(GLAutoDrawable gld) {
    GL gl = gld.getGL();
    glu = new GLU();

    gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);


    gl.glViewport(-250, -150, 250, 150);
    gl.glMatrixMode(GL.GL_PROJECTION);
    gl.glLoadIdentity();
    glu.gluOrtho2D(-250.0, 250.0, -150.0, 150.0);
}

/**
 * Take care of drawing here.
 */
public void display(GLAutoDrawable drawable) {



    GL gl = drawable.getGL();

    gl.glClear(GL.GL_COLOR_BUFFER_BIT);

    /*
     * put your code here
     */

    drawLine(gl, 0, 0, 100, 100);

}

public void reshape(GLAutoDrawable drawable, int x, int y, int width,
        int height) {
}

public void displayChanged(GLAutoDrawable drawable,
        boolean modeChanged, boolean deviceChanged) {
}

private void drawLine(GL gl, int x1, int y1, int x2, int y2) {
    gl.glPointSize(1.0f);
    gl.glBegin(GL.GL_POINTS);

    // This is where the whole problem lies. 

    gl.glEnd();//end drawing of points

}

}

Моя проблема в том, чтоЯ не совсем знаю, как завершить код внутри метода для уравнения линии.Буду признателен, если вы поможете мне с этим.Я думаю, что все остальное просто правильно, мне просто нужно найти, как реализовать уравнение линий внутри метода drawLine ().

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Вот как вы делаете это в OpenGL.

glBegin(GL_POINTS);
   for(float i = 0; i <= 100; ){
      glVertex2f(i,i);
      i+=0.01;
   }
glEnd();

Кроме того, предложение о том, что вы хотите, чтобы ваши ортографические проекции в матрице GL_PROJECTION и вид вашей модели были похожи на приведенный выше код в GL_MODELVIEW

Отредактируйте игру с вашим +=0.01, и вы получите результаты ЛУЧШЕГО СПОСОБА

glBegin(GL_LINES);
   glVertex2i(0,0);
   glVertex2i(100,100);
glEnd();
1 голос
/ 14 марта 2012

Это ужасный способ нарисовать линию, используя OpenGL.

GL_LINES намного лучше.

Тем не менее:

private void drawLine(GL gl, int x1, int y1, int x2, int y2) {
    gl.glPointSize(1.0f);
    gl.glBegin(GL.GL_POINTS);

    int samples = 100;
    float dx = (x2 - x1) / (float)samples;
    float dy = (y2 - y1) / (float)samples;

    for( int i = 0; i < samples; i++ )
    {
        gl.glVertex2f( i * dx, i * dy );
    } 

    gl.glEnd();//end drawing of points
}

Отрегулируйте samples по вкусу.

...