2013-03-07 7 views
0

У меня проблема с GL_REPEAT и GL_CLAMP при создании текстуры в OpenGL. В моем следующем коде я получаю тот же результат (его всегда повторяется) с GL_REPEAT и GL_CLAMP ... Я не вижу разницы в моем коде с теми, что есть во многих учебниках. Пожалуйста, помогите мне найти эту ошибку. Я пытался увеличить размер изображения от 4 до 128 .. но до сих пор не разница между GL_CLAMP и GL_REPEATGL_REPEAT и GL_CLAMP, дающие тот же результат

#include <GL/gl.h> 
#include <GL/glu.h> 
#include <GL/glut.h> 

#include <cmath> 
#include <stdlib.h> 
#include <stdio.h> 

/* Create checkerboard texture */ 
#define checkImageWidth 64 
#define checkImageHeight 64 
static float checkImage[checkImageHeight][checkImageWidth][4]; 

static GLuint texName; 

void makeCheckImage(void) 
{ 
    int i, j; 
    float c; 

    for (i = 0; i < checkImageHeight; i++) { 
     for (j = 0; j < checkImageWidth; j++) { 
//   c = ((((i&0x8)==0)^((j&0x8))==0))*255; 
      c = 10*sin(i*j); 
//   checkImage[i][j][0] = (GLubyte) c*0; 
     checkImage[i][j][0] = c*0.1; 
     checkImage[i][j][1] = c*0.25; 
     checkImage[i][j][2] = c*0.0; 
     checkImage[i][j][3] = 250; 
     } 
    } 
} 

void init(void) 
{  
    glClearColor (0.0, 0.0, 0.0, 0.0); 
    glShadeModel(GL_FLAT); 
    glEnable(GL_DEPTH_TEST); 

    makeCheckImage(); 
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 

    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); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 
        GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, 
        GL_NEAREST); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, 
       checkImageHeight, 0, GL_RGBA, GL_FLOAT, 
       checkImage); 
} 

void display(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    gluLookAt(1, -1, 1, 0, 1, 0, 0, 0, 1); 
    glEnable(GL_TEXTURE_2D); 
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); 
    glBindTexture(GL_TEXTURE_2D, texName); 
    glMatrixMode(GL_MODELVIEW); 
    //glLoadIdentity(); 

    // glLoadIdentity(); 
    glPushMatrix(); 

    glBegin(GL_QUADS); 
    glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); 
    glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0); 
    glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0); 
    glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0); 

    glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); 
    glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); 
    glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); 
    glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -2.0, -1.41421); 

    glPopMatrix(); 


    glPushMatrix(); 
    /* 
    glTranslated(-6, -2, 1); 
    glScaled(0.5,0.5,0.5) ; 
    //GLint mysphereID; 
    GLUquadricObj *sphere=NULL; 
    sphere = gluNewQuadric(); 
    gluQuadricDrawStyle(sphere, GLU_LINE); 
    gluQuadricTexture(sphere, GL_TRUE); 
    gluQuadricNormals(sphere, GLU_SMOOTH); 
    gluSphere(sphere, 01.0, 100, 100); 
*/ 
    glPopMatrix(); 

    glPushMatrix(); 

    glColor3f(0.7f, 0.0f, 0.4f); 
    glTranslated(-1, -3, -1); 
    glScaled(0.5,0.5,0.5) ; 
    GLUquadricObj *quadObj = gluNewQuadric(); 
    gluQuadricDrawStyle(quadObj, GLU_LINE); 
     gluQuadricNormals(quadObj, GLU_SMOOTH); 
     gluQuadricTexture(quadObj, GL_TRUE); 
    gluCylinder(quadObj, 0.8, 0.8, 1.4, 100, 100); 

    glPopMatrix(); 

    glDisable(GL_TEXTURE_2D); 
    //gluDeleteQuadric(sphere); 
    gluDeleteQuadric(quadObj); 


    glEnd(); 
    glFlush(); 

} 

void reshape(int w, int h) 
{ 
    glViewport(0, 0, (GLsizei) w, (GLsizei) h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(100.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glTranslatef(0.0, 0.0, -3.6); 
} 

void keyboard (unsigned char key, int x, int y) 
{ 
    switch (key) { 
     case 27: 
     exit(0); 
     break; 
     default: 
     break; 
    } 
} 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    //glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); 
    glutInitWindowSize(550, 550); 
    glutInitWindowPosition(100, 100); 
    glutCreateWindow(argv[0]); 
    init(); 
    glutDisplayFunc(display); 
    glutReshapeFunc(reshape); 
    glutKeyboardFunc(keyboard); 
    glutMainLoop(); 
    return 0; 
} 

ответ

2

Вы не увидите разницу, если ваши координаты текстуры не выходит за пределы диапазона от 0 до 1. В противном случае нет ничего зажимать или повторять.

+0

спасибо за ответ .. в коде, который я разместил выше ... как можно сделать текстуру вне диапазона 0 до 1 ...? – AdityaG

+0

Поместите большие числа в вызовы glTexCoord2f(). – JasonD

+0

Это работает как шарм ... Спасибо .... – AdityaG

Смежные вопросы