×÷Òµ1
ÐÕÃû °à¼¶ ѧºÅ ÈÕÆÚ
Ò»£º×÷ҵĿµÄ¼°ÒªÇó£º
²ÉÓÃOpenGL³ÌÐò£¬Êä³ö ѧºÅ¡¢ÐÕÃû¡¢ÕÕÆ¬µÈÐÅÏ¢¡£Ö±Ïß¡¢ÏßÐÍ¡¢×ÖÌå³ÌÐò¡£ ¶þ£ºÀíÂÛ»ù´¡£º
1.ʹÓÃGLUT½øÐд°¿Ú¹ÜÀí£º £¨1£©Óë´óСÓйصÄ
glutInitWindowSize(800,600); //ÓÃÀ´¶¨ÒåÏÔʾ´°¿ÚµÄ³õʼ»¯¿í¶ÈºÍ¸ß¶ÈµÄÏñËØÊý glutInitWindowPosition(200,200); //ÏÔʾ´°¿Ú×óÉϽÇÓ¦¸ÃÔÚÆÁÄ»×ó±ß½çÏòÓÒ50¸öÏñËØ¡¢ÆÁÄ»Éϱ߽ç100ÏñËØµÄλÖÃÉÏ¡£
gluOrth02D(0.0,200.0,0.0,150.0); //Õâ±íʾʹÓÃÕýͶӰ½«ÊÀ½ç×ø±êϵ¶þά¾ØÐÎÇøÓòµÄÄÚÈÝÓ³Éäµ½ÆÁÄ»ÉÏ¡£
ÒÔÉÏÈý¸ö¸ÅÄîÐèҪŪÇ壬ÆäÖÐgluOrtho2DÊÇÖ¸ÆÁÄ»ÇøÓò¶ÔÓ¦µÄÄ£ÐÍ×ø±ê·¶Î§£¬±ÈÈçºáÏò·¶Î§ÊÇ0µ½200Ã×£¬×ÝÏòÊÇ0µ½150Ã×£¬¶øºóÃæµÄglutInitWindowSizeÊÇÖ¸glutµÄ´°¿Úµ¯³öÀ´ºóÏà¶ÔÓÚÄãµçÄÔÆÁÄ»µÄλÖúʹóС£¬µ¥Î»ÊÇÏñËØ¡£ £¨2£©´°¿ÚÑÕÉ«ÉèÖÃ
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //Ö¸³öÏÔʾ´°¿ÚʹÓõ¥¸ö»º´æÇÒʹÓÃRGB£¨ºìÂÌÀ¶£©ÑÕɫģÐÍÀ´ÉèÖÃÑÕɫֵ
glClearColor(1.0,1.0,1.0,0.0) //ÉèÖô°¿Ú±³¾°ÑÕɫΪ°×É«£¬Ç°Èý¸ö±äÁ¿ÎªºìÂÌÀ¶·ÖÁ¿£¬×îºóÒ»¸öΪµ÷ºÍ²ÎÊý£¬Ï൱ÓÚ͸Ã÷¶È¡£
glClear(GL_COLOR_BUFFER_BIT); //Èø³Óè´°¿ÚµÄÑÕÉ«ÔÚÆÁÄ»ÉÏÏÔʾ¡£
Glcolor3f(1.0,0.0,0.0); //ÏÔʾ³¡¾°Öи÷ÖÖ¶ÔÏóµÄÑÕÉ«£¬×ó±ßµÄ¼òµ¥µÄÉèÖÃΪºìÉ« £¨3£©ÆäËû
glutInit(&argc, argv); //GLUT³õʼ»¯º¯Êý
glutCreateWindow(\ //ÏÔʾ´°¿Ú´´½¨¶¨Ò»¸ö±êÌâ
glutDisplayFunc(Display); //½«´´½¨µÄͼÐε͍Òå´«µÝ¸øGLUTº¯Êý glutMainLoop(); //´´½¨µÄ´°¿Ú¼°ÆäÖеÄͼÐÎÄÚÈݼ¤»î 2.Êä³öͼԪ
£¨1£©OpenGL»µãº¯Êý
OpenGLÖж¨ÒåµÄµã·ÅÔÚº¯ÊýglBegin()ºÍglEnd()Ö®¼ä£¬Óк¯ÊýglBegin()µÄ²ÎÊýÖ¸¶¨»æÖÆÍ¼ÔªµÄÀàÐÍ¡£
ÔÚOpenGLÖлæÖÆÒ»¸öµãʱ£¬µã´óСµÄĬÈÏÖµÊÇÒ»¸öÏñËØ¡£¿ÉÒÔÓú¯ÊýglPointSize(GLfloat size)ÐÞ¸ÄÕâ¸öÖµ¡£Õâ¸öº¯Êý²ÉÓÃÒ»¸ö²ÎÊýÀ´Ö¸¶¨»µãʱÒÔÏñËØÎªµ¥Î»µÄ½üËÆÖ±¾¶¡£µ«ÊDz»ÊÇÈÎÒâ´óСµã¶¼Ö§³Ö£¬Í¨³£Ê¹ÓÃÏÂÃæµÄ´úÂëÀ´»ñÈ¡µã´óСµÄ·¶Î§ºÍËûÃǵÄÖ®¼ä×îСµÄÖмäÖµ£º GLfloat sizes[2];//±£´æ»æÖƵãµÄ³ß´ç·¶Î§
GLfloat step;//±£´æ»æÖƵã³ß´çµÄ²½³¤ glGetFloatv(GL_POINT_SIZE_RANGE,sizes);
glGetFloatv(GL_POINT_SIZE_RANULARITY,&step);
ÔÚOpenGL³ÌÐòÖУ¬ÎÒÃdz£¿ÉÒÔÀûÓÃÀëÉ¢µÄµãÀ´ÄâºÏһЩ³£¼ûµÄÇúÏߣ¬ÈçÔ²£¬ÂÝÐýÏߵȡ£ (2)OpenGLµÄ»Ïߺ¯Êý
ʹÓÃģʽGL_LINES¿ÉÒÔÔÚÁ½µãÖ®¼ä»Ïߣ»
ÓÐʱÎÒÃÇÐèÒªÔÚһϵÁеĶ¥µãÖ®¼ä»æÖÆÁ¬ÐøÖ±Ïߣ¬´ËʱÐèÒªÓõ½GL_LINE_STRIP»òGL_LINE_LOOPģʽ¡£GL_LINE_STRIPģʽ¿ÉÒÔ¸ù¾ÝÖ¸¶¨µÄһϵÁж¥µã£¬´ÓÒ»¸ö¶¥µãµ½ÁíÒ»¸ö¶¥µãÓÃÁ¬ÐøµÄÏ߶λÏß¡£ÌرðµÄ£¬µ±ÑØ×ÅijÌõÇúÏßÖ¸¶¨Ò»ÏµÁп¿µÄºÜ½üµÄµã£¬Ê¹ÓÃGL_LINE_STRIPģʽ¿ÉÒÔ»æÖÆÒ»ÌõÇúÏß¡£
GL_LINE_LOOPģʽÓëGL_LINE_STRIPģʽÀàËÆ£¬Ö»ÊÇ»áÔÚÖ¸¶¨µÄ×îºóÒ»¸ö¶¥µãÓëµÚÒ»¸ö¶¥µãÖ®¼ä»×îºóÒ»ÌõÏß¡£
Ö±ÏßµÄÊôÐÔ°üÀ¨Ïß¿íºÍÏßÐÍ¡£ÔÚOpenGLÖпÉÓà void glLineWidth(GLfloat width)Ö¸¶¨Ïß¿í¡£ ¿ÉÒÔÓÃÏÂÃæµÄ´úÂëÀ´»ñÈ¡Ïß¿í·¶Î§ºÍËûÃǵÄÖ®¼äµÄ×îС¼ä¸ô£º GLfloat sizes[2]; //±£´æÏß¿íµÄ³ß´ç·¶Î§ GLfloat step; //±£´æÏß¿í³ß´çµÄ×îС¼ä¸ô glGetFloarv(GL_LINE_WIDTH_RANGE,sizes);
glGetFloarv(GL_LINE_WIDTH_GRANULARITY,&step);
Êý×ésizesÖб£´æÁËglLineWidthµÄ×îСÓÐЧֵºÍ×î´óÓÐЧֵ£¬¶ø±äÁ¿step½«±£´æÏß¿íÖ®¼äÔÊÐíµÄ×îСÔöÁ¿¡£
MicrosoftµÄOpenGLʵÏÖÔÊÐíÏß¿í´Ó0.5µ½10.0£¬×îСÔöÁ¿Îª0.125. £¨3£©OpenGLµÄ×Ö·ûÉú³Éº¯Êý ×Ö·ûÖ¸Êý×Ö¡¢×Öĸ¡¢ºº×ֵȷûºÅ¡£
¼ÆËã»úÖÐ×Ö·ûÓÉÒ»¸öÊý×Ö±àÂëΨһ±êʶ¡£
¡°ÃÀ¹úÐÅÏ¢½»»»Óñê×¼´úÂ뼯¡±¼ò³ÆASCIIÂë¡£ËüÊÇÓÃ7λ¶þ½øÖÆÊý½øÐбàÂë±íʾ128¸ö×Ö·û ºº×Ö±àÂëµÄ¹ú¼Ò±ê×¼×Ö·û¼¯¡£Ã¿¸ö·ûºÅÓÉÒ»¸öÇøÂëºÍÒ»¸öλÂ루2×Ö½Ú£©¹²Í¬±êʶ¡£ Çø·ÖASCIIÂëÓ뺺×Ö±àÂ룬²ÉÓÃ×Ö½ÚµÄ×î¸ßλÀ´±êʶ
GlutBitmapCharacter(front,charater) //cÊÇ×Ö·ûµÄASCIIÂ룬¸Ãº¯ÊýÏÔʾλͼ×Ö·û glutStrokeCharacter(front,charater) //º¯ÊýÏÔʾÂÖÀª×Ö·û¡£
Èý£ºËã·¨¼°Éè¼Æ·ÖÎö
Ëã·¨1£ºÊä³öѧºÅ¼°Ãû×Ö £¨1£© Éè¼Æ·ÖÎö
Êä³öºº×ÖºÍÓ¢ÎÄ×Ö·û£¬ÏÔʾÖÐÎĺÍÏÔʾӢÎIJ¢ÎÞ²»Í¬£¬Í¬ÑùÊǰÑÒªÏÔʾµÄ×Ö·û×ö³ÉÏÔʾÁÐ±í£¬È»ºó½øÐе÷Óᣵ«ÊÇÓÐÒ»¸öÎÊÌ⣬ӢÎÄ×ÖĸºÜÉÙ£¬×î¶àÖ»Óм¸°Ù¸ö£¬ÎªÃ¿¸ö×Öĸ´´½¨Ò»¸öÏÔʾÁÐ±í£¬Ã»ÓÐÎÊÌâ¡£µ«ÊǺº×ÖÓзdz£¶à¸ö£¬Èç¹ûÿ¸öºº×Ö¶¼²úÉúÒ»¸öÏÔʾÁÐ±í£¬ÕâÊDz»ÇÐʵ¼ÊµÄ¡£ÕâÀﻹ¾³£Éæ¼°µ½ÖÐÎÄÂÒÂëµÄÎÊÌ⣬Ҳ¾ÍÊÇ˵ÖÐÎÄÕ¼Á½¸ö×Ö·û£¬Ó¢ÎÄÕ¼Ò»¸ö×Ö·û£¬µ±È»°ÑÁ½¸ö×Ö·ûµÄ¶«Î÷·Åµ½Ò»¸ö×Ö·ûµÄ¿Õ¼äÀïÃæ»á²úÉú½Ø¶Ï£¬×ÔÈ»²»ÄÜÕý³£ÏÔʾ¡£Ôڽ̲ĵ±ÖÐûÓÐÖÐÎÄ×Ö·ûµÄÊä³ö£¬Ö»Óлù±¾µÄÓ¢ÎÄ×Ö·ûÊä³ö£¬Òò´ËÔÚÍøÉϰ汾£¬ÕÒµ½Ê¹ÓÃÁËMultiByteToWideCharÕâ¸öº¯ÊýµÄ£¬»ù±¾É϶¼Ã»ÓгöÏÖÂÒÂ룬ËùÒÔÓÃÕâ¸öº¯Êý¡£wglUseFontBitmapsWº¯ÊýÊÇwglUseFontBitmapsº¯ÊýµÄ¿í×Ö·û°æ±¾£¬ËüÈÏΪ×Ö·û¶¼Õ¼Á½¸ö×Ö½Ú¡£
£¨2£© º¯Êý·ÖÎö Ö÷Òªº¯Êý ×÷Óà drawCNString(const char* str) IsDBCSLeadByte(str[i]) MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, wstring, len); Êä³ö×Ö·û³ÌÐò ÅжÏ×Ö·ûÊÇ·ñΪÁ½×Ö½Ú ½«»ìºÏ×Ö·ûת»¯Îª¿í×Ö·û£¬wglUseFontBitmapsWÈÏΪÁ½¸ö×Ö½ÚΪһ¸ö×Ö·û selectFont(int size, int charset, const char ÉèÖÃ×Ö·ûµÄ×ÖÌå * face) Display(void) glRasterPos2f(-0.8f, 0.6f); ´´½¨Í¼Ðε͍Òå ÉèÖÃ×Ö·ûµÄÊä³öλÖà £¨3£© ÔËÐнá¹û
Ëã·¨2£ºÖ±ÏßÏßÐͺ¯Êý £¨1£©Éè¼Æ·ÖÎö
OpenglÖÐʹÓÃͼԪ³£Á¿¿ÉÒԵõ½¶àÖÖ»Ïߵķ½·¨£¬ÔÚ»ÏßµÄͬʱ¿ÉÒÔ¶ÔÏß½øÐв»Í¬µÄÊôÐÔÉèÖã¬Ïß¿íÊôÐÔ£¬ÏßÐÍÊôÐÔ£¬Í¨¹ý¶ÔµãµÄÉèÖ㬶ÔÏßÐÔµÄÉèÖÿÉÒԵõ½²»Í¬µÄÏ߶Ρ£
£¨2£©Ëã·¨ÖÐÖ÷Òªº¯Êý·ÖÎö Ö÷Òªº¯Êý RenderScene() glPointSize(curSize) glVertex3f(20.0f,150.0f,0.0f) glLineStipple(1,0x00ff); glutReshapeFunc() £¨3£©ÔËÐнá¹û
×÷Óà ´´½¨Í¼Ðε͍Òå ÉèÖõãµÄ´óС opengl»µãº¯Êý ÉèÖõ㻮Ïßģʽ ¿ØÖÆ´°¿Ú´óС·¶Î§µÄº¯Êý
¸½Â¼£º
³ÌÐòÔ´´úÂëÈçÏ£º
Ëã·¨1£ºÊä³öѧºÅ¼°Ãû×Ö
#include
#include \
void drawCNString(const char* str) { int len, i;
wchar_t* wstring;
HDC hDC = wglGetCurrentDC(); GLuint list = glGenLists(1);
// ¼ÆËã×Ö·ûµÄ¸öÊý
// Èç¹ûÊÇË«×Ö½Ú×Ö·ûµÄ£¨±ÈÈçÖÐÎÄ×Ö·û£©£¬Á½¸ö×Ö½Ú²ÅËãÒ»¸ö×Ö·û // ·ñÔòÒ»¸ö×Ö½ÚËãÒ»¸ö×Ö·û len = 0;
for(i=0; str[i]!='\\0'; ++i) {
if( IsDBCSLeadByte(str[i]) ) ++i; ++len; }
// ½«»ìºÏ×Ö·ûת»¯Îª¿í×Ö·û
wstring = (wchar_t*)malloc((len+1) * sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, wstring, len); wstring[len] = L'\\0';
// Öð¸öÊä³ö×Ö·û for(i=0; i wglUseFontBitmapsW(hDC, wstring[i], 1, list); glCallList(list); } // »ØÊÕËùÓÐÁÙʱ×ÊÔ´ free(wstring); glDeleteLists(list, 1); } void selectFont(int size, int charset, const char * face) { HFONT hFont = CreateFontA(size, 0, 0, 0, FW_MEDIUM, 0, 0, 0, charset, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, face); HFONT hOldFont = (HFONT)SelectObject(wglGetCurrentDC(), hFont); DeleteObject(hOldFont); } void Display(void)
Ïà¹ØÍÆ¼ö£º