Click or drag to resize
XDL

NXEasy3DView Class

이 클래스는 3D 환경에서 매우 간단한 객체를 그려보는 데에 유용하다. 사용자는 direct rendering이나 drawing-list rendering을 통해 객체를 도시할 수 있다. Direct rendering은 직접 OpenGL을 이용하여 draw-list없이 각 프레임마다 렌더링하는 것을 말한다. Drawing-list rendering은 카메라의 투영에 영향을 받지 않고 정사모드로 객체를 렌더링하는 것을 말한다.
Inheritance Hierarchy

Namespace:  Pixoneer.NXDL.NXEasy3D
Assembly:  NXEasy3D (in NXEasy3D.dll) Version: 1.2.817.72
Syntax
C#
public class NXEasy3DView : Panel

The NXEasy3DView type exposes the following members.

Constructors
  NameDescription
Public methodNXEasy3DView
NXEasy3DView 객체를 생성하고 데이터 멤버를 초기화환다. 기본 생성자.
Top
Properties
  NameDescription
Public propertyBackGroundColor
화면 배경 색상을 가져오거나 설정한다.
Public propertyLightingFlag
빛 효과를 적용할지를 설정하는 boolean 값을 가져오거나 설정한다.
Public propertyRefreshRate
렌더링 콜백 쓰레드 주기를 나타낸다. (Hz)
Public propertyViewMode
뷰 모드를 나타내는 값을 가져오거나 설정한다.
Top
Methods
  NameDescription
