青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

逛奔的蝸牛

我不聰明,但我會很努力

   ::  :: 新隨筆 ::  ::  :: 管理 ::

OpenGL: Texture Mapping: When we apply image to a geometric primitive, we call this texture or texture mapping.

Load texture image: glTexImage /glTexSubImage

Map textures to geometry: glTexCoord

Change the texture environment: glTexEnv

Set texture mapping parameters: glTexparameter

Generate mipmaps: gluBuildMipmaps

Manage multiple textures: glBindTexture


dramatic differnece: 戲劇性的.

richness: 豐富.

stark contrast: 對比.

texel: the individual elements in a texture.

pixel: the individual elements in a pixmap.

A one-to-one correspondence seldom exists between texels and pixels on the screen.

shrink: 收縮.

bias: 誤差, 偏差.


Step on applying a texture map to geometry: 

First: Load the texture into memory: 

void glTexImage2D(GLenum target, GLint level, 

GLint internalformat, 

GLsizei width, GLsizei height, 

GLint border, GLenum format, 

GLenum type, void *data); 

target: GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D

level: specifies the mipmap level being loaded, for non-mipmaped texutres always to set this to 0. 

internalformat: how many color components you want to store per texel.

format: e.g. GL_RGB, GL_RGBA

type: e.g. GL_UNSIGNED_BYTE, GL_BYTE, GL_FLOAT, 

data: picture data.


You should also be aware that OpenGL copies the texture information from data when you call one of these functions(after loading, delete the data array, the wanted data is copied into the memory). Loaded textures are not applied to geometry unless the appropriate texture state is enabled.


Second: specify texture coordinates.

glTexCoord2f(s, t);




Texture matrix: glMatrixMode(GL_TEXTURE)

texture coordinates can also be transformated, rotated, and even scaled.


coordinate wrapping, texture filters, and the texture environment.

glTexImage2D(GL_TEXTURE_2D, 0, iComponents, iWidth, iHeight, 0, eFormat, GL_UNSIGNED_BYTE, pBytes); 

free(pBytes); 


glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 


glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 

glEnable(GL_TEXTURE_2D); 


Texture environment: How OpenGL combines the colors from texels and the color of the underlying geometry.

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 


GL_MODULATE: The modulate environment mode multiplies the texel color by the geometry color (after lighting calculations).

GL_REPLACE: Simply replace the color of the underlying geometry.

GL_BLEND: If the texture has an alpha channel, you can enable blending. Otherwise GL_BLEND behavors the same way as GL_REPLACE.

Textures can also be blended with a constant blending color using the GL_BLENDtexture 

environment. If you set this environment mode, you must also set the texture environ- 

ment color: 

GLfloat fColor[4] = { 1.0f, 0.0f, 0.0f, 0.0f }; 

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); 

glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, fColor); 

GL_ADD: Simply add the texel color values to the color of the underlying fragment.



Texture Parameters:

GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER

GL_NEAREST, GL_LINE

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);



Texture Wrap(s, t):

Normally, you specify texture coordinates between 0.0 and 1.0 to map out the texels in a texture map. If texture coordinates fall out side this range, OpenGL handles them according to the current texture wrapping mode. You can set the wrap mode for each coordinate individually by calling glTexParameteri with GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T, or GL_TEXTURE_WRAP_R as the parameter name. The wrap mode can then be set to one of the following values: GL_REPEAT, GL_CLAMP, GL_CLAMP_TO_EDGE, or GL_CLAMP_TO_BORDER. The GL_REPEAT wrap mode simply causes the texture to repeat in the direction in which the texture coordinate has exceeded 1.0. The texture repeats again for every integer texture coordinate. This mode is very useful for applying a small tiled texture to large geometric surfaces


Toon-shading, which is often refered to cell-shading, idea:

The basic idea is to use a surface normal from the geometry and a vector to the light source to find the intensity of the light striking the surface of the model. The dot product of these two vectors gives a value between 0.0 and 1.0 and is used as a one dimensional texture coordinate.



Mipmapping(many things in a small space):

Mipmappingis a powerful texturing technique that can improve both the rendering performance and the visual quality of a scene.

In essence, you load not a single image into the texture state, but a whole series of images from lagerest to smallest into a single "mipmapped" texture state. OpenGL use a new set of filter modes to choose the best-fitting texture or textures for given geometry.

Using a square set of mipmapps requires about one-third more memory than not using mipmapps.

Each one half the size of the previous image.


自動生成的, 質量比較差的Mipmaps:

gluBuild2DMipmaps: it automatically creates the scaled images for you and loads them appropriately with glTexImage.

int gluBuild2DMipmaps(GLenum target, GLint internalFormat, 

GLint width, GLint height, 

GLenum format, GLenum type, const void *data); 

