1992.11.13

SUBJECT: XGL 2.0 Programming

 1. 목 차

    1)  XGL 개요

    2)  Fonts

    3)  2D rendering

    4)  Patterns

    5)  Color

    6)  Picking

    7)  Viewing

    8)  Transforms

    9)  3D Rendering

    10) Lighting

 2. 개요

     1) XGL이란 ?


        (1) 2차원 과 3차원을 지원하는 Graphic Library.

        (2) CAD/CAM 부문에서 실용가능한 Graphic Library.

        (3) 기본적으로 X11 window 혹은 Openwindow에서 운영되는 Application을 작성하기위한 Graphic Library.

            그 이유는 XGL을 이용한 program이 작동시에 display device를 확~인하는 절차를 통해 X11의 server

            혹은 News server에의해 관리되기때문이다.

     2) XGL에서 사용되는 개념

        (1) system state : xgl을 위한 data area를 초기화 함.

        (2) device : drawing을 하는 곳.

        (3) context : state에대한 정보와 rendering을 위한 특성등을 저장한것.

        (4) stroke font : 사용할 font의 유형.

        (5) line pattern : dash-dot 유형.

        (6) color map : rgb color 혹은 index table.

        (7) transform : 관련된 시스템간의 변화들을 위한 matrix.개요

        (8) light : shading시에 사용되는 빛, 즉 명암.

      3) XGL program의 작성 절차

         (1) rendering function을 이용하여 기초적인 graphic 구조를 만듬.

              : data구성 --> rendering을 위한 특성지정 --> data의 context 작성

         (2) 사용할 fonts의 유형(크기,서체,기울기 등)을 지정

         (3) 이차원 혹은 삼차원의 도형인지를 작성후 표면처리에대한 정의

         (4) 색상에대한 정의 및 viewing 과정을 정의

         (5) transform의 과정을 정의후 명암에 대한 정의

         (6) code의 compile

         (7) 실행 화일의 수행

      4) XGL을 이용하여 만든 Application의 작동 절차

         (1) 기본 절차를 보면 다음과 같다.

             a) window에 기초

             b) XGL Program 수행

             c) system state의 object가 만들어짐

             d) 그 object를 통해 window device object가 만들어 짐.

             e) 그후 context object가 만들어짐.

             f) 실제적인 graphic이 display됨.

       5) 실제 적용 및 적용 대상

          (1) 실제적용 사례 : AutoCad

          (2) 적용 가능 대상 : 현대중공업의 배 설계 program인 Autocon software의 새로운 Version의 작성

                ( 향상된 처리 능력과 섬세한 표현력에따라 높은 작업의 향샹성이 기대됨 )

 3. XGL API

    1) declarations

       Xgl_sys_state

       Xgl_win_ras

       Xgl_2d_ctx

       위와 같이 declaration들은 대문자 X로 시작하고 underscore로 연결되며 ()의 표시가 없다.

    2) object operators

       xgl_open()

       xgl_object_create()

       xgl_object_set()

       xgl_object_get()

       xgl_object_destroy()

       위와같이 object operator들은 소문자 xgl로 시작하고 함수의 특성을 가진다.

     3) object attributes

        XGL_WIN_X

        XGL_CTX_DEVICE

        XGL_CTX_SFONT_CHAR_HEIGHT

        위와같이 object attribute들은 색상,길이,폭,높이등의 속성에대한 것으로 대문자로 표기한다.

        속성은 대상체의 특성을 변경시키고 그것에 해당하는  값들을 가지고 있다.

        ex) 

            xgl_object_set(object,

                  ATTRIBUTE, value,

                  ATTRIBUTE, value,

                  0);

             xgl_object_get(object,ATTRIBUTE,&var);

      4) primitives

         xgl_stroke_text_2d()

