{"id":3842,"date":"2018-03-03T14:02:09","date_gmt":"2018-03-03T06:02:09","guid":{"rendered":"http:\/\/www.bookcard.net\/wordpress\/?p=3842"},"modified":"2018-10-14T21:22:24","modified_gmt":"2018-10-14T13:22:24","slug":"opengl_flag","status":"publish","type":"post","link":"https:\/\/www.bookcard.net\/wordpress\/opengl_flag\/","title":{"rendered":"OpenGL\u4e4b\u65d7\u5e5f\u98c4\u63da"},"content":{"rendered":"<figure id=\"attachment_3843\" aria-describedby=\"caption-attachment-3843\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_flag.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3843\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_flag.jpg\" alt=\"\" width=\"1024\" height=\"768\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_flag.jpg 1024w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_flag-300x225.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_flag-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-3843\" class=\"wp-caption-text\">OpenGL\u4e4b\u65d7\u5e5f\u98c4\u63da<\/figcaption><\/figure>\n<p>\u8b93\u65d7\u5e5f\u98c4\u63da\u7684\u6838\u5fc3\u662f\u6ce2\u6d6a\u7b97\u6cd5,\u4f7f\u7528sin()\u51fd\u5f0f\u5c07\u65d7\u5e5f\u9802\u9ede\u521d\u6b64\u5316\u70ba\u6ce2\u7d0b,\u7136\u5f8c\u6bcf\u5e40\u79fb\u52d5\u6ce2\u7d0b<\/p>\n<p>\u6f14\u793a\u7a0b\u5f0f:<a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGLFlag.zip\">\u4e0b\u8f09<\/a><\/p>\n<ol>\n<li>\u6309\u65b9\u5411\u9375\u79fb\u52d5\u76f8\u6a5f<\/li>\n<li>\u6309ESC\u9375\u76f8\u6a5f\u8fd4\u56de\u539f\u9ede<\/li>\n<\/ol>\n<p>\u7b97\u6cd5\u5982\u4e0b:<\/p>\n<ol>\n<li>\u5c07\u65d7\u5e5f\u5b9a\u7fa9\u70ba\u9577\u65b9\u5f62,\u6a6b\u5411(x\u8ef8)36\u500b\u9802\u9ede,\u7e31\u5411(y\u8ef8)20\u500b\u9802\u9ede,35*19\u500b\u7db2\u683c<\/li>\n<li>\u6ce2\u7d0b\u7b97\u6cd5: z = sin((x * height * 360) * 2 * \u03c0)<\/li>\n<li>\u6bcf\u5e40\u6cbfZ\u8ef8\u5f80\u53f3\u79fb\u52d5\u6ce2\u7d0b\u4f86\u6a21\u64ec\u6ce2\u6d6a\u904b\u52d5,\u6700\u53f3\u7aef\u7684Z\u5ea7\u6a19\u79fb\u52d5\u5230\u6700\u5de6\u7aef<\/li>\n<li>\u5728\u7e6a\u756b\u65d7\u5e5f\u6642\u5f9e\u5de6\u4e0b\u89d2\u958b\u6b64,\u4e00\u6b21\u7e6a\u756b\u4e00\u500bGL_QUAD\u6309\u9006\u6642\u91dd\u7e6a\u756b\u7d0b\u7406\u5ea7\u6a19\u8207\u9802\u9ede\u5ea7\u6a19<\/li>\n<li>\u7d0b\u7406\u5ea7\u6a19:\u300es=x\/width\u300f\u300et=y\/height\u300f<\/li>\n<li>\u65d7\u5e5f\u300e\u7d0b\u7406\u300f\u5b9a\u7fa9\u70ba\u6b63\u65b9\u5f62,\u5206\u8fa8\u7387\u8d8a\u5927\u8d8a\u597d,\u300e<a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_read_targa_file\/\">\u7d0b\u7406\u8f09\u5165<\/a>\u300f<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"277\">\u65d7\u5e5f\u7d50\u69cb<\/td>\n<td width=\"277\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">typedef struct FLAG_TAG{<\/td>\n<td width=\"277\"><\/td>\n<\/tr>\n<tr>\n<td width=\"277\">float\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 points[36][20][3];<\/td>\n<td width=\"277\">\u9802\u9ede\u6578\u64da36*20\u500b\u9802\u9ede,\u6bcf\u500b\u9802\u9ede3(xyz)\u500b\u5206\u91cf<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">int\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time_start;<\/td>\n<td width=\"277\">\u555f\u52d5\u6642\u9593\u7528\u65bc\u63a7\u5236\u6ce2\u6d6a\u79fb\u52d5\u901f\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">}FLAG, *FLAG_PTR;<\/td>\n<td width=\"277\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>\u521d\u6b64\u5316\u65d7\u5e5f\u4f7f\u7528sin()\u6ce2\u7d0b\u51fd\u5f0f\u4f86\u521d\u6b64\u5316\u65d7\u5e5f<\/p>\n<p>bool Init_Flag(FLAG_PTR flag)<\/p>\n<p>{<\/p>\n<p>if (flag == NULL)<\/p>\n<p>return false;<\/p>\n<p>for (int x = 0; x &lt; 36; ++x)<\/p>\n<p>{<\/p>\n<p>for (int y = 0; y &lt; 20; ++y)<\/p>\n<p>{<\/p>\n<p>flag-&gt;points[x][y][0] = (float)x;\/\/ X\u8ef8<\/p>\n<p>flag-&gt;points[x][y][1] = (float)y;\/\/ Y\u8ef8<\/p>\n<p>float value = (x*20.0f \/ 360.0f) * 2.0f * 3.14159f;<\/p>\n<p>flag-&gt;points[x][y][2] = (float)sin(value);\/\/ \u6b63\u5f26\u8a08\u7b97<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>return true;<\/p>\n<p>}<\/p>\n<p>\u7e6a\u756b\u65d7\u5e5f<\/p>\n<p>void Draw_Flag(FLAG_PTR flag,float xPos,float yPos,float zPos,float xRot,float yRot,float zRot)<\/p>\n<p>{<\/p>\n<p>int x, y;<\/p>\n<p>float left, right, top, bottom;<\/p>\n<p>glPushMatrix();\/\/ \u7576\u524d\u77e9\u9663\u5806\u68e7\u58d3\u68e7<\/p>\n<p>glBindTexture(GL_TEXTURE_2D, Flag_Texture.ID);\/\/ \u7d81\u5b9a\u7d0b\u7406<\/p>\n<p>glTranslatef(xPos, yPos, zPos);\/\/ \u79fb\u52d5\u65d7\u5e5f\u5ea7\u6a19<\/p>\n<p>glRotatef(xRot, 1.0f, 0.0f, 0.0f); \/\/ \u7e5eX\u8ef8\u65cb\u8f49\u65d7\u5e5f<\/p>\n<p>glRotatef(yRot, 0.0f, 1.0f, 0.0f); \/\/ \u7e5eY\u8ef8\u65cb\u8f49\u65d7\u5e5f<\/p>\n<p>glRotatef(zRot, 0.0f, 0.0f, 1.0f); \/\/ \u7e5eZ\u8ef8\u65cb\u8f49\u65d7\u5e5f<\/p>\n<p>glBegin(GL_QUADS);\/\/ \u7e6a\u756b\u6728\u7bb1\u9802\u9762\u7d0b\u7406\u5ea7\u6a19\u548c\u9802\u9ede\u5ea7\u6a19<\/p>\n<p>\/\/ \u904d\u6b77\u65d7\u5e5f\u6240\u6709\u9802\u9ede,\u9664\u4e86\u65b9\u5411\u4e0a\u7684\u6700\u5f8c\u5169\u500b\u9ede<\/p>\n<p>\/\/ \u56e0\u70ba\u53ea\u662f\u7528\u5b83\u4f86\u7e6a\u88fd\u6bcf\u500b\u65b9\u5411\u4e0a\u6700\u5f8c\u7684GL_QUAD<\/p>\n<p>for (x = 0; x &lt; 35; ++x)<\/p>\n<p>{<\/p>\n<p>for (y = 0; y &lt; 18; ++y)<\/p>\n<p>{\u00a0\u00a0 \/\/ \u70ba\u7576\u524d\u7684\u56db\u908a\u5f62\u8a08\u7b97\u7d0b\u7406\u5ea7\u6a19<\/p>\n<p>left = (float)x \/ 35.0f;\u00a0 \/\/\u56db\u908a\u5f62\u5de6\u5247\u7684\u7d0b\u7406\u5ea7\u6a19<\/p>\n<p>bottom = (float)y \/ 18.0f ;\/\/\u56db\u908a\u5f62\u9802\u5247\u7684\u7d0b\u7406\u5ea7\u6a19<\/p>\n<p>right = (float)(x+1) \/ 35.0f; \/\/\u56db\u908a\u5f62\u53f3\u5247\u7684\u7d0b\u7406\u5ea7\u6a19<\/p>\n<p>top = (float)(y+1) \/ 18.0f ;\u00a0\u00a0 \/\/\u56db\u908a\u5f62\u5e95\u5247\u7684\u7d0b\u7406\u5ea7\u6a19<\/p>\n<p>\/\/ \u8a2d\u5b9a\u56db\u908a\u5f62\u5de6\u4e0b\u89d2\u7684\u7d0b\u7406\u5ea7\u6a19\u8207\u9802\u9ede\u5ea7\u6a19<\/p>\n<p>glTexCoord2f(left, bottom);\/\/ \u7d0b\u7406\u5ea7\u6a19<\/p>\n<p>glVertex3f(flag-&gt;points[x][y][0],<\/p>\n<p>flag-&gt;points[x][y][1],<\/p>\n<p>flag-&gt;points[x][y][2]);\/\/\u9802\u9ede\u5ea7\u6a19<\/p>\n<p>\/\/ \u8a2d\u5b9a\u56db\u908a\u5f62\u53f3\u4e0b\u89d2\u7684\u7d0b\u7406\u5ea7\u6a19\u8207\u9802\u9ede\u5ea7\u6a19<\/p>\n<p>glTexCoord2f(right, bottom);\/\/ \u7d0b\u7406\u5ea7\u6a19<\/p>\n<p>glVertex3f(flag-&gt;points[x+1][y][0],<\/p>\n<p>flag-&gt;points[x+1][y][1],<\/p>\n<p>flag-&gt;points[x+1][y][2]);\/\/\u9802\u9ede\u5ea7\u6a19<\/p>\n<p>\/\/ \u8a2d\u5b9a\u56db\u908a\u5f62\u53f3\u4e0a\u89d2\u7684\u7d0b\u7406\u5ea7\u6a19\u8207\u9802\u9ede\u5ea7\u6a19<\/p>\n<p>glTexCoord2f(right, top);\/\/ \u7d0b\u7406\u5ea7\u6a19<\/p>\n<p>glVertex3f(flag-&gt;points[x+1][y+1][0],<\/p>\n<p>flag-&gt;points[x+1][y+1][1],<\/p>\n<p>flag-&gt;points[x+1][y+1][2]);\/\/\u9802\u9ede\u5ea7\u6a19<\/p>\n<p>\/\/ \u8a2d\u5b9a\u56db\u908a\u5f62\u5de6\u4e0a\u89d2\u7684\u7d0b\u7406\u5ea7\u6a19\u8207\u9802\u9ede\u5ea7\u6a19<\/p>\n<p>glTexCoord2f(left, top);\/\/ \u7d0b\u7406\u5ea7\u6a19<\/p>\n<p>glVertex3f(flag-&gt;points[x][y+1][0],<\/p>\n<p>flag-&gt;points[x][y+1][1],<\/p>\n<p>flag-&gt;points[x][y+1][2]);\/\/\u9802\u9ede\u5ea7\u6a19<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>glEnd();<\/p>\n<p>DWORD tick = GetTickCount(); \/\/\u8fd4\u56de\u5f9e\u64cd\u4f5c\u7cfb\u7d71\u555f\u52d5\u6240\u7d93\u904e\u7684\u6beb\u79d2\u6578<\/p>\n<p>if ((tick &#8211; flag-&gt;time_start) &gt; 100)<\/p>\n<p>{<\/p>\n<p>flag-&gt;time_start = tick;<\/p>\n<p>float wrap;<\/p>\n<p>\/\/ \u751f\u6210\u65d7\u5e5f\u7684\u904b\u52d5<\/p>\n<p>\/\/ \u8a2a\u554f\u65d7\u5e5f\u4e2d\u7684\u6bcf\u4e00\u9ede,\u5c07\u6bcf\u9ede\u7684Z\u8ef8\u5ea7\u6a19\u5411\u53f3\u79fb\u52d5\u4e00\u4f4d\u4f86\u6a21\u64ec\u6ce2\u6d6a\u904b\u52d5<\/p>\n<p>for (y = 0; y &lt; 19; ++y)\/\/ Y\u8ef8\u65b9\u5411\u5faa\u74b0<\/p>\n<p>{\/\/ \u5b58\u5132\u6b64\u884c\u4e2d\u6700\u53f3\u7aef\u9802\u9ede\u7684Z\u5ea7\u6a19<\/p>\n<p>wrap = flag-&gt;points[35][y][2];<\/p>\n<p>for (x = 35; x &gt;= 0; &#8211;x)\/\/ X\u8ef8\u65b9\u5411\u5faa\u74b0<\/p>\n<p>{\/\/ \u5c07\u7576\u524d\u9802\u9edeZ\u5ea7\u6a19\u8a2d\u70ba\u524d\u4e00\u9802\u9ede\u7684Z\u5ea7\u6a19\u503c<\/p>\n<p>flag-&gt;points[x][y][2] = flag-&gt;points[x-1][y][2];<\/p>\n<p>}<\/p>\n<p>\/\/ \u5c07\u6700\u5de6\u7aef\u9802\u9ede\u7684Z\u5ea7\u6a19\u8a2d\u70ba\u5148\u524d\u6240\u5b58\u5132\u7684wrap<\/p>\n<p>flag-&gt;points[0][y][2] = wrap;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>glPopMatrix();\/\/ \u7576\u524d\u77e9\u9663\u5806\u68e7\u51fa\u68e7<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8b93\u65d7\u5e5f\u98c4\u63da\u7684\u6838\u5fc3\u662f\u6ce2\u6d6a\u7b97\u6cd5,\u4f7f\u7528sin()\u51fd\u5f0f\u5c07\u65d7\u5e5f\u9802\u9ede\u521d\u6b64\u5316\u70ba\u6ce2\u7d0b,\u7136\u5f8c\u6bcf\u5e40\u79fb\u52d5\u6ce2\u7d0b \u6f14\u793a\u7a0b\u5f0f:\u4e0b\u8f09 \u6309\u65b9\u5411 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_flag\/\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">OpenGL\u4e4b\u65d7\u5e5f\u98c4\u63da<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[62],"tags":[50],"class_list":["post-3842","post","type-post","status-publish","format-standard","hentry","category-opengl","tag-opengl","entry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/3842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/comments?post=3842"}],"version-history":[{"count":7,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/3842\/revisions"}],"predecessor-version":[{"id":3984,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/3842\/revisions\/3984"}],"wp:attachment":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/media?parent=3842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/categories?post=3842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/tags?post=3842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}