You should also be aware that using these functions may not produce mip level images with the same quality you can obtain with other tools such as Photoshop. 


自動生成的, 質量比較好的Mipmaps:

With newer versions of the GLU library, you can also obtain a finer-grained control over which mip levels are loaded with these functions:

int gluBuild2DMipmapLevels(GLenum target, GLint internalFormat, 

GLint width, GLint height, 

GLenum format, GLenum type, GLint level, 

GLint base, GLint max, const void *data); 

With these functions, level is the mip level specified by the data parameter. This texture data is used to build mip levels base through max


使用硬件加速生成Mipmaps(對于整個場境都使用mipmaps):

Hardware Generation of Mipmaps: 

If you know beforehand that you want all mip levels loaded, you can also use OpenGL hardware acceleration to quickly generate all the necessary mip levels. You do so by setting the texture parameter GL_GENERATE_MIPMAP to GL_TRUE

glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); 

When this parameter is set, all calls to glTexImage or glTexSubImage that update the base texture map (mip level 0) automatically update all the lower mip levels. By making use of the graphics hardware, this feature is substantially faster than using gluBuildMipmaps. However, you should be aware that this feature was originally an extension and was promoted to the OpenGL core API only as of version 1.4. This is definitely the fastest and easiest way to build mipmaps on-the-fly. 


Texture Objects:

Loading and maintaining the texture state occupies a considerable portion of many texture-heavy OpenGL applications (games in particular). 

Texture objects allow you to load up more than one texture state at a time.


texture對象分配內存:

You allocate a number of texture objects with the following function: 

void glGenTextures(GLsizei n, GLuint *textures); 

With this function, you specify the number of texture objects and a pointer to an array of unsigned integers that will be populated with the texture object identifiers


指定texture對象(用一個整數來標志一個紋理對象):

void glBindTexture(GLenum target, GLuint texture); 

The target parameter needs to specify GL_TEXTURE_1D, GL_TEXTURE_2D, or GL_TEXTURE_3D, and textureis the specific texture object to bind to. Hereafter, all texture loads and texture parameter settings affect only the currently bound texture object. 

每一個texture都要設置自己的parameter, 因為每個parameter只對某個綁定的texture有效.


刪除texture對象的內存空間, 釋放內存:

To delete texture objects, you call the following function: 

void glDeleteTextures(GLsizei n, GLuint *textures); 

Calling glDeleteTextures multiple times may incur some delay, but only because you are deallocating possibly large amounts of texture memory.


測試是否有效的texture, 如被刪除后:

You can test texture object names (or handles) to see whether they are valid by using the following function: 

GLboolean glIsTexture(GLuint texture); 

This function returns GL_TRUE if the integer is a previously allocated texture object name or GL_FALSE if not.

