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
|
#include <iostream>
using namespace std;
#include <QtGui/QMouseEvent>
#include <glwidget.h>
#include <QtOpenGL/QGLWidget>
#include <QtOpenGL>
#include "GL/glu.h"
double fovy = 45.0;
double znear = 0.5,zfar = 100;
double ratio = 1;
GLWidget::GLWidget(QWidget *parent):
QGLWidget(parent)
{
rquad =25;
setMouseTracking(true);
startTimer(1);
}
void GLWidget::initializeGL()
{
loadTexture("./images/HUD-RVBA.png");
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}
void initializeGL2()
{
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}
void GLWidget::resizeGL(int width, int height)
{
if(height == 0)
height = 1;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(fovy, ratio, znear, zfar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
double alpha = 0;
double translation = (1.0/tan(45.0/2.0*M_PI/180.0)*1.125);
glTranslatef(0.0f, alpha/(45.0/2)*1.125, -translation);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_EQUIV, 0);
glBegin(GL_QUADS);
// Face Avant
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-2.0f, -4.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f( 2.0f, -4.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f( 2.0f, 4.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-2.0f, 4.0f, 0.0f);
glEnd();
glDisable(GL_ALPHA_TEST);
glTranslatef(0.0f, 0.0f, -1);
// glColor3f(1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
// Face Avant
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-1.125f, -1.125f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
// glColor3f(1.0,0.0,0.0);
glVertex3f( 1.125f, -1.125f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
// glColor3f(1.0,0.0,0.0);
glVertex3f( 1.125f, 0.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
// glColor3f(1.0,0.0,0.0);
glVertex3f(-1.125f, 0.0f, 0.0f);
glEnd();
}
void GLWidget::loadTexture(QString textureName)
{
QImage qim_Texture;
QImage qim_TempTexture;
qim_TempTexture.load(textureName);
qim_Texture = QGLWidget::convertToGLFormat( qim_TempTexture );
glGenTextures( 1, &texture[0] );
glBindTexture( GL_TEXTURE_2D, texture[0] );
glTexImage2D( GL_TEXTURE_2D, 0, 3, qim_Texture.width(), qim_Texture.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, qim_Texture.bits() );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
} |
Partager