1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
QVector3D *cubev1=new QVector3D(-0.5,0.5,0);
QVector3D *cubev2=new QVector3D(0.5,0.5,0);
QVector3D *cubev3=new QVector3D(0.5,-0.5,0);
QVector3D *cubev4=new QVector3D(-0.5,-0.5,0);
QVector3D *cubetv1=new QVector3D(0,1,0);
QVector3D *cubetv2=new QVector3D(1,1,0);
QVector3D *cubetv3=new QVector3D(0,0,0);
QVector3D *cubetv4=new QVector3D(1,0,0);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
QVector3D *worldlightposition=new QVector3D(0,0,10);
float lightparams[]={worldlightposition->x(),worldlightposition->y(),worldlightposition->z(),1};
glLightfv(GL_LIGHT0,GL_POSITION,lightparams);
GLuint cubemapid;
NCM *c=new NCM();
c->create(128,cubemapid);
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_CUBE_MAP);
glBindTexture(GL_TEXTURE_CUBE_MAP,cubemapid);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB,GL_REPLACE);
GLint normalmap=bindTexture(QImage("normal.bmp"));
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,normalmap);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV,GL_COMBINE_RGB,GL_DOT3_RGB);
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE0_RGB,GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE1_RGB,GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND0_RGB,GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND1_RGB,GL_SRC_COLOR);
GLint textureskin=bindTexture(QImage("brick.bmp"));
glActiveTexture(GL_TEXTURE2);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,textureskin);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
QVector3D *lightvector=new QVector3D();
glBegin(GL_POLYGON);
*lightvector=*worldlightposition - *cubev1;
glMultiTexCoord3d(GL_TEXTURE0,lightvector->x(),lightvector->y(),lightvector->z());
glMultiTexCoord2d(GL_TEXTURE1,cubetv1->x(),cubetv1->y());
glMultiTexCoord2d(GL_TEXTURE2,cubetv1->x(),cubetv1->y());
glVertex3d(cubev1->x(),cubev1->y(),cubev1->z());
*lightvector=*worldlightposition - *cubev2;
glMultiTexCoord3d(GL_TEXTURE0,lightvector->x(),lightvector->y(),lightvector->z());
glMultiTexCoord2d(GL_TEXTURE1,cubetv2->x(),cubetv2->y());
glMultiTexCoord2d(GL_TEXTURE2,cubetv2->x(),cubetv2->y());
glVertex3d(cubev3->x(),cubev2->y(),cubev2->z());
*lightvector=*worldlightposition - *cubev3;
glMultiTexCoord3d(GL_TEXTURE0,lightvector->x(),lightvector->y(),lightvector->z());
glMultiTexCoord2d(GL_TEXTURE1,cubetv3->x(),cubetv3->y());
glMultiTexCoord2d(GL_TEXTURE2,cubetv3->x(),cubetv3->y());
glVertex3d(cubev3->x(),cubev3->y(),cubev3->z());
*lightvector=*worldlightposition- *cubev4;
glMultiTexCoord3d(GL_TEXTURE0,lightvector->x(),lightvector->y(),lightvector->z());
glMultiTexCoord2d(GL_TEXTURE1,cubetv4->x(),cubetv4->y());
glMultiTexCoord2d(GL_TEXTURE2,cubetv4->x(),cubetv4->y());
glVertex3d(cubev1->x(),cubev4->y(),cubev4->z());
glEnd(); |
Partager