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