2012-03-13 11 views
0

내가 가진 운동은 다음과 같습니다. display()에 drawLine 메서드를 추가합니다. 아마도 같은 것이 필요할 것입니다. drawLine (GL gl, int x1, int y1, int x2, int y2) 이제 라인 수식을 사용하여 x1, y1에서 x2까지의 선을 구성하는 개별 점을 플롯하고, JOGL의 y2 (예 : gl.glPointSize (1.0f); gl.glBegin (GL.GL_POINTS); 당신이 흰색 점을 착색하고, 사용한 경우 다음과 같은 돌기 (100,100) 포인트에서 라인의 값 (0,0)와 다음 OpenGL - 점이있는 선 그리기

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

당신이 뭔가 아래 그림과 같이 표시됩니다

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 

} 
:

enter image description here

지금까지 나는 내 라인을 만들의 EventListener에 대한 나의 코드는 다음과

}

제 문제는 회선 방정식의 메소드 내부에서 코드를 작성하는 방법을 잘 모르는 것입니다. 당신이 저를 조금 도와 주시면 감사하겠습니다. 그 나머지는 옳은 것 같아요. drawLine() 메소드 안에 라인 방정식을 구현하는 방법을 찾아야합니다.

+0

이것은 최악의 그래픽 프로그래밍 숙제처럼 생각됩니다. 약간의 독서를해야하며 빨리 이해할 수 있습니다. –

답변

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을 조정합니다.

+0

기본적으로, 내가 한 것과 똑같은 일을했습니다 :) 그리고 더하기 당신은 그의 코멘트를 더주의 깊게 읽어야합니다! 그 때문에 나는 세 번 내 응답을 편집했습니다! –

+0

이 방법을 사용하면 샘플 값에 따라 메서드를 사용할 때마다 좌표 값을 변경해야한다는 것을 알았습니다. 즉, 샘플 값은 내 좌표 값보다 클 수 없습니다.내 display()에서 drawline 메소드를 사용할 때 : 'drawLine (gl, 0, 0, 250, 250);'이면 샘플 값은 250을 초과 할 수 없습니다. –

+1

나의 Java는 꽤 녹슬지 만,'float dx = (x2 - x1)/(float) samples;' – genpfault

1

어떻게 OpenGL에서 할 수 있습니까? 또한

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

, 당신은 GL_PROJECTION 매트릭스에 직교 계획과

편집이 +=0.01 함께 놀러하고 결과를 더 나은 방법을 얻을 것이다 GL_MODELVIEW에서 위의 코드처럼 모델 뷰를 갖고 싶어 제안

glBegin(GL_LINES); 
    glVertex2i(0,0); 
    glVertex2i(100,100); 
glEnd(); 
+0

그러나 GL_POINTS가 필요하다고 생각합니다. 포인트를 사용하여 x1, y1에서 시작하여 x2, y2에서 끝나는 라인을 만드는 방법이 있습니까? –

+0

i + = 0.01을'GL_POINTS'로 할 필요가있는 것으로 바꾸십시오. 나는 그것을 적절히 업데이트했다. –

+0

hmmm 내 문제에 대한 훌륭한 해결책 인 것 같다. 피곤해지면 실례 합니다만 OpenGL에 익숙하지 않습니다. drawLine() 메서드가 필요하기 때문에'GL gl, int x1, int y1, int x2, int y2'와 관련된 코드를 사용해서는 안됩니까? –