OpenGL - 用点绘制线

时间:2012-03-13 20:34:15

标签: java opengl line jogl

我的练习如下: 在display()中添加一个方法drawLine。可能你会需要类似的东西 drawLine(GL gl,int x1,int y1,int x2,int y2) 现在使用一条线的方程,在JOGL中绘制构成从x1,y1到x2,y2的直线的各个点 使用(例如)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)的一条线的值看你的 如下图所示:

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 个答案:

答案 0 :(得分:2)

这就是你在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 :(得分:1)

这是使用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品尝。