2013-07-01 3 views
1

좋아요, 그래서 저는 6 개의면을 그려 입방체를 그리려고했습니다.OpenGL에서 두 개의 벡터가있는 3D 평면 그리기

두 개의 벡터를 주어 큐브 자체의 각면을 정의합니다. 다음과 같이

enter image description here

을하지만, 지금은 (내가 자바 라이브러리가 OpenGL을에 구축이다 LWJGL을 사용하고 단지 작은 메모)는 OpenGL에서이 얼굴을 그리는 방법의 문제가 발생하고있다.

나는 그 얼굴들을 그리려고했지만, 나는 내가 옳은 것처럼 보이지 않는 약간의 실수가 있다고 생각한다.

public void render() { 
    GL11.glBegin(GL11.GL_QUADS); 
    GL11.glVertex3f(v2.x, v1.y, v1.z); 
    GL11.glVertex3f(v1.x, v1.y, v1.z); 
    GL11.glVertex3f(v1.x, v2.y, v2.z); 
    GL11.glVertex3f(v2.x, v2.y, v2.z); 
    GL11.glEnd(); 
} 

을하지만 측면 (왼쪽/오른쪽) 얼굴도 보이지 않는 동안 만 상단과 하단면이 제대로 그려 얻을, 여기 보인다 : 현재, 나는 다음과 같이 얼굴을 그리는 시도했다.

어떻게 적절하게 그릴 수 있습니까?

+0

당신의 암호. 큐브의 각면에는 4 개의 정점이 필요하기 때문에 렌더링 함수가 큐브의 한 면만 그립니다. 맞습니까? 귀하의 벡터 정의는 약간 혼란 스럽습니다. 전통적으로 벡터는 X, Y, Z 위치와 X, Y 및 Z 방향의 크기를 갖는 것으로 생각할 수 있습니다. 벡터에 3 개의 필드 만있는 것 같은데, 이것들은 벡터의 크기 나 위치입니까? – aoi222

+0

명확히하기 - 예, 모든 단일면은 지정된 렌더링 방법을 사용하여 그립니다. 여기에있는 각 벡터는 X, Y 및 Z 위치가있는 간단한 Vector3f 객체입니다. – Zilarion

+0

Vector3f 클래스의 X, Y 및 Z 구성 요소는 벡터의 크기가 아니라 벡터의 시작 위치로 사용됩니다. 순전히 저장소 클래스로 사용하고 클래스의 다른 함수를 사용하지 않으면 큰 문제가되지 않을 수 있습니다. 두 벡터가 시작되는 시점을 고려해야합니다 (아래 a.lasram의 게시물을보십시오). – aoi222

답변

2

2 개의 벡터는 평행 한면의 무한대를 정의합니다. X = (0,0,0)이 코드에 표시되지 않는 한 그 중 하나를 선택하려면 추가 포인트 X이 필요합니다. V1V2가 기준점 X에서 시작 길이와 얼굴의 양측의 방향을 정의하는 경우

, 당신은 당신 쿼드을 그릴 수 등

GL11.glBegin(GL11.GL_QUADS); 
GL11.glVertex3f(X.x, X.y, X.z); 
GL11.glVertex3f(X.x+v1.x, X.y+v1.y, X.z+v1.z); 
GL11.glVertex3f(X.x+v1.x+v2.x, X.y+v1.y+v2.y, X.z+v1.z+v2.z); 
GL11.glVertex3f(X.x+v2.x, X.y+v2.y, X.z+v2.z); 
GL11.glEnd(); 
에 대해 당신이 어떤 일을 명확히 수 있다면 도움이 될
+0

이것은 실제로 문제를 해결합니다. 수학에서 정의 된 벡터와 vector와는 OpenGL에서 혼동되었습니다. 원점을 추가하면 내 문제가 해결되었습니다. 고맙습니다! – Zilarion