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

逛奔的蝸牛

我不聰明,但我會很努力

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

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 逛奔的蝸牛 閱讀(3575) 評論(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>
            免费一级欧美片在线观看| 久久综合狠狠综合久久激情| 亚洲高清一二三区| 久久精品日产第一区二区三区| 国产精品久久网| 香蕉尹人综合在线观看| 亚洲欧美日韩成人高清在线一区| 国产精品一二三| 欧美一区二区三区四区视频| 午夜日韩激情| 1769国内精品视频在线播放| 欧美国产激情| 欧美三级特黄| 久久精品国产综合| 久久色在线播放| 一区二区久久久久| 亚洲午夜伦理| 影音先锋久久久| 日韩视频一区二区三区在线播放免费观看| 欧美日韩免费精品| 欧美中文字幕视频在线观看| 久久久久国产精品厨房| 亚洲精品一区二区三区四区高清| 亚洲精品视频在线看| 国产精品一卡二卡| 欧美激情第3页| 欧美性久久久| 欧美sm视频| 国产精品国产a级| 欧美大片在线观看| 国产精品高潮呻吟视频| 美女精品在线观看| 欧美日韩国产在线播放| 久久人人爽人人爽| 欧美日韩国产精品一区| 久久久久国内| 欧美日韩中文字幕日韩欧美| 美女精品网站| 国产女人aaa级久久久级| 欧美激情视频免费观看| 国产精品久久一区主播| 欧美激情成人在线| 国产一区二区三区久久| 99视频一区二区| 亚洲国产天堂久久综合| 性做久久久久久久免费看| 一本到12不卡视频在线dvd| 欧美在线观看www| 亚洲一卡久久| 欧美激情在线| 欧美国产日韩一区二区| 国产亚洲毛片在线| 亚洲在线国产日韩欧美| 日韩视频精品| 乱中年女人伦av一区二区| 午夜日韩视频| 亚洲视频网在线直播| 欧美福利视频一区| 亚洲大胆人体视频| 蜜桃精品一区二区三区| 午夜精品成人在线| 亚洲在线视频网站| 亚洲免费在线电影| 亚洲综合三区| 亚洲一区三区电影在线观看| 欧美在线精品一区| 欧美激情视频在线播放| 久久久777| 欧美一区二区女人| 国产精品久久久久999| 亚洲人线精品午夜| 欧美国产日产韩国视频| 午夜亚洲性色福利视频| 国产精品三级久久久久久电影| 亚洲电影免费观看高清完整版| 国语自产精品视频在线看一大j8 | 久久国产精品久久w女人spa| 欧美日韩三级电影在线| 亚洲三级免费观看| 正在播放欧美视频| 国产精品理论片在线观看| 一本久久综合| 久久国内精品视频| 国内精品免费在线观看| 久久亚洲综合网| 亚洲福利一区| 亚洲午夜电影在线观看| 久久综合九色99| 欧美成在线观看| 99国产精品久久久| 欧美四级伦理在线| 亚洲摸下面视频| 久久网站免费| 日韩视频在线一区| 国产精品揄拍一区二区| 久久国产精品高清| 亚洲国产成人久久| 亚洲男同1069视频| 国产综合色产| 欧美成年人视频网站| 99精品国产热久久91蜜凸| 午夜一区二区三区在线观看 | 亚洲一区免费看| 久久久久久久性| 91久久线看在观草草青青| 欧美视频免费看| 久久精品系列| 99视频在线精品国自产拍免费观看| 美女图片一区二区| 国产精品老牛| 伊人精品在线| 欧美日本精品在线| 欧美一区日韩一区| 亚洲国产精品成人综合| 亚洲综合色噜噜狠狠| 在线精品国产欧美| 国产精品国产自产拍高清av王其 | 一本色道久久加勒比88综合| 久久精品中文字幕一区| 亚洲乱码国产乱码精品精98午夜 | 久久久久欧美精品| 亚洲精品视频在线观看免费| 久久精品中文字幕免费mv| 一区二区三区四区蜜桃| 国外视频精品毛片| 国产精品国产三级国产专播品爱网| 久久三级福利| 欧美在线三区| 午夜精彩国产免费不卡不顿大片| 亚洲精品一区二区三区99| 久久久人成影片一区二区三区| 亚洲尤物在线视频观看| 亚洲精品综合| 亚洲精品美女| 亚洲国产欧美日韩| 在线观看日韩av| 狠狠爱成人网| 国产亚洲欧洲997久久综合| 欧美三级在线视频| 欧美女同在线视频| 你懂的亚洲视频| 巨乳诱惑日韩免费av| 久久久久国产精品午夜一区| 欧美伊人久久久久久久久影院| 亚洲专区一区二区三区| 一区二区三区四区五区视频| 亚洲美女中出| 亚洲美女免费精品视频在线观看| 亚洲第一黄网| 亚洲国产裸拍裸体视频在线观看乱了中文 | 久久精品天堂| 久久久久久久久一区二区| 久久精品国产清自在天天线| 午夜在线a亚洲v天堂网2018| 亚欧成人在线| 久久精视频免费在线久久完整在线看 | 99综合视频| 一本久道久久综合狠狠爱| 日韩视频在线免费观看| 99精品欧美一区二区三区| 一区二区免费在线播放| 在线视频你懂得一区| 中文av一区特黄| 欧美一级成年大片在线观看| 欧美一站二站| 六月婷婷一区| 亚洲欧洲精品一区二区三区不卡| 亚洲麻豆av| 亚洲欧美在线免费| 久久精品首页| 欧美极品在线播放| 国产精品国产三级国产a| 国产精品一卡| 亚洲国产欧美国产综合一区| av成人激情| 久久精品欧美日韩| 欧美激情第3页| 亚洲视频专区在线| 久久精品国产视频| 欧美女同视频| 国产伊人精品| 99精品99| 玖玖精品视频| 亚洲精品中文字| 欧美一区午夜视频在线观看| 免费影视亚洲| 国产日韩欧美视频| 99re6热在线精品视频播放速度| 亚洲性夜色噜噜噜7777| 老司机精品视频一区二区三区| 亚洲精品国产精品国自产观看浪潮 | 裸体丰满少妇做受久久99精品| 亚洲欧洲在线一区| 小处雏高清一区二区三区| 你懂的亚洲视频| 韩国女主播一区| 亚洲综合日韩在线| 亚洲国产另类精品专区| 欧美有码视频| 国产精品美女久久久免费|