posted on 2009-06-01 13:52 逛奔的蝸牛 閱讀(3569) 評論(0)  編輯 收藏 引用 所屬分類: OpenGL
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲美女福利视频网站| 国产麻豆精品theporn| 欧美午夜电影一区| 亚洲欧美久久久| 亚洲先锋成人| 黑人极品videos精品欧美裸| 欧美xxx在线观看| 午夜国产欧美理论在线播放| 欧美在线中文字幕| 亚洲国产欧美一区二区三区丁香婷| 久久国产精品亚洲77777| 久久综合网hezyo| 午夜亚洲精品| 久久亚裔精品欧美| 新狼窝色av性久久久久久| 久久精品国产亚洲a| 久久久午夜电影| 在线中文字幕不卡| 久久久久网站| 久久精品欧美日韩| 欧美理论大片| 免费欧美在线| 一区二区在线看| 亚洲欧美韩国| 亚洲香蕉网站| 欧美另类视频| 亚洲日本在线视频观看| 精品成人一区| 久久精品日韩| 久久伊人亚洲| 亚洲国产欧美久久| 欧美不卡高清| 在线视频欧美日韩精品| 午夜视频一区二区| 国产欧美一区二区三区在线看蜜臀| 亚洲国产乱码最新视频| 一本色道久久综合狠狠躁篇的优点| 老司机午夜精品| 亚洲精品乱码久久久久| 99re热精品| 国产午夜精品福利| 久久精品一区二区| 亚洲人体大胆视频| 亚洲无亚洲人成网站77777| 欧美国产另类| 中文一区二区| 欧美国产一区视频在线观看| aa级大片欧美三级| 国产字幕视频一区二区| 欧美日韩国产小视频| 亚洲综合欧美| 亚洲国产91| 久久都是精品| 一区二区高清视频| 亚洲午夜精品视频| 亚洲高清不卡在线| 久久狠狠一本精品综合网| 亚洲美女在线观看| 亚洲二区视频| 狠狠色狠狠色综合人人| 欧美日韩免费看| 欧美激情第六页| 久久视频国产精品免费视频在线| 亚洲一区二区av电影| 亚洲国产合集| 亚洲人体1000| 亚洲国产精品一区二区久| 乱中年女人伦av一区二区| 久久久久久婷| 免费成人av资源网| 免费在线国产精品| 欧美99在线视频观看| 欧美高清视频在线观看| 美女脱光内衣内裤视频久久网站| 欧美在线视频日韩| 久久久久久久久久看片| 久久电影一区| 久久免费观看视频| 亚洲国产综合91精品麻豆| 亚洲国产导航| 亚洲午夜激情| 美女尤物久久精品| 欧美日韩国内自拍| 国产视频一区在线观看| 伊人久久av导航| 亚洲人成久久| 午夜精品一区二区三区四区| 香蕉尹人综合在线观看| 久久婷婷一区| 一区二区三区国产在线| 久久国产夜色精品鲁鲁99| 欧美女主播在线| 在线播放豆国产99亚洲| 99精品国产在热久久婷婷| 久久激五月天综合精品| 一区二区在线观看视频| 亚洲视频观看| 亚洲欧洲精品成人久久奇米网| 亚洲男人的天堂在线观看| 欧美国产一区在线| 激情懂色av一区av二区av| 亚洲综合色激情五月| 亚洲成色www8888| 久久精精品视频| 韩国欧美国产1区| 久久精品国产96久久久香蕉| 亚洲免费在线精品一区| 欧美日韩国产大片| 亚洲一区二区三区成人在线视频精品| 欧美jizz19性欧美| 欧美中文字幕视频在线观看| 国产欧美一区二区白浆黑人| 亚洲一二三级电影| 亚洲一区二区三区四区视频| 欧美日韩色综合| 欧美一区二区三区免费看 | 国产精品成人aaaaa网站| 亚洲精品日韩在线观看| 亚洲国产裸拍裸体视频在线观看乱了中文| 欧美在线观看视频| 亚洲国产精品久久久久婷婷884| 亚洲国产高清视频| 欧美日韩国产免费| 欧美在线观看视频一区二区| 久久美女性网| 一区二区精品国产| 欧美影院一区| 亚洲精一区二区三区| 亚洲欧美国产一区二区三区| 国产一区日韩二区欧美三区| 亚洲国产欧美另类丝袜| 国产精品免费在线| 欧美成人第一页| 国产精品av免费在线观看| 久久久久久一区二区三区| 嫩草国产精品入口| 久久久国产成人精品| 亚洲韩日在线| 国产欧美日韩在线视频| 欧美激情精品久久久| 国产啪精品视频| 在线亚洲欧美视频| 亚洲毛片在线观看| 免费亚洲电影在线| 久久九九久精品国产免费直播| 欧美黄色免费网站| 久久青草欧美一区二区三区| 国产精品久久久久久影院8一贰佰| 亚洲国产精品999| 永久域名在线精品| 午夜久久久久久| 久久久久久久高潮| 国产一区免费视频| 久久久91精品国产一区二区三区| 午夜精品久久久久久久蜜桃app| 欧美大片在线观看一区| 亚洲人成人一区二区在线观看| 一区二区三区在线免费播放| 亚洲一区二区高清| 久久午夜视频| 亚洲每日在线| 欧美日韩三区| 亚洲欧美视频在线观看| 久久免费国产精品1| 最新国产拍偷乱拍精品| 欧美日韩一区二区三区在线观看免 | 久久精品国产99国产精品| 国产亚洲欧洲| 欧美福利电影网| 亚洲欧美日韩国产精品| 久久综合色婷婷| 91久久国产综合久久| 欧美jizz19性欧美| 亚洲综合色丁香婷婷六月图片| 性色av一区二区怡红| 在线成人激情| 国产精品日韩在线观看| 久久综合色影院| 亚洲欧美在线观看| 亚洲欧洲日产国产网站| 久久久久.com| 亚洲欧美国产va在线影院| 久久人人九九| 亚洲欧美综合另类中字| 亚洲韩国日本中文字幕| 久久精品国产久精国产思思| 亚洲精品久久久蜜桃| 国产精品亚洲成人| 国产精品进线69影院| 欧美日韩在线免费视频| 嫩草国产精品入口| 久久精品理论片| 午夜在线成人av| 一区二区欧美在线观看| 日韩亚洲欧美在线观看| 亚洲精品免费网站| 一区二区三区久久| 亚洲性感美女99在线| 亚洲性视频网站| 欧美一区二区三区免费视频|