Public methodDrawCube
두 개의 경계 벡터를 이용하여 정육면체를 도시하는 기정의된 함수.
Public methodDrawTIN
TIN(Triangular Irregular Network)을 도시하는 기정의된 함수. TIN 데이터는 정점 배열과 삼각형의 인덱스로 구정된 데이터 구조를 말하면 Pixoneer.NXDL.NRS의 XDMBandEpipolarDEM에서 생성된다.
Public methodGetHandle
Public methodGetLookAt
Public methodGetMouseControlMode
설정되어 있는 마우스 제어 상태를 가져온다.
Public methodglAlphaFunc
glAlphaFunc 함수는 알파 테스트 함수를 설정할 수 있도록 활성화시킨다.
Public methodglBegin
glBegin과 glEnd 함수는 한 개의 primitive나 primitive 그룹의 정점 범위를 정한다.
Public methodglBindTexture
glBindTexture 함수는 텍스쳐 대상에 대해 명명된 텍스쳐 생성을 가능하게 한다.
Public methodglBlendFunc
glBlendFunc 함수는 화소 연산을 기술한다.
Public methodglColor
현재 색상을 설정한다.
Public methodglColor3d
현재 색상을 설정한다.
Public methodglColor3f
현재 색상을 설정한다.
Public methodglColor4d
현재 색상을 설정한다.
Public methodglColor4f
현재 색상을 설정한다.
Public methodglColor4ub
현재 색상을 설정한다.
Public methodglDepthFunc
glDepthFunc 함수는 Opngl의 glDepthFunc와 동일한 기능을 수행한다.
Public methodglDisable
glEnable과 glDisable 함수는 OpenGL 기능을 활성화하거나 비활성화한다.
Public methodglEnable
glEnable과 glDisable 함수는 OpenGL 기능을 활성화하거나 비활성화한다.
Public methodglEnd
glBegin과 glEnd 함수는 한 개의 primitive나 primitive 그룹의 정점 범위를 정한다.
Public methodglFrontFace
glFrontFace 함수는 다각형의 front-facing과 back-facing을 정의한다.
Public methodglGetDoublev
glGetDoublev 함수는 입력 매개변수에 대한 값을 반환한다.
Public methodglGetIntegerv
Public methodglLineStipple
Public methodglLineWidth
glLineWidth 함수는 래스터화된 선의 폭을 설정한다.
Public methodglMatrixMode
glMatrixMode 함수는 현재의 행렬이 어떤 것인지를 설정한다.
Public methodglNormal3d(XVertex3d)
현재 법선 벡터를 설정한다.
Public methodglNormal3d(Double, Double, Double)
현재 법선 벡터를 설정한다.
Public methodglPointSize
glPointSize 함수는 래스터화된 점의 지름을 설정한다.
Public methodglPolygonOffset
Public methodglPopMatrix
glPushMatrix와 glPopMtrix 함수는 현태 행렬 스택에 행렬을 넣거나 얻어온다.
Public methodglPushMatrix
glPushMatrix와 glPopMtrix 함수는 현태 행렬 스택에 행렬을 넣거나 얻어온다.
Public methodglReadBuffer
glReadBuffer 함수는 Opngl의 glReadBuffer와 동일한 기능을 수행한다.
Public methodglReadPixels
glReadPixels 함수는 x, y에 대한 z 값을 추출한다
Public methodglRotated(XAngle, XVertex3d)
회전(Rotation) 행렬과 현재 행렬을 곱한다.
Public methodglRotated(Double, Double, Double, Double)
회전(Rotation) 행렬과 현재 행렬을 곱한다.
Public methodglScaled(XVertex3d)
크기변환 행렬과 현재 행렬을 곱한다.
Public methodglScaled(Double, Double, Double)
크기변환 행렬과 현재 행렬을 곱한다.
Public methodglTexCoord2d(XVertex2d)
현재의 텍스쳐 좌표를 설정한다.
Public methodglTexCoord2d(Double, Double)
현재의 텍스쳐 좌표를 설정한다.
Public methodglTexCoord2f
현재의 텍스쳐 좌표를 설정한다.
Public methodglTranslated(XVertex2d)
이동(translation) 행렬과 현재 행렬을 곱한다.
Public methodglTranslated(XVertex3d)
이동(translation) 행렬과 현재 행렬을 곱한다.
Public methodglTranslated(Double, Double)
이동(translation) 행렬과 현재 행렬을 곱한다.
Public methodglTranslated(Double, Double, Double)
이동(translation) 행렬과 현재 행렬을 곱한다.
Public methodgluUnProject(Double, Double, Double, Double, Double, Int32, Double, Double, Double)
Public methodgluUnProject(Int32, Int32, Int32, Double, Double, Int32, Double, Double, Double)
Public methodglVertex2d(XVertex2d)
2차원 정점을 기술한다.
Public methodglVertex2d(Double, Double)
2차원 정점을 기술한다.
Public methodglVertex3d(XVertex3d)
3차원 정점을 기술한다.
Public methodglVertex3d(Double, Double, Double)
3차원 정점을 기술한다.
Public methodIsUnderMouse
마우스가 뷰 위에 있는지를 가져온다.
Public methodOnKeyDownBridge
어플리케이션에서 사용할 수 없다.
Public methodOnKeyUpBridge
어플리케이션에서 사용할 수 없다.
Public methodOnMouseWheelBridge
어플리케이션에서 사용할 수 없다.
Public methodPreTranslateMessage
윈도우 메시지를 보내기 전에 맵 엔진에서 메시지를 처리하기 위해 사용된다.
Public methodQuit
뷰 쓰레드를 멈춘다. Easy3D 엔진/뷰는 렌더 타겟에서 관리하지 않으므로 XDL 종료 전에 반드시 멈춰야 한다.
Public methodScreenToWorld
스크린 좌표를 world 좌표로 변환한다.
Public methodSetFixedView
Public methodSetLookAt
Public methodSetMouseControlMode
확대축소, 회전, 이동의 마우스 제어 상태를 설정한다.
Public methodSetUnderMouse
내부 함수. 마우스가 뷰 위에 있는지를 설정한다.
Public methodSetWorkspace
객체를 렌더링하고자 하는 3차원 경계 영역을 설정한다.
Public methodTrackballRotate
마우스 이동의 시작 및 종료 위치를 통해 트랙볼 조작의 카메라를 회전한다. 기본적으로 이 함수는 OnMouseMove와 같은 마우스 관련 함수에 의해 호출된다.
Public methodTrackballTranslate
마우스 이동의 시작 및 종료 위치를 통해 트랙볼 조작의 카메라를 이동시킨다. 기본적으로 이 함수는 OnMouseMove와 같은 마우스 관련 함수에 의해 호출된다.
Public methodUpdateDrawList
RenderDrawList() 함수에서 렌더링되는 객체들이 변경되었을 때, 현재의 draw-list를 갱신하도록 XEasy3D에게 알려주도록 플래그를 설정한다. RenderDrawList() 함수가 호출되면, 이 플래그는 자동적으로 초기화된다.
Public methodWorldToScreen
World 좌표를 스크린 좌표로 변환한다.
Public methodZoomIn
Workspace 중심으로 확대 인수에 대해 카메라를 확대한다.
Public methodZoomOut
Workspace 중심으로 축소 인수에 대해 카메라를 축소한다.
Top
Events
  NameDescription
Public eventOnKeyDown
키보드의 키가 다운될 때 발생된다.
Public eventOnKeyUp
키보드의 키가 업될 때 발생된다.
Public eventOnMouseWheel
마우스 휠이 사용될 때 발생된다.
Public eventOnRenderDirect
Easy3DView가 렌더링될 때 발생한다.
Public eventOnRenderDrawList
DrawList가 렌더링될 때 발생한다. 이 이벤트 함수에서 사용자가 도시하는 코드를 구현하면 된다.
Public eventOnRenderScreenMode
Easy3DView가 ScreenMode로 렌더링될 때 발생한다.
Top
Fields
  NameDescription
Public fieldStatic memberm_E3DEngine
Top
Remarks

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에 의한 투영에 영향받지 않는 정사모드로 객체를 렌더링한다.

Examples
Direct rendering 예제 1 :
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();
}
Direct rendering 예제 2 :
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);
}
Draw-list rendering 예제 :
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);
    }
}
See Also