{"id":3832,"date":"2018-03-01T18:23:28","date_gmt":"2018-03-01T10:23:28","guid":{"rendered":"http:\/\/www.bookcard.net\/wordpress\/?p=3832"},"modified":"2018-10-14T21:22:46","modified_gmt":"2018-10-14T13:22:46","slug":"opengl_texture","status":"publish","type":"post","link":"https:\/\/www.bookcard.net\/wordpress\/opengl_texture\/","title":{"rendered":"OpenGL\u4e4b\u7d0b\u7406\u6620\u5c04"},"content":{"rendered":"<figure id=\"attachment_3833\" aria-describedby=\"caption-attachment-3833\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_texture.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3833\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_texture.jpg\" alt=\"\" width=\"1024\" height=\"768\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_texture.jpg 1024w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_texture-300x225.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_texture-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-3833\" class=\"wp-caption-text\">OpenGL\u4e4b\u7d0b\u7406\u6620\u5c04<\/figcaption><\/figure>\n<p>\u5c07\u7d0b\u7406\u6620\u5c04\u52303D\u6a21\u578b\u662f\u9769\u547d\u6027\u6280\u8853,\u7d66\u4eba\u5e36\u4f86\u7167\u7247\u822c\u9707\u64bc\u903c\u771f\u6548\u679c,\u7c21\u55ae\u4f86\u8b1b\u7d0b\u7406\u6620\u5c04\u5c31\u662f\u5c07\u5716\u7247\u9644\u8457\u65bc\u591a\u908a\u5f62\u4e4b\u4e0a,\u9019\u6a23\u7684\u5716\u7247\u7a31\u4e4b\u70ba\u7d0b\u7406,\u4f60\u53ef\u4ee5\u5c07\u5e73\u92ea\u7684\u5730\u5716\u6620\u5c04\u5230\u7403\u9ad4\u4e0a\u5f9e\u800c\u5f97\u52303D\u5730\u7403\u6a21\u578b,\u4e0b\u9762\u4ee5\u6e32\u67d3\u6728\u7bb1\u70ba\u4f8b\u7684\u6f14\u793a\u7a0b\u5f0f:\u4e0b\u8f09<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"277\">\u751f\u6210\u7d0b\u7406\u5c0d\u50cf<\/td>\n<td width=\"277\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">void glGenTextures(GLsizei n,GLuint *textures);<\/td>\n<td width=\"277\">\u751f\u6210\u7d0b\u7406\u4e26\u8fd4\u56de\u7d0b\u7406\u300e\u7d22\u5f15\u300f\u5373ID\u7de8\u865f<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">n<\/td>\n<td width=\"277\">\u7d0b\u7406\u500b\u6578<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">textures<\/td>\n<td width=\"277\">\u6578\u7d44,\u8fd4\u56de\u7d0b\u7406ID<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"293\">\u7d81\u5b9a\u7d0b\u7406<\/td>\n<td width=\"260\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"293\">void glBindTexture(GLenum target,GLuint texture);<\/td>\n<td width=\"260\">\u751f\u6210\u7d0b\u7406\u4e4b\u5f8c\u8981\u9032\u884c\u7d81\u5b9a<\/td>\n<\/tr>\n<tr>\n<td width=\"293\">Target<\/td>\n<td width=\"260\">GL_TEXTURE_1D:1\u7dad\u7d0b\u7406<\/p>\n<p>GL_TEXTURE_2D:2\u7dad\u7d0b\u7406<\/td>\n<\/tr>\n<tr>\n<td width=\"293\">Textures<\/td>\n<td width=\"260\">\u7d0b\u7406ID\u6578\u7d44<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"277\">\u904e\u6ffe\u7d0b\u7406<\/td>\n<td width=\"277\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">void glTexParameteri(GLenum target,GLenum pname,GLint param);<\/td>\n<td width=\"277\">\u7d81\u5b9a\u4e4b\u5f8c\u8981\u8a2d\u5b9a\u7d0b\u7406\u904e\u6ffe<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">target:<\/td>\n<td width=\"277\">GL_TEXTURE_1D:1\u7dad\u7d0b\u7406<\/p>\n<p>GL_TEXTURE_2D:2\u7dad\u7d0b\u7406<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">pname:<\/td>\n<td width=\"277\">GL_TEXTURE_MIN_FILTER:\u7e2e\u5c0f\u904e\u6ffe<\/p>\n<p>GL_TEXTURE_MAG_FILTER:\u653e\u5927\u904e\u6ffe<\/p>\n<p>GL_TEXTURE_WRAP_S:\u7d0b\u7406S\u5ea7\u6a19<\/p>\n<p>GL_TEXTURE_WRAP_T:\u7d0b\u7406T\u5ea7\u6a19<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">param:<\/p>\n<p>&nbsp;<\/td>\n<td width=\"277\">GL_REPEAT:\u91cd\u8907(\u5e73\u92ea)\u7d0b\u7406<\/p>\n<p>GL_CLAMP:\u593e\u6301\u7d0b\u7406<\/p>\n<p>GL_LINEAR:\u50cf\u7d20\u63a1\u6a23\u7dda\u6027\u63d2\u503c(\u52a0\u6b0a\u5e73\u5747)<\/p>\n<p>GL_NEAREST:\u50cf\u7d20\u63a1\u6a23\u6700\u63a5\u8fd1\u4e2d\u5fc3\u7d0b\u7406<\/p>\n<p>GL_NEAREST_MIPMAP_NEAREST:\u7d0b\u7406\u93c8\u63a1\u6a23\u4f7f\u7528NEAREST,\u904e\u6ffe\u4f7f\u7528NEAREST<\/p>\n<p>GL_NEAREST_MIPMAP_LINEAR:\u7d0b\u7406\u93c8\u63a1\u6a23\u4f7f\u7528NEAREST,\u904e\u6ffe\u4f7f\u7528LINEAR<\/p>\n<p>GL_LINEAR_MIPMAP_NEAREST:\u7d0b\u7406\u93c8\u63a1\u6a23\u4f7f\u7528LINEAR,\u904e\u6ffe\u4f7f\u7528NEAREST<\/p>\n<p>GL_LINEAR_MIPMAP_LINEAR:\u7d0b\u7406\u93c8\u63a1\u6a23\u4f7f\u7528LINEAR,\u904e\u6ffe\u4f7f\u7528LINEAR<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"277\">\u8f09\u5165\u7d0b\u7406<\/td>\n<td width=\"277\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">void glTexImage2D(GLenum target,GLint\u00a0\u00a0 level,GLint internalformat,GLsizei width,GLsizei height,GLint border,GLint format,GLenum\u00a0 type,const GLvoid *pixels);<\/td>\n<td width=\"277\">\u8a2d\u5b9a\u7d0b\u7406\u904e\u6ffe\u5f8c\u9700\u8981\u628a\u7d0b\u7406\u8f09\u5165OpenGL<\/p>\n<p>type:\u6700\u5e38\u7528GL_UNSIGNED_BYTE(\u7121\u7b26\u865f8Bit)<\/p>\n<p>pixels:\u7d0b\u7406\u6578\u64da<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">target:<\/td>\n<td width=\"277\">GL_TEXTURE_1D:1\u7dad\u7d0b\u7406<\/p>\n<p>GL_TEXTURE_2D:2\u7dad\u7d0b\u7406<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">level:<\/td>\n<td width=\"277\">\u7d0b\u7406\u93c8\u7d22\u5f15,\u82e5\u53ea\u6709\u55ae\u500b\u7d0b\u7406\u5247\u8a2d\u70ba0<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">internalformat:<\/td>\n<td width=\"277\">\u6700\u5e38\u7528GL_RGBA\u6216GL_RGB<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">width:<\/td>\n<td width=\"277\">\u7d0b\u7406\u5bec\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">height:<\/td>\n<td width=\"277\">\u7d0b\u7406\u9ad8\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">border:<\/td>\n<td width=\"277\">\u7d0b\u7406\u662f\u5426\u6709\u8b8a\u6846,0\u6c92\u6709\u908a\u6846,1\u6709\u908a\u6846<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">format:<\/td>\n<td width=\"277\">\u6700\u5e38\u7528GL_RGBA\u6216GL_RGB<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"277\">\u7d0b\u7406\u5ea7\u6a19\u8207\u9802\u9ede\u5ea7\u6a19<\/td>\n<td width=\"277\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">void glTexCoord2f (GLfloat s, GLfloat t);<\/td>\n<td width=\"277\">\u8a2d\u5b9a\u7d0b\u7406\u5ea7\u6a19(s,t), s\u8ef8\u7d0b\u7406\u7684x\u5ea7\u6a19,t\u8ef8\u70ba\u7d0b\u7406\u7684y\u5ea7\u6a19,\u7d0b\u7406\u5ea7\u6a19\u5fc5\u9700\u5728\u9802\u9ede\u5ea7\u6a19\u4e4b\u524d\u8a2d\u5b9a<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">void glVertex3f(GLfloat x,GLfloat y,GLfloat z);<\/td>\n<td width=\"277\">\u8a2d\u5b9a\u9802\u9ede\u5ea7\u6a19,\u4e26\u8207\u7d0b\u7406\u5ea7\u6a19\u5339\u914d<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"277\">\u5b9a\u7fa9\u7d0b\u7406\u7d50\u69cb<\/td>\n<td width=\"277\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">typedef struct TEXTURE_TYP{<\/td>\n<td width=\"277\">\u6b64\u7d50\u69cb\u7528\u65bc\u4fdd\u5b58\u7d0b\u7406\u4f4d\u5716\u4fe1\u606f<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">int\u00a0\u00a0 width;<\/td>\n<td width=\"277\">\u7d0b\u7406\u5bec\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">int\u00a0\u00a0 height;<\/td>\n<td width=\"277\">\u7d0b\u7406\u9ad8\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">int\u00a0\u00a0 bitCount;<\/td>\n<td width=\"277\">\u4f4d\u5716\u50cf\u7d20\u7684bits (8BIT,16BIT,24BIT,32BIT)<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">int\u00a0\u00a0 size;<\/td>\n<td width=\"277\">\u7d0b\u7406\u6578\u64da\u7684\u5927\u5c0f<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">PALETTEENTRY paletteentry;<\/td>\n<td width=\"277\">\u4f4d\u5716\u8abf\u8272\u677f<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">GLuint\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ID;<\/td>\n<td width=\"277\">\u7d0b\u7406ID<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">PBYTE images[32];<\/td>\n<td width=\"277\">mipmap\u7d0b\u7406\u93c8<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">int\u00a0\u00a0 count;<\/td>\n<td width=\"277\">\u7d0b\u7406\u93c8\u500b\u6578<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">}TEXTURE, *TEXTURE_PTR;<\/td>\n<td width=\"277\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u7d0b\u7406\u6620\u5c04\u4ee3\u78bc\u793a\u4f8b<\/p>\n<p>1.\u555f\u7528\u6df1\u5ea6\u7de9\u885d\u6e2c\u8a66,\u53ef\u4fdd\u8b49\u591a\u908a\u5f62\u88ab\u6b63\u78ba\u7e6a\u88fd<\/p>\n<p>glEnable(GL_DEPTH_TEST);<\/p>\n<p>2.\u555f\u52d5\u6f38\u8b8a\u6548\u679c<\/p>\n<p>glShadeModel(GL_SMOOTH);<\/p>\n<p>3.\u555f\u52d5\u591a\u908a\u5f62\u96b1\u9762\u88c1\u526a(\u6d88\u9664\u96b1\u85cf\u9762)\u5982\u679c\u8981\u7a7f\u8d8a\u5be6\u9ad4\u5247\u7121\u9700\u555f\u52d5<\/p>\n<p>glEnable(GL_CULL_FACE);<\/p>\n<p>4.\u8a2d\u80cc\u9762\u70ba\u96b1\u9762<\/p>\n<p>glCullFace(GL_BACK);<\/p>\n<p>5.\u591a\u908a\u5f62\u6b63\u9762\u4f7f\u7528\u9006\u6642\u91dd<\/p>\n<p>glFrontFace(GL_CCW);<\/p>\n<p>6.\u555f\u75282D\u7d0b\u7406\u6620\u5c04<\/p>\n<p>glEnable(GL_TEXTURE_2D);<\/p>\n<p>7.\u8f09\u5165\u4f4d\u5716\u7d0b\u7406(.bmp\u5716\u6a94)( .tga\u5716\u6a94)<\/p>\n<p>TEXTURE texture;<\/p>\n<p>Load_File_Texture(&amp;texture,path);<\/p>\n<p>8.\u751f\u62101\u500b\u7d0b\u7406<\/p>\n<p>glGenTextures(1, &amp;texture-&gt;ID);<\/p>\n<p>9.\u7d81\u5b9a\u7d0b\u7406<\/p>\n<p>glBindTexture(GL_TEXTURE_2D, texture-&gt;ID);<\/p>\n<p>10.\u653e\u5927\u7d0b\u7406\u50cf\u7d20\u63a1\u6a23\u6700\u63a5\u8fd1\u4e2d\u5fc3\u7d0b\u7406<\/p>\n<p>glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);<\/p>\n<p>11.\u7e2e\u5c0f\u7d0b\u7406\u904e\u6ffe\u50cf\u7d20\u63a1\u6a23\u6700\u63a5\u8fd1\u4e2d\u5fc3\u7d0b\u7406<\/p>\n<p>glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);<\/p>\n<p>12.\u8f09\u5165\u7d0b\u7406<\/p>\n<p>glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture-&gt;width, texture-&gt;height, 0, GL_RGB, GL_UNSIGNED_BYTE, texture-&gt;image[0]);<\/p>\n<p>&nbsp;<\/p>\n<p>\u5f9e\u6307\u5b9a\u7684\u78c1\u76e4\u8def\u5f91\u8f09\u5165\u7d0b\u7406\u51fd\u5f0f<\/p>\n<p>bool Load_File_Texture(TEXTURE_PTR texture,const char * path)<\/p>\n<p>{<\/p>\n<p>char drive[_MAX_DRIVE] = { 0 };\/\/ \u9a45\u52d5\u5668\u76e4\u7b26<\/p>\n<p>char dir[_MAX_DIR] = { 0 };\u00a0\u00a0\u00a0 \/\/ \u76ee\u9304<\/p>\n<p>char fname[_MAX_FNAME] = { 0 };\/\/ \u6587\u4ef6\u540d<\/p>\n<p>char ext[_MAX_EXT] = { 0 };\u00a0\u00a0\u00a0 \/\/ \u64f4\u5c55\u540d!<\/p>\n<p>BITMAP_FILE bitmap;<\/p>\n<p>TARGA_FILE\u00a0 targa;<\/p>\n<p>PCX\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pcx;<\/p>\n<p>if (texture == NULL || path == NULL)<\/p>\n<p>return false;<\/p>\n<p>\/\/\u5c07\u8def\u5f91\u540d\u5206\u62c6\u70ba\u7d44\u4ef6!<\/p>\n<p>_splitpath(path, drive, dir, fname, ext);<\/p>\n<p>if (stricmp(ext, &#8220;.bmp&#8221;) == 0)\/\/ \u8f09\u5165\u4f4d\u5716<\/p>\n<p>{<\/p>\n<p><a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_read_bitmap_file\/\">Load_Bitmap<\/a>(&amp;bitmap, path);\/\/ \u8f09\u5165BMP\u6587\u6a94<\/p>\n<p>Load_Bitmap_Texture(texture, &amp;bitmap);\/\/ \u8f09\u5165\u7d0b\u7406<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>if (stricmp(ext, &#8220;.tga&#8221;) == 0)\/\/ \u8f09\u5165\u4f4d\u5716<\/p>\n<p>{<\/p>\n<p><a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_read_targa_file\/\">Load_Targa<\/a>(&amp;targa, path); \/\/ \u8f09\u5165tga\u6587\u6a94<\/p>\n<p>Load_Targa_Texture(texture, &amp;targa);\/\/ \u8f09\u5165\u7d0b\u7406<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>if (stricmp(ext, &#8220;.pcx&#8221;) == 0)\/\/ \u8f09\u5165\u4f4d\u5716<\/p>\n<p>{<\/p>\n<p><a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_read_pcx_file\/\">Load_PCX<\/a>(&amp;pcx, path); \/\/ \u8f09\u5165PCX\u6587\u6a94<\/p>\n<p>Load_PCX_Texture(texture, &amp;pcx);\/\/ \u8f09\u5165\u7d0b\u7406<\/p>\n<p>}<\/p>\n<p>return false;<\/p>\n<p>}<\/p>\n<p>\u6fc0\u6d3b\u7d0b\u7406<\/p>\n<p>void Bind_Texture(TEXTURE_PTR texture){<\/p>\n<p>glEnable(GL_TEXTURE_2D);<\/p>\n<p>glBindTexture(GL_TEXTURE_2D, texture-&gt;ID);\/\/ \u7d81\u5b9a\u7d0b\u7406<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5c07\u7d0b\u7406\u6620\u5c04\u52303D\u6a21\u578b\u662f\u9769\u547d\u6027\u6280\u8853,\u7d66\u4eba\u5e36\u4f86\u7167\u7247\u822c\u9707\u64bc\u903c\u771f\u6548\u679c,\u7c21\u55ae\u4f86\u8b1b\u7d0b\u7406\u6620\u5c04\u5c31\u662f\u5c07\u5716\u7247\u9644\u8457\u65bc\u591a\u908a\u5f62\u4e4b\u4e0a,\u9019\u6a23 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_texture\/\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">OpenGL\u4e4b\u7d0b\u7406\u6620\u5c04<\/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-3832","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\/3832","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=3832"}],"version-history":[{"count":5,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/3832\/revisions"}],"predecessor-version":[{"id":4187,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/3832\/revisions\/4187"}],"wp:attachment":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/media?parent=3832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/categories?post=3832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/tags?post=3832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}