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

逛奔的蝸牛

我不聰明,但我會很努力

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

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>
            亚洲久久视频| 亚洲国产一二三| 欧美三级网页| 性色一区二区| 欧美成人免费在线视频| 国产精品一区二区男女羞羞无遮挡| 欧美亚洲一级| 欧美日韩美女| 亚洲另类视频| 欧美国产第一页| 午夜久久影院| 国产精品美女久久久久久久 | 久久久五月天| 国产精品日韩在线播放| 一本色道久久精品| 欧美激情综合色| 久久久久久日产精品| 国产一区二区三区的电影| 亚洲天堂成人在线观看| 91久久香蕉国产日韩欧美9色| 亚洲影院在线观看| 欧美日韩在线观看一区二区| 99热精品在线观看| 亚洲国产精品久久91精品| 久久精品一本久久99精品| 国产婷婷成人久久av免费高清 | 欧美成人网在线| 亚洲国产一区二区三区在线播| 久久久91精品国产一区二区三区| 在线视频日韩| 国产精品日韩一区| 久久riav二区三区| 午夜久久tv| 国产在线拍偷自揄拍精品| 久久久中精品2020中文| 久久国产一区二区| 在线看片第一页欧美| 美女亚洲精品| 欧美不卡一卡二卡免费版| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲精品少妇| 亚洲看片网站| 欧美性大战久久久久久久| 亚洲欧美中文日韩v在线观看| 亚洲尤物在线| 激情综合久久| 亚洲国产成人高清精品| 欧美日韩国产三级| 91久久午夜| 一本久道久久久| 国产欧美短视频| 美国三级日本三级久久99| 美女视频网站黄色亚洲| 在线亚洲精品| 亚洲欧美另类中文字幕| 久久久久久久91| 最新日韩在线视频| 亚洲自拍偷拍视频| 亚洲国产另类精品专区| 一区二区国产日产| 精品9999| 亚洲精品永久免费| 好吊色欧美一区二区三区四区| 欧美激情国产日韩| 国产精品免费视频观看| 另类综合日韩欧美亚洲| 欧美日韩在线观看一区二区| 亚洲精品美女| 亚洲欧美日韩国产中文| 亚洲丁香婷深爱综合| 中国女人久久久| 亚洲激情另类| 午夜欧美大片免费观看| 日韩视频一区二区在线观看 | 久久影院午夜片一区| 免费一区二区三区| 久久成人精品视频| 欧美日韩国产一区二区三区| 久久久蜜桃一区二区人| 欧美日韩在线免费观看| 欧美不卡三区| 国产人成一区二区三区影院| 亚洲日本黄色| 亚洲第一天堂无码专区| 香蕉免费一区二区三区在线观看| 亚洲麻豆国产自偷在线| 久久久亚洲高清| 亚洲精品永久免费| 国产精品免费观看视频| 亚洲经典在线看| 精东粉嫩av免费一区二区三区| 亚洲午夜羞羞片| 亚洲少妇最新在线视频| 欧美电影免费观看大全| 欧美.www| 樱花yy私人影院亚洲| 性欧美大战久久久久久久久| 亚洲综合视频网| 亚洲狼人综合| 日韩亚洲欧美一区二区三区| 浪潮色综合久久天堂| 久久免费午夜影院| 国产一区二区三区精品欧美日韩一区二区三区 | 在线观看精品视频| 午夜久久久久久久久久一区二区| 亚洲在线成人精品| 欧美手机在线| 9国产精品视频| 一本一本久久| 伊人成人开心激情综合网| 香港久久久电影| 欧美一区二区福利在线| 国产精品日韩欧美一区二区| 亚洲网站在线| 欧美在线播放高清精品| 国产一二三精品| 久久综合伊人77777| 亚洲成色精品| 久久人人爽人人爽| 另类酷文…触手系列精品集v1小说| 国产自产精品| 欧美成人性生活| 99成人在线| 久久精品水蜜桃av综合天堂| 在线免费观看日韩欧美| 欧美精品久久久久久久久久| 国产精品99久久久久久有的能看| 国产亚洲精品aa| 久久综合伊人77777尤物| 欧美成人免费全部观看天天性色| 亚洲国产精品久久久久秋霞不卡| 欧美日韩1区| 性欧美暴力猛交69hd| 欧美大片免费观看| 亚洲一区久久久| 国产一区在线播放| 欧美日韩hd| 亚洲欧美精品在线| 亚洲国产精品第一区二区| 午夜欧美精品| 亚洲精品女人| 国模私拍视频一区| 亚洲天堂网站在线观看视频| 欧美日韩在线免费视频| 久久99伊人| 一本色道久久88综合亚洲精品ⅰ | 欧美一级一区| 欧美影院精品一区| 黑丝一区二区| 久久久噜噜噜久久中文字免| 99精品欧美一区二区蜜桃免费| 亚洲图色在线| 国产一区亚洲一区| 国产精品爱久久久久久久| 亚洲欧美日韩在线播放| 老鸭窝毛片一区二区三区| 亚洲欧洲在线观看| 国产视频一区在线观看一区免费| 亚洲电影视频在线| 亚洲午夜在线观看| 国产日产欧美精品| 亚洲免费伊人电影在线观看av| 老巨人导航500精品| 欧美日本中文字幕| 一本一本a久久| 永久免费精品影视网站| 国产精品久久9| 久久精品国产精品亚洲综合 | 9l国产精品久久久久麻豆| 欧美成人免费在线| 欧美怡红院视频| 老司机免费视频一区二区三区 | 国产自产女人91一区在线观看| 麻豆国产精品777777在线| 亚洲视频一二区| 欧美激情亚洲综合一区| 欧美在线一二三区| 9l视频自拍蝌蚪9l视频成人| 国产亚洲一区二区三区| 国产欧美一区二区三区在线看蜜臀| 免费黄网站欧美| 午夜亚洲一区| 性欧美xxxx大乳国产app| 一区二区免费在线视频| 亚洲福利视频在线| 久久另类ts人妖一区二区| 久久精品30| 亚洲欧美影院| 国产精品久久久久国产a级| 欧美亚洲视频在线观看| 午夜免费日韩视频| 亚洲一区二区黄| 亚洲美女性视频| 在线视频欧美日韩精品| 亚洲视频自拍偷拍| 亚洲人成在线观看网站高清| 伊人狠狠色丁香综合尤物| 在线免费观看视频一区| 国产一区在线播放| 国产日韩欧美三区|