|
ÔÌûµØÖ·£ºhttp://www.programfan.com/club/showbbs.asp?id=184525
±¾´Î¿Î³ÌËùÒª½²µÄÊÇ»æÖƼòµ¥µÄ¼¸ºÎͼÐΣ¬ÔÚʵ¼Ê»æÖÆ֮ǰ£¬ÈÃÎÒÃÇÏÈÊìϤһЩ¸ÅÄî¡£
Ò»¡¢µã¡¢Ö±ÏߺͶà±ßÐÎ
ÎÒÃÇÖªµÀÊýѧ£¨¾ßÌåµÄ˵£¬ÊǼ¸ºÎѧ£©ÖÐÓе㡢ֱÏߺͶà±ßÐεĸÅÄµ«ÕâЩ¸ÅÄîÔÚ¼ÆËã»úÖлáÓÐËù²»Í¬¡£
ÊýѧÉϵĵ㣬ֻÓÐλÖã¬Ã»ÓдóС¡£µ«ÔÚ¼ÆËã»úÖУ¬ÎÞÂÛ¼ÆË㾫¶ÈÈçºÎÌá¸ß£¬Ê¼ÖÕ²»Äܱíʾһ¸öÎÞÇîСµÄµã¡£ÁíÒ»·½Ã棬ÎÞÂÛͼÐÎÊä³öÉ豸£¨ÀýÈ磬ÏÔʾÆ÷£©ÈçºÎ¾«È·£¬Ê¼ÖÕ²»ÄÜÊä³öÒ»¸öÎÞÇîСµÄµã¡£Ò»°ãÇé¿öÏ£¬OpenGLÖеĵ㽫±»»³Éµ¥¸öµÄÏñËØ£¨ÏñËصĸÅÄÇë×Ô¼ºËÑË÷Ö®~£©£¬ËäÈ»Ëü¿ÉÄÜ×㹻С£¬µ«²¢²»»áÊÇÎÞÇîС¡£Í¬Ò»ÏñËØÉÏ£¬OpenGL¿ÉÒÔ»æÖÆÐí¶à×ø±êÖ»ÓÐÉÔ΢²»Í¬µÄµã£¬µ«¸ÃÏñËصľßÌåÑÕÉ«½«È¡¾öÓÚOpenGLµÄʵÏÖ¡£µ±È»£¬¹ý¶ÈµÄ×¢Òâϸ½Ú¾ÍÊÇ×êÅ£½Ç¼â£¬ÎÒÃÇ´ó¿É²»±Ø»¨·Ñ¹ý¶àµÄ¾«Á¦È¥Ñо¿¡°¶à¸öµãÈçºÎ»µ½Í¬Ò»ÏñËØÉÏ¡±¡£
ͬÑùµÄ£¬ÊýѧÉϵÄÖ±ÏßûÓпí¶È£¬µ«OpenGLµÄÖ±ÏßÔòÊÇÓпí¶ÈµÄ¡£Í¬Ê±£¬OpenGLµÄÖ±Ïß±ØÐëÊÇÓÐÏÞ³¤¶È£¬¶ø²»ÊÇÏñÊýѧ¸ÅÄîÄÇÑùÊÇÎÞÏ޵ġ£¿ÉÒÔÈÏΪ£¬OpenGLµÄ¡°Ö±Ïß¡±¸ÅÄîÓëÊýѧÉϵġ°Ï߶Ρ±½Ó½ü£¬Ëü¿ÉÒÔÓÉÁ½¸ö¶ËµãÀ´È·¶¨¡£
¶à±ßÐÎÊÇÓɶàÌõÏ߶ÎÊ×βÏàÁ¬¶øÐγɵıպÏÇøÓò¡£OpenGL¹æ¶¨£¬Ò»¸ö¶à±ßÐαØÐëÊÇÒ»¸ö¡°Í¹¶à±ßÐΡ±£¨Æ䶨ÒåΪ£º¶à±ßÐÎÄÚÈÎÒâÁ½µãËùÈ·¶¨µÄÏ߶ζ¼ÔÚ¶à±ßÐÎÄÚ£¬ÓÉ´ËÒ²¿ÉÒÔÍƵ¼³ö£¬Í¹¶à±ßÐβ»ÄÜÊÇ¿ÕÐĵģ©¡£¶à±ßÐοÉÒÔÓÉÆä±ßµÄ¶Ëµã£¨ÕâÀï¿É³ÆΪ¶¥µã£©À´È·¶¨¡££¨×¢Ò⣺Èç¹ûʹÓõĶà±ßÐβ»ÊÇ͹¶à±ßÐΣ¬Ôò×îºóÊä³öµÄЧ¹ûÊÇ䶨ÒåµÄ¡ª¡ªOpenGLΪÁËЧÂÊ£¬·Å¿íÁ˼ì²é£¬Õâ¿ÉÄܵ¼ÖÂÏÔʾ´íÎó¡£Òª±ÜÃâÕâ¸ö´íÎ󣬾¡Á¿Ê¹ÓÃÈý½ÇÐΣ¬ÒòΪÈý½ÇÐζ¼ÊÇ͹¶à±ßÐΣ©
¿ÉÒÔÏëÏó£¬Í¨¹ýµã¡¢Ö±ÏߺͶà±ßÐΣ¬¾Í¿ÉÒÔ×éºÏ³É¸÷ÖÖ¼¸ºÎͼÐΡ£ÉõÖÁÓÚ£¬Äã¿ÉÒÔ°ÑÒ»¶Î»¡¿´³ÉÊǺܶà¶ÌµÄÖ±Ï߶ÎÏàÁ¬£¬ÕâЩֱÏ߶Î×ã¹»¶Ì£¬ÒÔÖÁÓÚÆ䳤¶ÈСÓÚÒ»¸öÏñËصĿí¶È¡£ÕâÑùÒ»À´»¡ºÍÔ²Ò²¿ÉÒÔ±íʾ³öÀ´ÁË¡£Í¨¹ýλÓÚ²»Í¬Æ½ÃæµÄÏàÁ¬µÄС¶à±ßÐΣ¬ÎÒÃÇ»¹¿ÉÒÔ×é³ÉÒ»¸ö¡°ÇúÃ桱¡£
==========================================
¶þ¡¢ÔÚOpenGLÖÐÖ¸¶¨¶¥µã
ÓÉÒÔÉϵÄÌÖÂÛ¿ÉÒÔÖªµÀ£¬¡°µã¡±ÊÇÒ»ÇеĻù´¡¡£
ÈçºÎÖ¸¶¨Ò»¸öµãÄØ£¿OpenGLÌṩÁËһϵÁк¯Êý¡£ËüÃǶ¼ÒÔglVertex¿ªÍ·£¬ºóÃæ¸úÒ»¸öÊý×ÖºÍ1~2¸ö×Öĸ¡£ÀýÈ磺
glVertex2d
glVertex2f
glVertex3f
glVertex3fv
µÈµÈ¡£
Êý×Ö±íʾ²ÎÊýµÄ¸öÊý£¬2±íʾÓÐÁ½¸ö²ÎÊý£¬3±íʾÈý¸ö£¬4±íʾËĸö£¨ÎÒÖªµÀÓеãÂÞàÂ~£©¡£
×Öĸ±íʾ²ÎÊýµÄÀàÐÍ£¬s±íʾ16λÕûÊý£¨OpenGLÖн«Õâ¸öÀàÐͶ¨ÒåΪGLshort£©£¬
i±íʾ32λÕûÊý£¨OpenGLÖн«Õâ¸öÀàÐͶ¨ÒåΪGLintºÍGLsizei£©£¬
f±íʾ32λ¸¡µãÊý£¨OpenGLÖн«Õâ¸öÀàÐͶ¨ÒåΪGLfloatºÍGLclampf£©£¬
d±íʾ64λ¸¡µãÊý£¨OpenGLÖн«Õâ¸öÀàÐͶ¨ÒåΪGLdoubleºÍGLclampd£©¡£
v±íʾ´«µÝµÄ¼¸¸ö²ÎÊý½«Ê¹ÓÃÖ¸ÕëµÄ·½Ê½£¬¼ûÏÂÃæµÄÀý×Ó¡£
ÕâЩº¯Êý³ýÁ˲ÎÊýµÄÀàÐͺ͸öÊý²»Í¬ÒÔÍ⣬¹¦ÄÜÊÇÏàͬµÄ¡£ÀýÈ磬ÒÔÏÂÎå¸ö´úÂë¶ÎµÄ¹¦ÄÜÊǵÈЧµÄ£º
£¨Ò»£©glVertex2i(1, 3);
£¨¶þ£©glVertex2f(1.0f, 3.0f);
£¨Èý£©glVertex3f(1.0f, 3.0f, 0.0f);
£¨ËÄ£©glVertex4f(1.0f, 3.0f, 0.0f, 1.0f);
£¨Î壩GLfloat VertexArr3[] = {1.0f, 3.0f, 0.0f};
glVertex3fv(VertexArr3);
ÒÔºóÎÒÃǽ«ÓÃglVertex*À´±íʾÕâһϵÁк¯Êý¡£
×¢Ò⣺OpenGLµÄºÜ¶àº¯Êý¶¼ÊDzÉÓÃÕâÑùµÄÐÎʽ£¬Ò»¸öÏàͬµÄǰ׺ÔÙ¼ÓÉϲÎÊý˵Ã÷±ê¼Ç£¬ÕâÒ»µã»áËæ×ÅѧϰµÄÉîÈë¶øÓиü¶àµÄÌå»á¡£
==========================================
Èý¡¢¿ªÊ¼»æÖÆ
¼ÙÉèÏÖÔÚÎÒÒѾָ¶¨ÁËÈô¸É¶¥µã£¬ÄÇôOpenGLÊÇÈçºÎÖªµÀÎÒÏëÄÃÕâЩ¶¥µãÀ´¸ÉʲôÄØ£¿ÊÇÒ»¸öÒ»¸öµÄ»³öÀ´£¬»¹ÊÇÁ¬³ÉÏߣ¿»òÕß¹¹³ÉÒ»¸ö¶à±ßÐΣ¿»òÕß×öÆäËüʲôÊÂÇ飿
ΪÁ˽â¾öÕâÒ»ÎÊÌ⣬OpenGLÒªÇó£ºÖ¸¶¨¶¥µãµÄÃüÁî±ØÐë°üº¬ÔÚglBeginº¯ÊýÖ®ºó£¬glEndº¯Êý֮ǰ£¨·ñÔòÖ¸¶¨µÄ¶¥µã½«±»ºöÂÔ£©¡£²¢ÓÉglBeginÀ´Ö¸Ã÷ÈçºÎʹÓÃÕâЩµã¡£
ÀýÈçÎÒд£º
glBegin(GL_POINTS);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f, 0.0f);
glEnd();
ÔòÕâÁ½¸öµã½«·Ö±ð±»»³öÀ´¡£Èç¹û½«GL_POINTSÌæ»»³ÉGL_LINES£¬ÔòÁ½¸öµã½«±»ÈÏΪÊÇÖ±ÏßµÄÁ½¸ö¶Ëµã£¬OpenGL½«»á»³öÒ»ÌõÖ±Ïß¡£
ÎÒÃÇ»¹¿ÉÒÔÖ¸¶¨¸ü¶àµÄ¶¥µã£¬È»ºó»³ö¸ü¸´ÔÓµÄͼÐΡ£
ÁíÒ»·½Ã棬glBeginÖ§³ÖµÄ·½Ê½³ýÁËGL_POINTSºÍGL_LINES£¬»¹ÓÐGL_LINE_STRIP£¬GL_LINE_LOOP£¬GL_TRIANGLES£¬GL_TRIANGLE_STRIP£¬GL_TRIANGLE_FANµÈ£¬Ã¿ÖÖ·½Ê½µÄ´óÖÂЧ¹û¼ûÏÂͼ£º
ÉùÃ÷£º¸ÃͼƬÀ´×Ôwww.opengl.org£¬¸ÃͼƬÊÇ¡¶OpenGL ... »Óд¥¼°µ½°æȨÎÊÌâ¡£
ÎÒ²¢²»×¼±¸ÔÚglBeginµÄ¸÷ÖÖ·½Ê½ÉÏ´ó×÷ÎÄÕ¡£´ó¼Ò¿ÉÒÔ×Ô¼º³¢ÊԸıäglBeginµÄ·½Ê½ºÍ¶¥µãµÄλÖã¬Éú³ÉһЩÓÐȤµÄͼ°¸¡£
³ÌÐò´úÂ룺
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin( /* ÔÚÕâÀïÌîÉÏÄãËùÏ£ÍûµÄģʽ */ );
/* ÔÚÕâÀïʹÓÃglVertex*ϵÁк¯Êý */
/* Ö¸¶¨ÄãËùÏ£ÍûµÄ¶¥µãλÖà */
glEnd();
glFlush();
}
°ÑÕâ¶Î´úÂë¸Ä³ÉÄãϲ»¶µÄÑù×Ó£¬È»ºóÓÃËüÌæ»»µÚÒ»¿ÎÖеÄmyDisplayº¯Êý£¬±àÒëºó¼´¿ÉÔËÐС£
==========================================
¼¸¸öÀý×Ó
ÀýÒ»¡¢»Ò»¸öÔ²
/*
ÕýËıßÐΣ¬ÕýÎå±ßÐΣ¬ÕýÁù±ßÐΣ¬¡¡£¬Ö±µ½Õýn±ßÐΣ¬µ±nÔ½´óʱ£¬Õâ¸öͼÐξÍÔ½½Ó½üÔ²
µ±n´óµ½Ò»¶¨³Ì¶Èºó£¬ÈËÑÛ½«ÎÞ·¨°ÑËü¸úÕæÕýµÄÔ²ÏàÇø±ð
ÕâʱÎÒÃÇÒѾ³É¹¦µÄ»³öÁËÒ»¸ö¡°Ô²¡±
£¨×¢£º»Ô²µÄ·½·¨ºÜ¶à£¬ÕâÀïʹÓõÄÊDZȽϼòµ¥£¬µ«Ð§Âʽϵ͵ÄÒ»ÖÖ£©
ÊÔÐÞ¸ÄÏÂÃæµÄconst int nµÄÖµ£¬¹Û²ìµ±n=3,4,5,8,10,15,20,30,50µÈ²»Í¬ÊýֵʱÊä³öµÄ±ä»¯Çé¿ö
½«GL_POLYGON¸ÄΪGL_LINE_LOOP¡¢GL_POINTSµÈÆäËü·½Ê½£¬¹Û²ìÊä³öµÄ±ä»¯Çé¿ö
*/
#include <math.h>
const int n = 20;
const GLfloat R = 0.5f;
const GLfloat Pi = 3.1415926536f;
void myDisplay(void)
{
int i;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
for(i=0; i<n; ++i)
glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));
glEnd();
glFlush();
}
==========================================
Àý¶þ¡¢»Ò»¸öÎå½ÇÐÇ
/*
ÉèÎå½ÇÐǵÄÎå¸ö¶¥µã·Ö²¼Î»ÖùØϵÈçÏ£º
A
E B
D C
Ê×ÏÈ£¬¸ù¾ÝÓàÏÒ¶¨ÀíÁз½³Ì£¬¼ÆËãÎå½ÇÐǵÄÖÐÐĵ½¶¥µãµÄ¾àÀëa
£¨¼ÙÉèÎå½ÇÐǶÔÓ¦ÕýÎå±ßÐεı߳¤Îª.0£©
a = 1 / (2-2*cos(72*Pi/180));
È»ºó£¬¸ù¾ÝÕýÏÒºÍÓàÏҵĶ¨Ò壬¼ÆËãBµÄx×ø±êbxºÍy×ø±êby£¬ÒÔ¼°CµÄy×ø±ê
£¨¼ÙÉèÎå½ÇÐǵÄÖÐÐÄÔÚ×ø±êԵ㣩
bx = a * cos(18 * Pi/180);
by = a * sin(18 * Pi/180);
cy = -a * cos(18 * Pi/180);
Îå¸öµãµÄ×ø±ê¾Í¿ÉÒÔͨ¹ýÒÔÉÏËĸöÁ¿ºÍһЩ³£Êý¼òµ¥µÄ±íʾ³öÀ´
*/
#include <math.h>
const GLfloat Pi = 3.1415926536f;
void myDisplay(void)
{
GLfloat a = 1 / (2-2*cos(72*Pi/180));
GLfloat bx = a * cos(18 * Pi/180);
GLfloat by = a * sin(18 * Pi/180);
GLfloat cy = -a * cos(18 * Pi/180);
GLfloat
PointA[2] = { 0, a },
PointB[2] = { bx, by },
PointC[2] = { 0.5, cy },
PointD[2] = { -0.5, cy },
PointE[2] = { -bx, by };
glClear(GL_COLOR_BUFFER_BIT);
// °´ÕÕA->C->E->B->D->AµÄ˳Ðò£¬¿ÉÒÔÒ»±Ê½«Îå½ÇÐÇ»³ö
glBegin(GL_LINE_LOOP);
glVertex2fv(PointA);
glVertex2fv(PointC);
glVertex2fv(PointE);
glVertex2fv(PointB);
glVertex2fv(PointD);
glEnd();
glFlush();
}
==========================================
ÀýÈý¡¢»³öÕýÏÒº¯ÊýµÄͼÐÎ
/*
ÓÉÓÚOpenGLĬÈÏ×ø±êÖµÖ»ÄÜ´Ó-1µ½1£¬£¨¿ÉÒÔÐ޸ģ¬µ«·½·¨Áôµ½ÒÔºó½²£©
ËùÒÔÎÒÃÇÉèÖÃÒ»¸öÒò×Ófactor£¬°ÑËùÓеÄ×ø±êÖµµÈ±ÈÀýËõС£¬
ÕâÑù¾Í¿ÉÒÔ»³ö¸ü¶à¸öÕýÏÒÖÜÆÚ
ÊÔÐÞ¸ÄfactorµÄÖµ£¬¹Û²ì±ä»¯Çé¿ö
*/
#include <math.h>
const GLfloat factor = 0.1f;
void myDisplay(void)
{
GLfloat x;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glVertex2f(-1.0f, 0.0f);
glVertex2f(1.0f, 0.0f); // ÒÔÉÏÁ½¸öµã¿ÉÒÔ»xÖá
glVertex2f(0.0f, -1.0f);
glVertex2f(0.0f, 1.0f); // ÒÔÉÏÁ½¸öµã¿ÉÒÔ»yÖá
glEnd();
glBegin(GL_LINE_STRIP);
for(x=-1.0f/factor; x<1.0f/factor; x+=0.01f)
{
glVertex2f(x*factor, sin(x)*factor);
}
glEnd();
glFlush();
}
==========================================
С½á
±¾¿Î½²ÊöÁ˵㡢ֱÏߺͶà±ßÐεĸÅÄÒÔ¼°ÈçºÎʹÓÃOpenGLÀ´ÃèÊöµã£¬²¢Ê¹ÓõãÀ´ÃèÊö¼¸ºÎͼÐΡ£
´ó¼Ò¿ÉÒÔ·¢»Ó×Ô¼ºµÄÏëÏ󣬻³ö¸÷ÖÖ¼¸ºÎͼÐΣ¬µ±È»£¬Ò²¿ÉÒÔÓÃGL_LINE_STRIP°ÑºÜ¶àλÖÃÏà½üµÄµãÁ¬½ÓÆðÀ´£¬¹¹³Éº¯ÊýͼÏó¡£Èç¹ûÓÐÐËȤ£¬Ò²¿ÉÒÔÈ¥ÕÒһЩͼÏó±È½ÏÃÀ¹ÛµÄº¯Êý£¬×Ô¼º¶¯ÊÖ£¬ÓÃOpenGL°ÑËü»³öÀ´¡£
ÈëÃÅѧϰµÚ¶þ¿Î£¬µ½´Ë½áÊø¡£
TO BE CONTINUED |
|