![]() | NXEasy3DView Class |
Namespace: Pixoneer.NXDL.NXEasy3D
public class NXEasy3DView : Panel
The NXEasy3DView type exposes the following members.
Name | Description | |
---|---|---|
![]() | NXEasy3DView | NXEasy3DView 객체를 생성하고 데이터 멤버를 초기화환다. 기본 생성자. |
Name | Description | |
---|---|---|
![]() | BackGroundColor | 화면 배경 색상을 가져오거나 설정한다. |
![]() | LightingFlag | 빛 효과를 적용할지를 설정하는 boolean 값을 가져오거나 설정한다. |
![]() | RefreshRate | 렌더링 콜백 쓰레드 주기를 나타낸다. (Hz) |
![]() | ViewMode | 뷰 모드를 나타내는 값을 가져오거나 설정한다. |
Name | Description | |
---|---|---|
![]() | DrawCube | 두 개의 경계 벡터를 이용하여 정육면체를 도시하는 기정의된 함수. |
![]() | DrawTIN | TIN(Triangular Irregular Network)을 도시하는 기정의된 함수.
TIN 데이터는 정점 배열과 삼각형의 인덱스로 구정된 데이터 구조를 말하면 Pixoneer.NXDL.NRS의 XDMBandEpipolarDEM에서 생성된다. |
![]() | GetHandle | |
![]() | GetLookAt | |
![]() | GetMouseControlMode | 설정되어 있는 마우스 제어 상태를 가져온다. |
![]() | glAlphaFunc | glAlphaFunc 함수는 알파 테스트 함수를 설정할 수 있도록 활성화시킨다. |
![]() | glBegin | glBegin과 glEnd 함수는 한 개의 primitive나 primitive 그룹의 정점 범위를 정한다. |
![]() | glBindTexture | glBindTexture 함수는 텍스쳐 대상에 대해 명명된 텍스쳐 생성을 가능하게 한다. |
![]() | glBlendFunc | glBlendFunc 함수는 화소 연산을 기술한다. |
![]() | glColor | 현재 색상을 설정한다. |
![]() | glColor3d | 현재 색상을 설정한다. |
![]() | glColor3f | 현재 색상을 설정한다. |
![]() | glColor4d | 현재 색상을 설정한다. |
![]() | glColor4f | 현재 색상을 설정한다. |
![]() | glColor4ub | 현재 색상을 설정한다. |
![]() | glDepthFunc | glDepthFunc 함수는 Opngl의 glDepthFunc와 동일한 기능을 수행한다. |
![]() | glDisable | glEnable과 glDisable 함수는 OpenGL 기능을 활성화하거나 비활성화한다. |
![]() | glEnable | glEnable과 glDisable 함수는 OpenGL 기능을 활성화하거나 비활성화한다. |
![]() | glEnd | glBegin과 glEnd 함수는 한 개의 primitive나 primitive 그룹의 정점 범위를 정한다. |
![]() | glFrontFace | glFrontFace 함수는 다각형의 front-facing과 back-facing을 정의한다. |
![]() | glGetDoublev | glGetDoublev 함수는 입력 매개변수에 대한 값을 반환한다. |
![]() | glGetIntegerv | |
![]() | glLineStipple | |
![]() | glLineWidth | glLineWidth 함수는 래스터화된 선의 폭을 설정한다. |
![]() | glMatrixMode | glMatrixMode 함수는 현재의 행렬이 어떤 것인지를 설정한다. |
![]() | glNormal3d(XVertex3d) | 현재 법선 벡터를 설정한다. |
![]() | glNormal3d(Double, Double, Double) | 현재 법선 벡터를 설정한다. |
![]() | glPointSize | glPointSize 함수는 래스터화된 점의 지름을 설정한다. |
![]() | glPolygonOffset | |
![]() | glPopMatrix | glPushMatrix와 glPopMtrix 함수는 현태 행렬 스택에 행렬을 넣거나 얻어온다. |
![]() | glPushMatrix | glPushMatrix와 glPopMtrix 함수는 현태 행렬 스택에 행렬을 넣거나 얻어온다. |
![]() | glReadBuffer | glReadBuffer 함수는 Opngl의 glReadBuffer와 동일한 기능을 수행한다. |
![]() | glReadPixels | glReadPixels 함수는 x, y에 대한 z 값을 추출한다 |
![]() | glRotated(XAngle, XVertex3d) | 회전(Rotation) 행렬과 현재 행렬을 곱한다. |
![]() | glRotated(Double, Double, Double, Double) | 회전(Rotation) 행렬과 현재 행렬을 곱한다. |
![]() | glScaled(XVertex3d) | 크기변환 행렬과 현재 행렬을 곱한다. |
![]() | glScaled(Double, Double, Double) | 크기변환 행렬과 현재 행렬을 곱한다. |
![]() | glTexCoord2d(XVertex2d) | 현재의 텍스쳐 좌표를 설정한다. |
![]() | glTexCoord2d(Double, Double) | 현재의 텍스쳐 좌표를 설정한다. |
![]() | glTexCoord2f | 현재의 텍스쳐 좌표를 설정한다. |
![]() | glTranslated(XVertex2d) | 이동(translation) 행렬과 현재 행렬을 곱한다. |
![]() | glTranslated(XVertex3d) | 이동(translation) 행렬과 현재 행렬을 곱한다. |
![]() | glTranslated(Double, Double) | 이동(translation) 행렬과 현재 행렬을 곱한다. |
![]() | glTranslated(Double, Double, Double) | 이동(translation) 행렬과 현재 행렬을 곱한다. |
![]() | gluUnProject(Double, Double, Double, Double, Double, Int32, Double, Double, Double) | |
![]() | gluUnProject(Int32, Int32, Int32, Double, Double, Int32, Double, Double, Double) | |
![]() | glVertex2d(XVertex2d) | 2차원 정점을 기술한다. |
![]() | glVertex2d(Double, Double) | 2차원 정점을 기술한다. |
![]() | glVertex3d(XVertex3d) | 3차원 정점을 기술한다. |
![]() | glVertex3d(Double, Double, Double) | 3차원 정점을 기술한다. |
![]() | IsUnderMouse | 마우스가 뷰 위에 있는지를 가져온다. |
![]() | OnKeyDownBridge | 어플리케이션에서 사용할 수 없다. |
![]() | OnKeyUpBridge | 어플리케이션에서 사용할 수 없다. |
![]() | OnMouseWheelBridge | 어플리케이션에서 사용할 수 없다. |
![]() | PreTranslateMessage | 윈도우 메시지를 보내기 전에 맵 엔진에서 메시지를 처리하기 위해 사용된다. |
![]() | Quit | 뷰 쓰레드를 멈춘다. Easy3D 엔진/뷰는 렌더 타겟에서 관리하지 않으므로 XDL 종료 전에 반드시 멈춰야 한다. |
![]() | ScreenToWorld | 스크린 좌표를 world 좌표로 변환한다. |
![]() | SetFixedView | |
![]() | SetLookAt | |
![]() | SetMouseControlMode | 확대축소, 회전, 이동의 마우스 제어 상태를 설정한다. |
![]() | SetUnderMouse | 내부 함수. 마우스가 뷰 위에 있는지를 설정한다. |
![]() | SetWorkspace | 객체를 렌더링하고자 하는 3차원 경계 영역을 설정한다. |
![]() | TrackballRotate | 마우스 이동의 시작 및 종료 위치를 통해 트랙볼 조작의 카메라를 회전한다. 기본적으로 이 함수는 OnMouseMove와 같은 마우스 관련 함수에 의해 호출된다. |
![]() | TrackballTranslate | 마우스 이동의 시작 및 종료 위치를 통해 트랙볼 조작의 카메라를 이동시킨다. 기본적으로 이 함수는 OnMouseMove와 같은 마우스 관련 함수에 의해 호출된다. |
![]() | UpdateDrawList | RenderDrawList() 함수에서 렌더링되는 객체들이 변경되었을 때, 현재의 draw-list를 갱신하도록 XEasy3D에게 알려주도록 플래그를 설정한다.
RenderDrawList() 함수가 호출되면, 이 플래그는 자동적으로 초기화된다. |
![]() | WorldToScreen | World 좌표를 스크린 좌표로 변환한다. |
![]() | ZoomIn | Workspace 중심으로 확대 인수에 대해 카메라를 확대한다. |
![]() | ZoomOut | Workspace 중심으로 축소 인수에 대해 카메라를 축소한다. |
Name | Description | |
---|---|---|
![]() | OnKeyDown | 키보드의 키가 다운될 때 발생된다. |
![]() | OnKeyUp | 키보드의 키가 업될 때 발생된다. |
![]() | OnMouseWheel | 마우스 휠이 사용될 때 발생된다. |
![]() | OnRenderDirect | Easy3DView가 렌더링될 때 발생한다. |
![]() | OnRenderDrawList | DrawList가 렌더링될 때 발생한다. 이 이벤트 함수에서 사용자가 도시하는 코드를 구현하면 된다. |
![]() | OnRenderScreenMode | Easy3DView가 ScreenMode로 렌더링될 때 발생한다. |
Name | Description | |
---|---|---|
![]() ![]() | m_E3DEngine |
XEasy3D는 OpenGL을 이용하여 객체를 렌더링할 수 있도록 간단하고 쉬운 구조를 제공하고 있다. OpenGL을 사용함에 있어서 가장 큰 어려움은 3차원 공간에서 카메라를 핸들링하는 것, 다시 말하면 변환 행렬을 다루는 것이다. 3차원 벡터를 이용하여 카메라를 설정하는 대신, XEasy3D는 Workspace를 설정한다. Workspace는 객체를 렌더링하고자 하는 3차원 영역을 정의하는 3차원 경계영역 상자(3D bounding box)를 말한다. Workspace는 두 벡터 (vMin, vMax)로 간단히 정의할 수 있다. 회전(Rotatation), 이동(Translation), 확대축소(Zooming)와 같은 카메라 핸들링은 마우스 동작을 통해서 이루어진다. XEasy3D가 많은 수의 도시요소를 렌더링할 때, 각 렌더링 프레임마다 모든 도시를 렌더링하는 것은 매우 버겁고 시간을 필요로 한다. 이와 같은 경우에, OpenGL은 미리 컴파일된 렌더링 명령의 종류인 draw-list를 제공한다. 하지만, OpenGL의 draw-list를 사용하는 것은 쉽지 않기 때문에, XEasy3D는 draw-list 분배를 통한 RenderDrawList 함수를 제공한다. 사용자는 draw-list의 생성, 호출, 소멸에 관해서 전혀 신경을 쓸 필요가 없다. 만약에 3개의 큰 객체가 있는데, 예를 들어, 이를 A, B, C라 하고, 아래와 같이 RenderDrawList() 함수에 다른 draw-list 인덱스를 넘겨 배분을 할 수 있다. RenderDrawList(int nIndex) { if (nIndex == 0) draw A; if (nIndex == 1) draw B; if (nIndex == 2) draw C; } RenderDirect() 함수는 draw-list 없이 매 프레임마다 객체를 렌더링하고 RenderScreeMode() 함수는 camera에 의한 투영에 영향받지 않는 정사모드로 객체를 렌더링한다.
private void nxEasy3DView1_OnRenderDirect() { XVertex3d vMin = new XVertex3d(-50, -50, -50); XVertex3d vMax = new XVertex3d(50, 50, 50); bool bWireMesh = true; nxEasy3DView1.glColor4f(255, 0, 0, 255); nxEasy3DView1.glLineWidth(0); if (bWireMesh) nxEasy3DView1.glBegin(XGraphics.GL_LINE_STRIP); else nxEasy3DView1.glBegin(XGraphics.GL_QUADS); // bottom plane nxEasy3DView1.glVertex3d(vMin.x, vMin.y, vMin.z); nxEasy3DView1.glVertex3d(vMin.x, vMax.y, vMin.z); nxEasy3DView1.glVertex3d(vMax.x, vMax.y, vMin.z); nxEasy3DView1.glVertex3d(vMax.x, vMin.y, vMin.z); if (bWireMesh) nxEasy3DView1.glVertex3d(vMin.x, vMin.y, vMin.z); // top plane nxEasy3DView1.glVertex3d(vMin.x, vMin.y, vMax.z); nxEasy3DView1.glVertex3d(vMax.x, vMin.y, vMax.z); nxEasy3DView1.glVertex3d(vMax.x, vMax.y, vMax.z); nxEasy3DView1.glVertex3d(vMin.x, vMax.y, vMax.z); if (bWireMesh) nxEasy3DView1.glVertex3d(vMin.x, vMin.y, vMax.z); // left plane (ccw) nxEasy3DView1.glVertex3d(vMin.x, vMin.y, vMin.z); nxEasy3DView1.glVertex3d(vMin.x, vMin.y, vMax.z); nxEasy3DView1.glVertex3d(vMin.x, vMax.y, vMax.z); nxEasy3DView1.glVertex3d(vMin.x, vMax.y, vMin.z); if (bWireMesh) nxEasy3DView1.glVertex3d(vMin.x, vMin.y, vMin.z); // right plane (ccw) nxEasy3DView1.glVertex3d(vMax.x, vMin.y, vMin.z); nxEasy3DView1.glVertex3d(vMax.x, vMax.y, vMin.z); nxEasy3DView1.glVertex3d(vMax.x, vMax.y, vMax.z); nxEasy3DView1.glVertex3d(vMax.x, vMin.y, vMax.z); if (bWireMesh) nxEasy3DView1.glVertex3d(vMax.x, vMin.y, vMin.z); // front plane (ccw) nxEasy3DView1.glVertex3d(vMin.x, vMin.y, vMin.z); nxEasy3DView1.glVertex3d(vMax.x, vMin.y, vMin.z); nxEasy3DView1.glVertex3d(vMax.x, vMin.y, vMax.z); nxEasy3DView1.glVertex3d(vMin.x, vMin.y, vMax.z); if (bWireMesh) nxEasy3DView1.glVertex3d(vMin.x, vMin.y, vMin.z); // back plane (ccw) nxEasy3DView1.glVertex3d(vMin.x, vMax.y, vMin.z); nxEasy3DView1.glVertex3d(vMin.x, vMax.y, vMax.z); nxEasy3DView1.glVertex3d(vMax.x, vMax.y, vMax.z); nxEasy3DView1.glVertex3d(vMax.x, vMax.y, vMin.z); if (bWireMesh) nxEasy3DView1.glVertex3d(vMin.x, vMax.y, vMin.z); nxEasy3DView1.glEnd(); }
private void nxEasy3DView1_OnRenderDirect() { nxEasy3DView1.DrawCube(new XVertex3d(-50, -50, -50), new XVertex3d(0, 0, 0), Color.Red, false); nxEasy3DView1.DrawCube(new XVertex3d(-50, -50, -50), new XVertex3d(0, 0, 0), Color.Blue, true); }
private void nxEasy3DView1_OnRenderDrawList(int nIndex) { if (nIndex == 0) { nxEasy3DView1.DrawCube(new XVertex3d(-50, -50, -50), new XVertex3d(0, 0, 0), Color.Red, false); nxEasy3DView1.DrawCube(new XVertex3d(-50, -50, -50), new XVertex3d(0, 0, 0), Color.Blue, true); } else { nxEasy3DView1.DrawCube(new XVertex3d(0, 0, 0), new XVertex3d(50, 30, 40), Color.Green, true); } }