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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
| #include "glgridlight.h"
#include "gllight4p.h"
#include "gllight3p.h"
#include "gllight1p.h"
#include "glmaterial4p.h"
#include "glmaterial3p.h"
#include "glmaterial1p.h"
#include <qstring.h>
extern int m_nbrQuad;
GLGridLight::GLGridLight(QWidget* parent): GLWidget(parent)
{
m_nbrQuad=10000;
GLlight4P* m_GLLight4P=new GLlight4P(QString("GL_LIGHT0"),QString("GL_AMBIENT"),1.0,0.0,0.0,1.0);
GLlight4P* m_GLLight24P=new GLlight4P(QString("GL_LIGHT0"),QString("GL_DIFFUSE"),1.0,0.0,0.0,1.0);
GLlight4P* m_GLLight34P=new GLlight4P(QString("GL_LIGHT0"),QString("GL_SPECULAR"),1.0,0.0,0.0,1.0);
GLlight4P* m_GLLight44P=new GLlight4P(QString("GL_LIGHT0"),QString("GL_POSITION"),0.0,0.0,20.0,1.0);
GLlight3P* m_GLLight3P=new GLlight3P(QString("GL_LIGHT0"),QString("GL_SPOT_DIRECTION"),0.0,0.0,-1.0);
GLlight1P* m_GLLight1P=new GLlight1P(QString("GL_LIGHT0"),QString("GL_SPOT_EXPONENT"),0.0);
GLlight1P* m_GLLight21P=new GLlight1P(QString("GL_LIGHT0"),QString("GL_SPOT_CUTOFF"),180.0);
GLlight1P* m_GLLight31P=new GLlight1P(QString("GL_LIGHT0"),QString("GL_CONSTANT_ATTENUATTION"),1.0);
GLlight1P* m_GLLight41P=new GLlight1P(QString("GL_LIGHT0"),QString("GL_LINEAR_ATTENUATTION"),0.0);
GLlight1P* m_GLLight51P=new GLlight1P(QString("GL_LIGHT0"),QString("GL_QUADRATIC_ATTENUATTION"),0.0);
GLmaterial4P* m_GLMaterial4P=new GLmaterial4P(QString("GL_FRONT_AND_BACK"),QString("GL_AMBIENT"),1.0,1.0,1.0,1.0);
GLmaterial4P* m_GLMaterial24P=new GLmaterial4P(QString("GL_FRONT_AND_BACK"),QString("GL_DIFFUSE"),1.0,1.0,1.0,1.0);
GLmaterial4P* m_GLMaterial34P=new GLmaterial4P(QString("GL_FRONT_AND_BACK"),QString("GL_SPECULAR"),1.0,1.0,1.0,1.0);
GLmaterial4P* m_GLMaterial44P=new GLmaterial4P(QString("GL_FRONT_AND_BACK"),QString("GL_EMISSION"),0.0,0.0,0.0,1.0);
GLmaterial3P* m_GLMaterial3P=new GLmaterial3P(QString("GL_FRONT_AND_BACK"),QString("GL_COLOR_INDEXES"),0.0,1.0,1.0);
GLmaterial1P* m_GLMaterial1P=new GLmaterial1P(QString("GL_FRONT_AND_BACK"),QString("GL_SHININESS"),0.0);
m_grid1=new GridLight(m_GLLight4P,
m_GLLight24P,
m_GLLight34P,
m_GLLight44P,
m_GLLight3P,
m_GLLight1P,
m_GLLight21P,
m_GLLight31P,
m_GLLight41P,
m_GLLight51P,
m_GLMaterial4P,
m_GLMaterial24P,
m_GLMaterial34P,
m_GLMaterial44P,
m_GLMaterial3P,
m_GLMaterial1P,false,false,false,true,true,true
);
}
void GLGridLight::draw()
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(rotationX, 1.0, 0.0, 0.0);
glRotatef(rotationY, 0.0, 1.0, 0.0);
glRotatef(rotationZ, 0.0, 0.0, 1.0);
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
QImage buf_vitrail;
QImage vitrail;
buf_vitrail.load("Basketweave-texture.png");
vitrail = QGLWidget::convertToGLFormat(buf_vitrail);
glGenTextures(1, &Texture[0]);
glBindTexture( GL_TEXTURE_2D, Texture[0] );
glTexImage2D(GL_TEXTURE_2D, 0, 3, vitrail.width(), vitrail.height(), 0, GL_RGB, GL_UNSIGNED_BYTE, vitrail.bits());
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glNormal3i(0,0,1);
inc=20.0;
glTranslatef(-10.5,-10.5,-45.0);
switch(m_nbrQuad)
{
case 100:
{
m_x = 10;
}
break;
case 400:
{
m_x = 20;
}
break;
case 1600:
{
m_x = 40;
}
break;
case 6400:
{
m_x = 80;
}
break;
case 10000:
{
m_x = 100;
}
break;
}
for(float i=0;i<inc;i=i+(inc/m_x))
{
for(float j=0;j<inc;j=j+(inc/m_x))
{
glBindTexture(GL_TEXTURE_2D, Texture[0]);
glBegin(GL_QUADS);
glTexCoord2d(0,0);glVertex3f(GLfloat(i),GLfloat(j),0.0);
glTexCoord2d(1,0);glVertex3f(GLfloat(i+(inc/m_x)),GLfloat(j),0.0);
glTexCoord2d(1,1);glVertex3f(GLfloat(i+(inc/m_x)),GLfloat(j+(inc/m_x)),0.0);
glTexCoord2d(0,1);glVertex3f(GLfloat(i),GLfloat(j+(inc/m_x)),0.0);
glEnd();
}
}
m_grid1->drawFigure();
} |
Partager