̏͂ł̓eNX`A摜AGLXgAɃO[sOɂ̊gKȗĐ܂B
ł͈ȉɕtĊwт܂:
|SItZbgg(EXT_polygon_offset) ͉BC[W̕`AnCCgꂽGbW̃\bh̕`A\ʂɓ]ʉ(decal)ZbgꍇȂǂɗLłB
̊ǵAƂΕ\ʂ̃AEgC`悵ꍇȂǂɕ֗ɂȂ܂B
̓|Sƈ�= XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone); swa.border_pixel = 0; swa.event_mask = ExposureMask | StructureNotifyMask | KeyPressMask | ButtonPressMask | ButtonMotionMask; win = XCreateWindow(dpy, RootWindow(dpy, vi->screen), 0, 0, 900, 300, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel|CWColormap|CWEventMask, &swa); XStoreName(dpy, win, "hiddenline"); XMapWindow(dpy, win); glXMakeCurrent(dpy, win, cx); /* PolygonOffsetgp"\`FbN */ if (!query_extension("GL_EXT_polygon_offset")) error(argv[0], "polygon_offset extension is not available"); /* r[COp[^ݒ */ glMatrixMode(GL_PROJECTION); gluPerspective(20, 1, 0.1, 20); glMatrixMode(GL_MODELVIEW); glTranslatef(0, 0, -15); /* ̑̓Kȏԏݒ */ glEnable(GL_DEPTH_TEST); glPolygonOffsetEXT(1.0, 0.000001); /* [U[ESC܂ł̃Cxg */ while (1) process_input(dpy, win); } static void draw_scene(int mx, int my) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef(-1.7, 0.0, 0.0); cubes(mx, my, WIREFRAME); glPopMatrix(); glPushMatrix(); cubes(mx, my, HIDDEN_LINE); glPopMatrix(); glPushMatrix(); glTranslatef(1.7, 0.0, 0.0); glEnable(GL_POLYGON_OFFSET_EXT); cubes(mx, my, HIDDEN_LINE); glDisable(GL_POLYGON_OFFSET_EXT); glPopMatrix(); } static void cubes(int mx, int my, int mode) { int x, y, z, i; /* }EXgbN */ glRotatef(mx / 2.0, 0, 1, 0); glRotatef(my / 2.0, 1, 0, 0); /* BƂă|S` */ glTranslatef(-0.5, -0.5, -0.5); glScalef(1.0/dimension, 1.0/dimension, 1.0/dimension); for (z = 0; z < dimension; z++) { for (y = 0; y < dimension; y++) { for (x = 0; x < dimension; x++) { glPushMatrix(); glTranslatef(x, y, z); glScalef(0.8, 0.8, 0.8); for (i = 0; i < MAXQUAD; i++) draw_hidden(quads[i], mode); glPopMatrix(); } } } } static void fill(Quad quad) { /* hׂꂽ|S` */ glBegin(GL_QUADS); glVertex3fv(quad[0]); glVertex3fv(quad[1]); glVertex3fv(quad[2]); glVertex3fv(quad[3]); glEnd(); } static void outline(Quad quad) { /* |S̗֊s` */ glBegin(GL_LINE_LOOP); glVertex3fv(quad[0]); glVertex3fv(quad[1]); glVertex3fv(quad[2]); glVertex3fv(quad[3]); glEnd(); } static void draw_hidden(Quad quad, int mode) { /* ֊s𔒂ŕ`BIvVœœhׂ */ glColor3f(1, 1, 1); outline(quad); if (mode == HIDDEN_LINE) { glColor3f(0, 0, 0); fill(quad); } } static void process_input(Display *dpy, Window win) { XEvent event; static int prevx, prevy; static int deltax = 90, deltay = 40; do { char buf[31]; KeySym keysym; XNextEvent(dpy, &event); switch(event.type) { case Expose: break; case ConfigureNotify: { /* ̃Av[`̓r[|[g1:1̃AXyNgVIɐݒ肷B*/ int vX, vY, vW, vH; int eW = event.xconfigure.width, eH = event.xconfigure.
花崗岩の鉄のフックをインストールする方法height; if (eW >= eH) { vX = 0; vY = (eH - eW) >> 1; vW = vH = eW; } else { vX = (eW - eH) >> 1; vY = 0; vW = vH = eH; } glViewport(vX, vY, vW, vH); } break; case KeyPress: (void) XLookupString(&event.xkey, buf, sizeof(buf), &keysym, NULL); switch (keysym) { case XK_Escape: exit(EXIT_SUCCESS); default: break; } case ButtonPress: prevx = event.xbutton.x; prevy = event.xbutton.y; break; case MotionNotify: deltax += (event.xbutton.x - prevx); prevx = event.xbutton.x; deltay += (event.xbutton.y - prevy); prevy = event.xbutton.y; break; default: break; } } while (XPending(dpy)); draw_scene(deltax, deltay); glXSwapBuffers(dpy, win); } static void error(const char *prog, const char *msg) { fprintf(stderr, "%s: %s\n", prog, msg); exit(EXIT_FAILURE); } static int query_extension(char* extName) { char *p = (char *) glGetString(GL_EXTENSIONS); char *end = p + strlen(p); while (p < end) { int n = strcspn(p, " "); if ((strlen(extName) == n) && (strncmp(extName, p, n) == 0)) return GL_TRUE; p += (n + 1); } return GL_FALSE; }
}8-1 |SItZbgggp
_zg(EXT_vertex_array)͕̊v~eBũTu[`R[Ŏw肷邱Ƃ"\ɂ܂B
̐߂ł͍ŏɁAȂEĂǂ̂悤ȏꍇɂ̊g𗘗p邱ƂɂȂ̂Aꂩ炱̊gǂ̂悤ɓ삷邩Aɂ͐ÓI܂͔ÓIzɊւc_Ɨp@ɂČy܂B
ȂEĂǂ̂悤ȏꍇɒ_zg𗘗p̂
ꂼ̓Ɨ_A@A͐Fn߂OpenGLvV[WĂяoɁA_E@EF̕ʁX̔zw肵Av~eBũV[PX(ׂē^)w肷邱Ƃł܂B
ɂ͊glDrawArraysEXT()ƂP̊gp܂B
̊gɂAu܂(stride)ṽJjYAAvP[V͑SẴf[^P̔zɔ[߂ĂƂƂ"\ɂȂ܂B
ƂAFE_EGbW̃f[^AKvȎɂ܂(stride number)gpĊe^CvɃANZX邱Ƃł܂B
̊g͊ezvf̕`T|[gĂ܂Bevf͗LȔz̃CfbNXƂĎw肵܂B
: _zg̎gpɂptH[}X̑܂͈܂B
̊g̎gpɂAvP[VšĂяo͌܂Az̃f[^ɃANZX邽߂̃I[o[wbh܂B
ꂼ̌ʂC[uɂȂ|Cg̓AvP[VsVXeɂقȂ܂B
RealityEngineVXeɂ`[jOꂽɂẮu_zg̍œKꂽpvQƂĂB
VROtBbNX̃VXeł̓VOzL̏ꍇɂǂptH[}X܂B
̊g͕ɑčœKĂǍ^ɑĂ͍œKĂ܂B
āÃptH[}XeXgsAAvP[VɂĒ_z̗p{ɑÓȂ̂ǂ邱Ƃ߂܂B
_zg̓
̊g͌ʂ̔zւ̃|C^[Ɣz̗vf(_E@EFEFwWEeNX`WEGbWtO)Ɋ֘AÂꂽf[^Ǘ܂B
ezɊ֘AÂf[^ɂ͈ȉ̂̂ݒ肵܂B
- z̒l̃f[^^
- z̗vf̒l̐(Ƃ2,3,܂4W̒_)
- z玟̔z܂ł̃oCg
- (ŏ琔)ÓIvf̐
ÓIvf̓AvP[VɂďC邱Ƃł܂ACsꍇ͕`OɃAvP[V疾IɍĐݒ肵ȂȂ܂B
zݒ肵ꍇÃ|C^Ɗ֘Af[^̓NCAg̏ԂŕۊǂAÓIvf̓LbV܂B
܂vfÓIȂ̂ƂĒ`ꍇ́AglVertexPointerEXT()countgpĕύXȂƂۏ܂B
ÓI(I)vfglArrayElementEXT()glDrawArraysEXT()Ă܂ŃANZXׂł͂܂B
قȂނ̃f[^zƂĐݒ肷
̏͂͒_̔zݒ肷ꍇɂĂ̏܂B@EFEFwWEeNX`WEGbWtOɂĂ̐͊܂܂܂BȂ邽߂Ƀt@Xy[WQƂĂB
木彫りのためにナイフをシャープにする方法
- glVertexPointerEXT()͒_W̔z̃f[^^ƁAꏊw肵܂B
- pointer ɂ͔ẑPԖڂ̒_̂PԖڂ̍W̃|C^Zbg܂B
- type ɂ͔z̊eW̃f[^^w肷Bȉ̒lw肷邱Ƃł܂B
GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE_EXT (ꂼOpenGL̃f[^^short, int, float, doubleɑ܂B) - size ɂ͒_̍Ww肵܂B2A3A܂4B
- stride ɂ͘A钸_̃|C^[Ԃ̃oCgItZbgݒ肵܂Bstride 0 ̏ꍇ͒_f[^͂̔zɂ[ĂƂ݂Ȃ܂B
- count ͐ÓIȒ_̐w肵܂BPԖڂ琔܂B
- glNormalPointerEXT()͖@̔z̏ꏊƃf[^tH[}bgݒ肵܂B
- glColorPointerEXT()͐Fvf̔z̏ꏊƃf[^tH[}bgݒ肵܂B
- glIndexPointerEXT()͐FwW̔z̏ꏊƃf[^tH[}bgݒ肵܂B
- glTexCoordPointerEXT() ̓eNX`W̔z̏ꏊƃf[^tH[}bgݒ肵܂B
- glEdgeFlagPointerEXT()̓GbWtO̔z̏ꏊƃf[^tH[}bgݒ肵܂B
z̕`
ftHgłׂ͂Ă̔z͖ŁAglArrayElementEXT() glDrawArraysEXT() ĂĂANZX͂ł܂BezL/ɂɂ cap\8-1̒̓KȒlZbgglEnable() ܂ glDisable() Ăяo܂B
\8-1: zLɂ邽߂̃g[N
zwR}h | g[N |
glVertexPointerEXT | GL_VERTEX_ARRAY_EXT |
glNormalPointerEXT | GL_NORMAL_ARRAY_EXT |
glColorPointerEXT | GL_COLOR_ARRAY_EXT |
glIndexPointerEXT | GL_INDEX_ARRAY_EXT |
glTexCoordPointerEXT | GL_TEXTURE_COORD_ARRAY_EXT |
glEdgeFlagPointerEXT | GL_EDGE_FLAG_ARRAY_EXT |
glArrayElementEXT()ĂꂽꍇALłziԖڂ̒_Ƒf[^ĂĂP̒_`悳܂B
GL_VERTEX_ARRAY_EXTLłȂꍇłAglArrayElementEXT()͎s܂B̏ꍇ`͍s܂ALłzɑΉ͏C܂B
glDrawArraysEXT()ĂꂽꍇAfromn܂count̃V[PVȗvfALłezoāAV[PVȊv~eBu\܂B
mode p[^ɂ͂ǂ̂悤ȃv~eBu\邩AĂ̂悤ȃv~eBu\鎞ɔz̗vfǂ̂悤Ɏgp邩w肵܂Bgpłl͈ȉB
GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_QUAD_STRIP, GL_QUADS, GL_POLYGON
GL_VERTEX_ARRAY_EXTLłȂꍇAv~eBu͐܂B
glDrawArraysEXT()ɂCꂽ_glDrawArraysEXT()烊^[Ɏw肵ȂlɃZbg܂BƂAGL_COLOR_ARRAY_EXTLȏꍇAJg̐F̒lglDrawArraysEXT()sꂽ͒`ĂȂԂƂȂ܂B
ύXȂɊւĂ͂ƒ`ꂽ܂c܂B
glDrawArraysEXT()̎sɃG[ꍇ́Ȃ͎̏sꂸAԂ͕ω܂B
glBegin()ƑΉglEnd()̊ԂŔzĐݒ肷邱ƂŃG[͔܂Â悤ȍĒ`̌ʂ͒`Ă܂B
ÓIȔzf[^̓CvɂĂłǂݍ܂LbV܂BAvP[VÓIf[^CꍇglArrayElementEXT()܂glDrawArraysEXT()Ăꂽ̌ʂ͒`Ă܂B
VK̊
glArrayElementEXT(), glDrawArraysEXT(), glVertexPointerEXT(), glNormalPointerEXT(), glColorPointerEXT(), glIndexPointerEXT(), glTexCoordPointerEXT(), glEdgeFlagPointerEXT(), glGetPintervEXT()
}`TvgASGIS_multisampléAׂĂOpenGLv~eBu(_AA|SArbg}bvA摜)A`GCAX郁JjY܂B
̐߂̓}`Tv̗p@ƗpꍇɋN鎖ɂċc_܂Bc_͈̂ȉ̎łB
}`TvOւ̂Ȃ
}`TvÓASẴv~eBuɑĊesNZ̈قȂꏊ(ۂ̓TusNZ̏)ŕTvO邱Ƃɂ菈܂B̌ʃGCAX(alias)Ȃ摜܂B
eTv̓fvXƃXeV߁AfvXƃXeV̓VOTv[hƓɎs܂B1̃sNZ4,8܂16̃TuTvƂł܂B
}`TvOɐFǏogpꍇ́A肳ꂽF (܂Tv̕) 邱ƂɂȂ܂BXeVfvXǏoꍇ́Aωꂽlł͂ȂAP̃Tvl܂B̃Tvl͊{IɃsNZ̒Sɍł߂̂I܂B
}`TvOgpɂ
}`TvA`GCAVO(multisample antialiasing) ̓|S̃_OɍłLłBȂȂA|S̐ڑIuWFNg̗֊sA|SȂǂ𐳊mɏł邩łBsNZXV邽тɁAesNZɑJ[TvlP̕\"\ȐFɊZ܂B
_ѐɂĂ͕WOpenGLŒuX[YA`GCAVO(smooth antialiasing)vɂāA荂iȉ摜܂̂ŁA𗘗pقǂł傤B(OpenGLvO~OKCh̑7: uufBOAA`GCAVOAĖvQƂĂ)
どのように私はれんが造りの家からデッキを構築しません
}`Tvg1̃V[̃_OɃ}`TvX[XA`GCAVOI邱Ƃł̂ŁA}`TvOꂽ|SƁAX[Y̐ѓ_~bNX邱Ƃ"\łBɏڂ́u}`Tvꂽ_vƁu}`TvꂽvQƂĂB
}`Tvg̎gp
AvP[V}`TvO𗘗pɂglXChooseVisual()gă}`Tv"\ȃrWAI܂Battr_listɈȉ̍ڂݒ"\łB
- GLX_SAMPLES_SGIS
- }`Tvobt@ɗvő̃Tvw肵܂BglXChooseVisual()͎w肵Ɍ܂͂ȏ̍łȒl̃rWAւ̃|C^Ԃ܂B}`Tvobt@̃J[Tv̓C̃J[obt@̂̂菭ȂrbgƂȂꍇ܂BA}`TṽJ[̑v̓C̃J[obt@ȂƂ̂̂Ǘ܂B
- GLX_SAMPLE_BUFFERS_SGIS
- ̑̓IvVłB݂Pȏ̃}`Tvobt@rWA݂͑Ȃ̂ŁAԂl0܂1łBGLX_SAMPLES_SGIS0łȂȂA̒l1ftHgłB̑ݒ肷ꍇ}`Tvobt@̎ŏ̐łȂĂ͂Ȃ܂B̍ŏ̐Ɍȏ̍ŏ̐̃}`Tvobt@̃rWAI܂B
}`TvO̓ftHgŗLłB
- }`TvOLǂ₢킹ɂ͈ȉĂяo܂B
glIsEnabled(MULTISAMPLE_SGIS)
glDisable(MULTISAMPLE_SGIS)
}`TvOIvV̍xȗp@
lj̃_O@\xȃ}`TvOIvVƂĒ܂B̏͂ł͈ȉ̂Ƃɂċc_܂B
- ̃Tv݉"\I邽߂̃}`Tv}XN̎gp
- tFU[uhEeNX`[GbŴ߂̃At@l̎gp
- }`TvOƃAL[Vobt@(accumulation buffer)̕p
}8-2͂ǂ̂悤ɂP̃sNZ̃TuTvON/OFF邩Ă܂B
- ܂ŏɁATvp^[Œ`ʒuŃv~eBuTv܂BTv|SȂONɂȂAłȂOFFɂȂ܂BɂJo[W}XN(coverage mask)쐬܂B
- Jo[W}XN̓[U[(glSampleMaskSGIS()gp)`Tv}XNANDƂ܂B(utF[hLOD̂߂̃}`Tv}XN̎gpvQ)
- tOg̃At@l}XNɕϊstep2̃Jo[W}XNANDƂI"\łB
At@}XNɕϊɂ GL_SAMPLE_ALPHA_TO_MASK_SGIS LɂĂBtOg̃At@l͈ꎞIȃ}XN쐬邽߂ɎgpǍɃtOg̃}XNAND܂B
}8-2: }`TvÕTṽvZX
2̃vZX -- glSampleMaskSGIS()ō쐬}`Tv}XN̎gpƁAtOg̃At@l̃}XNƂĂ̎gp -- ́AɈقȂʂ̂߂ɗp"\łB
GL_SAMPLE_ALPHA_TO_MASK_SGISL̏ꍇAGL_SAMPLE_ALPHA_TO_ONE_SGISLɂ邱ƂɂAufBȎOɃAt@l1ɕϊĂƂKȏꍇłB̃IvVgpȂƁAƂĐFɉe܂B
: }`TvOgpꍇAufBO̓ptH[}X𗎂Ƃ܂B̂߁Ał邱ƂłufBO͎gpȂŁÂGL_SAMPLE_MASK_SGIS ܂ GL_ALPHA_TO_MASK gpĂB
J[ufBO(Color Blending)ƃXN[EhAEgXyAV(Screen-Door Transparency)
}`TvÕ͖eNX`̂悤ȕsKȗ֊s̃eNX`ɓxɊg債ꍇ̃GbWڂ₯Ƃ邽߂ɗpł܂BeNX`g傳ꂽꍇ̗֊ssRɂȂāA蔲悤ɂȂ܂BAt@}`Tv}XNɕϊĂ莩RɌ悤ɂ邽߂ɁAv~eBuɑĕ̃_O(ꂼ̃_O͂lŖߍ킹Tvgp)sƂł܂BڂɂẮu}`Tvꂽ摜̃AL[VvQƂĂB
vZXXN[EhAEgXyAVs邽߂Ɏgp邱Ƃł܂B̑̑SẴTv݂̂`悷ȂȂSẴTv̂߂ɃobNOEhяオAʂƂēȉ摜ƂȂ܂B̂Ƃ͌㕔Oʂփ|SXgAĂȂĂ悢̂łƂĂLɗpł܂B܂AufBOKvȂ̂ł荂ɏł܂B
tF[hLOD(Fade Level Of Detail)̂߂̃}`Tv}XN̎gp
P̃sNZ̃}`Tvʒüꕔ܂悤Ɏw肷邽߂Ƀ}XNgp邱Ƃł܂B̋@\̓rWAV~[VEAvP[Vł̃tF[hLOD(fade-level-of-detail)Cvĝɕ֗łBLOD̃x玟̃xւ̃ufBO邽߂Ƀ}`Tv}XNgp邱Ƃł܂B͎_IuWFNgɋ߂ÂɂĒɃp[Ze[WĂTuTvgpďڍׂȃf̒lj̃f[^_OĂƂɂs܂B
̂悤ɂ̃IuWFNg̊ȒPȕ\ƁAڍׂȕ\̊Ԃ̃ufBOsAđO̐߂ŋc_XN[EhAgXyAVsɂ́AglSampleMaskSGIS()ĂяoAIuWFNg̃At@lgpglSampleAlphaToMaskSGIS()Ăяo܂BȉglSampleMaskSGIS()̃vg^Cv܂B
void glSampleMaskSGIS(GLclampf value, boolean invert);
- value͏C}XÑJo[Ww肵܂B[0,1]͈̔͂ŃNvĂA0̓Jo[WȂA1̓tJo[WӖ܂B
- invert͒l̂܂C}XNƂĎgpꍇGL_FALSEA}XNrbgɔ]ĎgpꍇGL_TRUEw肵܂B
glSampleMaskSGIS()gpă}`Tv}XN`ɂ͈ȉ̃Xebv݂܂B
- GL_SAMPLE_MASK_SGISL(Enable)ɂB
- glSampleMaskSGIS()ĂяoBŁAƂvalue0.25ɁAinvertGL_FALSEɃZbgB
- xA蕡GLODŃIuWFNg_OB
- glSampleMadkSGIS()ēxĂяoBŁAƂvalue0.25ɁAinvertGL_TRUEɃZbgB
- PLODŃIuWFNg_OB
̎A]}XNKpĂ̂ŃTv̕WZbggp܂B - 摜\B
- ̉ߒKvȂ傫ȃTv}XNlŌJԂB(_IuWFNgɐڋ߂Ăꍇ)
}`Tvꂽ摜̃AL[V(accumululationAςݏグ)
AL[Vobt@(accumulation buffer) ɌʂljẴpX(pass)ʂĉ摜̕i荂߂邱Ƃł܂BAL[Vobt@͓v~eBuɑ郌_Oω܂B}`pX̃_Oł͍i邽߂ɊepXɂĈقȂTvʒu𗘗pKv܂B
AvP[V摜̐ςݏグƃ}`TvOɗpꍇ́AglSamplePatternSGIS()ȉ̃p^[ɐݒ肵ČĂяoƂɂȂ܂B
- GL_1PASS_SGIS͂P̃_OpXłꂢɃA`GCAVOꂽʂ悤ɐݒ肵܂B(ꂪftHg)
- GL_2PASS_0_SGIS GL_2PASS_1_SGIS ͂ƂɁAsNZ̃Tv_Qxw肷邽߂Ɏgp܂B܂ŏɃp^[GL_2PASS_0_SGISɂĊSɃV[_OǍGL_2PASS_1_SGISgpčĂъSɃ_O܂BQ̉摜AL[Vobt@ɂĕωƁAP̃pX2~GL_SAMPLES_SGIS̃Tv_Ń_O悤ȌʂɂȂ܂B
- GL_4PASS_0_SGISAGL_4PASS_1_SGISAGL_4PASS_2_SGISAGL_4PASS_3_SGIŚA4~GL_SAMPLES_SGIS̃Tv_̃p^[`܂B4̃_OpXC[WςݏグĂꍇɗpł܂B
}`Tv̐ςݏグ̌ʁAVXe̔\͂g邱Ƃł܂BƂAgp}VTuTvS܂łĂȂꍇłAQ摜_OĂ悢ȂA8̃TuTvŃ}`TvÔƓʂ邱Ƃ"\ɂȂ̂łB̏ꍇAL[Vobt@KvłÃobt@܂Xy[XKvƂ邱ƂɒӂĂB
Tvp^[₢킹ɂglGetIntegerv()̈pname GL_SAMPLE_PATTERN_SGISw肵ČĂяo܂Bp^[̕ύX͊Sȃ_OpX̊ԂōsȂȂ܂B
Ȃ͑10͂́uAL[Vobt@vOpenGLvO~OKCh́ut[obt@vQƂĂB
قȂv~eBuɑă}`Tvǂ̂悤ɉe邩
̐߂ł̓}`Tvꂽ_EE|SEsNZErbg}bvɂĂƋc_Ă܂B
}`Tvꂽ_
}`TvOgpĂꍇAX[WÕqg(GL_POINT_SMOOTH_HINTAGL_LINE_SMOOTH_HINT)͖܂B}`Tvꂽ_̕i̓A`GCAVOꂽ_̕iɗ̂ŁA}`Tvꂽ|SƃA`GCAXꂽ_̎̕KvɉāA}`TvOON/OFF邱Ƃł̂oĂĂB
: RealityEngineVXeł͓_X[YqgGL_NICESTɐݒ肷邱Ƃł荂iȃ}`Tvꂽ_ł܂B(̃[h͂xȂ̂ŒӂKvłB)
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST)
ʂ͊ۂ_ɂȂ܂B̃qgɐݒ肹ɓ_gpꍇ͏ĂȂȂ""肵܂B̐߂́uxv̕ŁA}`TvOX[Yȓ_ƂƂɗpꍇ̒ӎɂČyĂ܂̂ŎQƂĂB
}`Tvꂽ
́A Ȗʐ 0 ̋敪𒆐Sɂ`Ƃă}`Tvobt@ɃTv܂B`̓̕Jg̐łBċ`̒͂̋敪̒łB`ڑ̋`͐ڐ敪Őmɐڑ̂ŁAL钸_ɂăTuTvQ`悳Ă܂悤ȂƂ͂܂B
_̏ꍇƓ悤ɁARealityEngineVXeł̓}`T vȌꍇX[Yŕ`悵ǂʂ܂B
GL_LINE_SMOOTH_HINTAGL_POINT_SMOOTH_HINTLɂăX[YȐƓ_`悵ꍇ́A}`TvOɂĂƓ_`悵ȂȂ܂BŒӂȂĂ͂ȂȂ̂́ASẴ}`TvO`悪IĂ炱sȂȂȂƂƂłBēx}`TvOLɂĂɃ|S`悵ƂĂÃ|S͂Ȃ炸mɃA`GCAXƂ͌܂B
}`Tvꂽ|S
|S͕W̃VOTvobt@ɃTv̂ƓlɃ}`Tvobt@ɃTv܂B1̃J[l(̃sNZɂTuTvɂ炸)sNZŜɑĊZ܂BāAeTvIɌɃ|S̋Eɑ݂ꍇ̂݁ÃTvɂ͊ZꂽJ[l܂܂B
fvXobt@(depth-buffer)LłAe}`Tvʒu̐mȃfvXlvZꂻ̃Tv܂ׂۂ肷邽߂ɗp܂BXeVLȂAeTvɑăXeVeXgs܂B
|Srbgp^[1̃sNẐׂẴTvʒuɑēlɓKp܂Bp^[rbg1ȂASẴTvʒuC̑ΏۂƂčl܂Bp^[rbg0ȂΑSđΏۊOɂȂ܂B
sNZƃrbg}bṽ}`TvEX^C[[V(rasterization)
IRIS GLł́AsNZ̓}`Tv܂łBOpenGLł͂}`TvOONȂsNZ͏`ƂčlA}`TvȎΏۂƂȂ܂B
sNZ}`Tvobt@ɃTv鎞AesNZ͊gx~gy̎lp`ƂĈ܂BĂ̎lp`̓|Ŝ悤ɃTv܂B
RealityEngine ɂ鍂NA(fast clear)ɂĂ̏̓t@Xy[WglTagSampleBufferSGIX()QƂĂB
VK̊
glSampleMaskSGIS()AglSamplePatternSGIS()
0 件のコメント:
コメントを投稿