#include <windows.h> #include <GL/gl.h> #include <GL/glut.h> #define TEXSIZE 64 GLubyte pixels[TEXSIZE][TEXSIZE][3]; GLuint texName; void disp( void ) { glClear(GL_COLOR_BUFFER_BIT); glBindTexture(GL_TEXTURE_2D , texName); glBegin(GL_POLYGON); glTexCoord2f(0 , 0); glVertex2f(-0.9 , -0.9); glTexCoord2f(0 , 2); glVertex2f(-0.9 , 0.9); glTexCoord2f(2 , 2); glVertex2f(0.9 , 0.9); glTexCoord2f(2 , 0); glVertex2f(0.9 , -0.9); glEnd(); glFlush(); } int main(int argc , char ** argv) { unsigned int i , j; for (i = 0 ; i < TEXSIZE ; i++) { int r = (i * 0xFF) / TEXSIZE; for (j = 0 ; j < TEXSIZE ; j++) { pixels[i][j][0] = (GLubyte)r; pixels[i][j][1] = (GLubyte)(( j * 0xFF ) / TEXSIZE); pixels[i][j][2] = (GLubyte)~r; } } glutInit(&argc , argv); glutInitWindowSize(400 , 300); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow("Kitty on your lap"); glutDisplayFunc(disp); glEnable(GL_TEXTURE_2D); glGenTextures(1 , &texName); glBindTexture(GL_TEXTURE_2D , texName); glTexImage2D( GL_TEXTURE_2D , 0 , 3 , TEXSIZE , TEXSIZE , 0 , GL_RGB , GL_UNSIGNED_BYTE , pixels ); glutMainLoop(); glDeleteTextures(1 , &texName); return 0; }
void glTexParameterf( GLenum target, GLenum pname, GLfloat param ); void glTexParameteri( GLenum target, GLenum pname, GLint param ); void glTexParameterfv( GLenum target, GLenum pname, const GLfloat *params ); void glTexParameteriv( GLenum target, GLenum pname, const GLint *params );target には GL_TEXTURE_1D または GL_TEXTURE_2D を指定します
定数 | 解説 |
---|---|
GL_TEXTURE_MIN_FILTER | テクスチャ縮小関数を設定します |
GL_TEXTURE_MAG_FILTER | テクスチャ拡張関数を設定します |
GL_TEXTURE_WRAP_S | テクスチャ座標 s のラップ・パラメタを設定します GL_CLAMP または GL_REPEAT を設定することができます |
GL_TEXTURE_WRAP_T | テクスチャ座標 t のラップ・パラメタを設定します GL_CLAMP または GL_REPEAT を設定することができます |
GL_TEXTURE_BORDER_COLOR | RGBA 形式で境界の色を設定します カラー要素は 1 が最も高く、-1 が最も低いことを表します |
GL_TEXTURE_PRIORITY | 0 〜 1 の範囲でテクスチャの優先度を設定します |
#include <windows.h> #include <GL/gl.h> #include <GL/glut.h> #define TEXSIZE 64 GLubyte pixels[TEXSIZE][TEXSIZE][3]; GLuint texName; void disp( void ) { glClear(GL_COLOR_BUFFER_BIT); glBindTexture(GL_TEXTURE_2D , texName); glBegin(GL_POLYGON); glTexCoord2f(0 , 0); glVertex2f(-0.9 , -0.9); glTexCoord2f(0 , 2); glVertex2f(-0.9 , 0.9); glTexCoord2f(2 , 2); glVertex2f(0.9 , 0.9); glTexCoord2f(2 , 0); glVertex2f(0.9 , -0.9); glEnd(); glFlush(); } int main(int argc , char ** argv) { unsigned int i , j; for (i = 0 ; i < TEXSIZE ; i++) { int r = (i * 0xFF) / TEXSIZE; for (j = 0 ; j < TEXSIZE ; j++) { pixels[i][j][0] = (GLubyte)r; pixels[i][j][1] = (GLubyte)(( j * 0xFF ) / TEXSIZE); pixels[i][j][2] = (GLubyte)~r; } } glutInit(&argc , argv); glutInitWindowSize(400 , 300); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow("Kitty on your lap"); glutDisplayFunc(disp); glEnable(GL_TEXTURE_2D); glGenTextures(1 , &texName); glBindTexture(GL_TEXTURE_2D , texName); glTexParameteri(GL_TEXTURE_2D , GL_TEXTURE_WRAP_S , GL_CLAMP); glTexParameteri(GL_TEXTURE_2D , GL_TEXTURE_WRAP_T , GL_CLAMP); glTexImage2D( GL_TEXTURE_2D , 0 , 3 , TEXSIZE , TEXSIZE , 0 , GL_RGB , GL_UNSIGNED_BYTE , pixels ); glutMainLoop(); glDeleteTextures(1 , &texName); return 0; }