2017-12-25 3 views
1

GL_LINES으로 4 줄로 생성 된 4 분면을 채우려고합니다. 그러나 쿼드를 채울 때 삼각형 만 채 웁니다. 쿼드이 그리는 코드GL_QUAD가 삼각형을 그립니다.

def SurfaceContour(self, vertices, edges): 
    glBegin(GL_LINES) 
    for edge in edges: 
     for vertex in edge: 
      glColor3fv((1.0, 0.0, 0.0)) 
      glVertex3fv(vertices[vertex]) 
    glEnd() 

채우기 :

[[ 0. -20.23 7. ] 
[ 0. -20.23 -7. ] 
[ 100. -10.  5. ] 
[ 100. -10.  -5. ]] 

:

def Surfaces(self, vertices): 
    glBegin(GL_QUADS) 
    for i in range(4): 
     glColor4f(1, 1, 1, 0.3) 
     glVertex3fv(vertices[i ,:]) 
    glEnd() 

이 I 내로 통과 정점 행렬은이 라인을 그리는 코드 This is the result that i get:

답변

5

이 꼭지점의 순서

[[ 0. -20.23 7. ] 
[ 0. -20.23 -7. ] 
[ 100. -10.  5. ] 
[ 100. -10.  -5. ]] 

는 다음과 같이이다 :

enter image description here

: 당신이 4 개 정점에 의해 정의 된 쿼드을 그리려는 경우

enter image description here

는, 당신은 GL_TRIANGLE_STRIP을 그릴 중 하나가

def Surfaces(self, vertices): 
    glBegin(GL_TRIANGLE_STRIP) 
    for i in range(4): 
    glColor4f(1, 1, 1, 0.3) 
    glVertex3fv(vertices[i ,:]) 
    glEnd() 

또는 정점의 순서를 변경해야합니다. 의 GL_QUAD에 대한 requiremts가 :

[[ 0. -20.23 7. ] 
[ 0. -20.23 -7. ] 
[ 100. -10.  -5. ] 
[ 100. -10.  5. ]] 

enter image description here

는 먼저 기존 사용되지 않는 API를 사용하는에서 더 Primitive

+0

정말 고마워요. 완벽하게 작동합니다. 단 하나의 후속 질문입니다. 표면이 채색 된 후, 내가보기를 회전 시키면, 표면의 뒷면이 착색 된 것처럼 보이지 않습니다. [예제보기] (https://ibb.co/i60L76), 이것에 대해 알고 싶으십니까? 미리 감사드립니다. – BjkOcean

+0

@BjkOcean 아마도 [Face Culling] (https://www.khronos.org/opengl/wiki/Face_Culling) 문제입니다. 'glDisable (GL_CULL_FACE)'를 시도하거나 얼굴 컬링을 바꾸지 마십시오. – Rabbid76

0

을 참조도의 glBegin/glEnd 및 GL_QUAD 현대 응용 프로그램에서 사용할 수 없습니다.

둘째, glVertex3fv는 하나의 요소에 배열을 받고 코드에서 glVertex3fv(vertices[i ,:]) 원래 배열의 조각을 전달합니다. 실제로는 첫 번째 요소 만 사용되므로 verticies[i]과 같습니다. GL_QUAD에 대한 잘못된 정점 순서가 생깁니다. 기본 유형 또는 요소 순서를 변경해야합니다.

+0

답장을 보내 주셔서 감사합니다. 현대 OpenGL 응용 프로그램의 코드를 설정하는 방법에 대한 작은 예제를 제공해 주시겠습니까? – BjkOcean

+0

@BjkOcean 그리 쉽지는 않지만, 여기서 중요한 점은'glVertex'를 호출하는 대신 데이터 버퍼를 사용하는 것입니다. 현대적인 OpenGL (버전 3 이상)을 타겟팅하는 자습서를 Google에 제공하는 것이 좋습니다. 예를 들면 다음과 같습니다. https://learnopengl.com/ – Jeka

관련 문제