4. Initialization

    1) 절차

                                     -----------------------------
         Xlib/Toolkit Library        |          Window           |
                                     -----------------------------
                                                   |
                                                   V
                                     -----------------------------
         XGL Library                 |        system state       |
                                     -----------------------------
                                                   |
                                                   V
                                     -----------------------------
         XGL Library                 |   Device (window raster)  |
                                     -----------------------------
                                                   |
                                                   V
                                     -----------------------------
         XGL Library                 |          context          |
                                     -----------------------------

                                                  
    XGL programming은 drawing을위해 window를 만들기위해 X toolkits 혹은 Xlib를 사용해야 한다.

    system state object는 단지 한번만 만들어지고 XGL에의해 사용되는 data area를 정의한다.

    window device object는 window,display,screen을 조작하기위해 Xlib를 필요로 한다.

    또한 display device의 유형을 결정하기위해 server에 query를 한다.

    그리고 multiple device objects가 될수있다.

    context object는 device가 context에 연결되도록하고,모든 rendering은 context를 가지고 수행되고,

    rendering attributes는 context에 set된다.

    multiple context objects가 될수도 있다.

 5. Rendering

    1) 절차

       data 구축 --> Rendering Attributes를 set --> Primitive를 call

    2) primitive data

       - data는 좌표점,색상,표면상태 등을 포함하고 있다.

       - union을 포함하고있는 struct는 integer,float,fract(분수), 2D / 3D data를 지원한다.

       - 좌표 (0,0)는 상단 좌측의 값이다.

    3) 모든 rendering 속성값은 context object에 setting된다.

       xgl_object_set( context,

            XGL_CTX_SFONT_CHAR_HEIGHT , 20.0

            0);

    4) primitive call은 drawing을 하기위해 context와 data를 사용한다.

       primitive(context,data ...);

    5) compile의 예

       cc hello.c -I$XGLHOME/include -I$OPENWINHOME/include -L$OPENWINHOME/lib -L$OPENWINHOME/lib

         -lxgl -lxview -lolgx -lX11 -lm

 6. FONTS

    1) creating fonts

       font object는 font family로부터 형태의 특별유형으로 정의된다.

       하나의 font object는 render되는 각각의 font에의해 만들어진다.

       render되는 속성(크기,방위 등)은 context에 set된다.

       font들은 $XGLHOME/lib/xglfonts/stroke/fontname.phont에 정의되어 있다.

       XGL font들의 이름은 다음과 같다.

       - Cartographic    Cartographic_M   English_G   Greek   Greek_C

         Greek_M   Headline   Miscellaneous   Miscellaneous_M  Italic_C

         Roman   Roman_D   Roman_M   Roman_T   Roman_C   Script   Script_C

       font object는 다음에의해 만들어 진다.

           font = xgl_stroke_font_create("fontname",0);

       context에의해 사용되는 font를 확인하기위해서는 다음을 수행하면 된다.

           xgl_object_set(context,XGL_CTX_SFONT,font,0);

    2) rendering text

       XGl font는 Phigs ANSII standard에 따른다.

       Font rendering ATTRIBUTE들은 다음과 같다.

         XGL_CTX_SFONT

         XGL_CTX_SFONT_CHAR_HEIGHT

         XGL_CTX_SFONT_CHAR_SPACING

         XGL_CTX_SFONT_EXPANSION_FACTOR

         XGL_CTX_SFONT_TEXT_ALIGN_HORIZ

         XGL_CTX_SFONT_TEXT_ALIGN_VERT

         XGL_CTX_SFONT_CHAR_UP_VECTOR

         XGL_CTX_SFONT_CHAR_SLANT_ANGLE

         XGL_CTX_SFONT_TEXT_PATH

         XGL_CTX_SFONT_TEXT_COLOR

         XGL_CTX_SFONT_TEXT_PREC

        render text는 xgl_stroke_text_2d(context,"string",point); 의 형태를 가진다.

        string을 위한 점들의 연속점과 bounding box를 얻기위해서는 다음을 이용해야 한다.

          xgl_stroke_text_extent(context,"string",rect,cat_pt);

  7. 2D primitives

     2D에 관련된 primitive들은 다음과 같다.

     xgl_multimaker()

     xgl_multipolyline()

     xgl_multirectangle()

     xgl_multicircle()

     xgl_multiarc()

     xgl_multi_simple_polygon()

     xgl_polugon()

     xgl_nu_bspline_curve()

     primitive를 가지고 redering을 하는 절차는 다음과 같다.

      1) primitive data를 정의

      2) context에 redering attribute들을 set.

      3) context와 data를 가지고 primitive를 call한다.

         그 형태는 다음과 같다.

           primitive(context,data parameters ...);

      multi primitive들은 다수의 single call들보다는 더 낳은 수행 능력을 제공한다.

  8. patterns

     어떤 primitive들은 표면이나 가장자리 선을 rendering하는데 사용된다.    

     line pattern들은 하나의 XGL object로 만들어 진다.

        Xgl_lpat    xgl_line_pattern_create()

     가장자리 선(EDGE)들은 패턴,색상,폭을 가질수 있다.

        XGL_CTX_EDGE_STYLE

        XGL_CTX_EDGE_PATTERN

        XGL_CTX_EDGE_COLOR

        XGL_CTX_EDGE_WIDTH_SCALE_FACTOR

     선(line)들은 패턴,색상,폭,cap style,join style을 가질수 있다.

        XGL_CTX_LINE_STYLE

        XGL_CTX_LINE_PATTERN

        XGL_CTX_LINE_COLOR

        XGL_CTX_LINE_WIDTH_SCALE_FACTOR

        XGL_CTX_LINE_CAP

        XGL_CTX_LINE_JOIN

      pattern을 채우는 방법(fill pattern)은 XGL memory raster로써 만들어 진다.

        Xgl_mem_ras    xgl_memory_raster_device_create()

      primitive surface는 패턴,색상과 다른형태의 fill style을 가질수 있다. 

        XGL_CTX_SURF_FRONT_FILL_STYLE

        XGL_CTX_SURF_FPAT

        XGL_CTX_SURF_FRONT_COLOR

  9. Color

       xgl은 RGB와 index color를 통해 지원된다.

       index된 colormap은  XGL object로써 만들어 진다.

          Xgl_cmap   xgl_color_map_create()

       color type과 colormap은 window rater device에 할당된다.

          XGL_RAS_COLOR_TYPE
    
          XGL_RAS_COLOR_MAP

       원하는 color index(RGB value)는 color struct에 할당된다.

       color struct는 rendering  속성 혹은 primitive data에 할당된다.

       color들은 primitive dege,line,marker,surface에 할당된다.

       XGL의 index된 color program은 RGB frame buffer에서 수행된다.

       XGL RGB color program은 index된 frame buffer상에서 수행된다.

  10. picking

       pick aperture(찍혀진 점)은 test된 volume혹은 지역으로 정의될수 있다.

       pick은 aperture가 rendering image를 겹쳤을때 검사될수 있다.

       각각의 사실의 pick test에대한 pick ID는 pick buffer에 저장된다.

       * picking하는 절차

         1) pick aperture를 확인

         2) contex상에서 picking이 가능해짐

         3) context상에서 rendering이 불가능해짐

         4) pick buffer를 clear함

         5) 각각의 image를 rendering하기전에 pick ID를 할당

         6) context상에서 picking이 불가능해짐

         7) context상에서 rendering이 가능해짐

         8) pick buffer를 query

        picking은 CPU 집중적이게 될수있다.

   11. viewing

       virtual window은 가시적인 영역으로 규정될수 있다.

       virtual window 밖으로 놓여진 render된 image들은 발췌된다.

       가시적인 window의 크기 및 위치는 변화될수 있다.

       virtual window은 device viewport에 mapping된다.

   12. Transforms

       transform되는 순서는 먼저 Model Coordinates(MC)를 거쳐 World Coordinates(WC)되고,Virtual

       Device Coordinates(VDC)된다.


       primitive data는 MC에서 규정된다.

       MC는 두가지 transform의 총합이다.

         XGL_CTX_LOCAL_MODEL_TRANS

         XGL_CTX_GLOBAL_MODEL_TRANS

       모든 render된 primitive들은 WC와 관련된다.

       view는 view transform을 적용함에의해 변경될수 있다.

          XGL_CTX_VIEW_TRANS

       transform들은 다음으로 만들어진 xgl object이다.

       transform operator들은 ratation,scaling,translation을 포함한다.

  13. 3D rendering

        xgl_multimarker()

        xgl_multipolyline()

        xgl_multi_simple_polygon()

        xgl_polygon()

        xgl_quadrilateral_mesh()

        xgl_triangle_strip()

        xgl_stroke_text_3d()

        xgl_nu_bspline_curve()

      전면과 후면을 구별하기위해서는 다음을 사용하여야 한다.

        XGL_3D_CTX_SURF_FACE_DISTINGUISH

      전면과 후면은 다른 색상을 가질수 있다.

        XGL_CTX_SURF_FRONT_COLOR

        XGL_3D_CTX_SURF_BACK_COLOR

       polygon의 표면은 facet 정보로 규정될수 있다.

        XGL_FACET_NONE

        XGL_FACET_COLOR

        XGL_FACET_NORMAL

        XGL_FACET_COLOR_NORMAL

       Normal은 표면의 전면을 정의하는 vector 값으로 정의될수 있다.

        typedef struct {

             Xgl_pt_f3d  normal;
    
         } Xgl_normal_facet;

       3D viewing은 view volume( window )의 z축이 아래로해서 발생된다.

       view window의 방위는 GL_CTX_VDC_ORIENTATION로서 변경될수 있다.

       view를 회전하기위해서는 view volume orign이 변형된다.

  14. Lighting

      light source의 종류는 다음과 같다.

       - directional 

       - spot 

       - positional

       - ambient

       ( page 9 -2 의 그림 )

      light source는 context로 연결된 object이다.

         XGL_3D_CTX_LIGHT_NUM

         XGL_3D_CTX_LIGHTS

       새로운 light object들은 Xgl_light  xgl_light_create() 로서 만들어진다.

       light object 속성들은 다음과 같다.

         - XGL_LIGHT_TYPE

           XGL_LIGHT_COLOR

           XGL_LIGHT_ATTENUATION_1

           XGL_LIGHT_DIRECTION

           XGL_LIGHT_POSITION

           XGL_LIGHT_SPOT_ANGLE

           XGL_LIGHT_SPOT_EXPONENT

         light source는 다음에의해 켜지고 꺼질수 있다.

           XGL_3D_CTX_LIGHT_SWITCHES

         표면의 반사 형태는 다음과 같다.

         - diffuse

         - specular

         - ambient

         ( page 9-4 참조 )

         context은 표면을 rendering하기위해 적용되는 속성이다.

            XGL_3D_CTX_SURF_FRONT_AMBIENT

            XGL_3D_CTX_SURF_FRONT_DIFFUSE

            XGL_3D_CTX_SURF_FRONT_SPECULAR

            XGL_3D_CTX_SURF_FRONT_SPECULAR_COLOR

            XGL_3D_CTX_SURF_FRONT_SPECULAR_POWER

            XGL_3D_CTX_SURF_FRONT_LIGHT_COMPONENT
      
  15. sliding

      여기에는 세가지 형태,즉 조면이 없는 상태와 facet,vertex의 유형이 있다.

         XGL_3D_CTX_SURF_FRONT_ILLUMINATION

      index된 color을 사용할때,color ramp들은 sading을 하는데 사용된다.

         XGL_CMAP_RAMP_NUM

         XGL_CMAP_RAMP_LIST

      shade되는 각각의 표면은 normal과 color index를 가져야만 한다.



Revision History
Created                  on 13 Nov , 1992