Помогите наложить текстуру или на поле или на мяч игры.
Код:
#include "stdafx.h"
#include<time.h>
#include <cmath>
#include<GL/glut.h>
#include <GL/glaux.h>
unsigned int texture[1];
using namespace std;
class Pong {
public:
int OrthoWidt = 700, OrthoHeight = 700;
int WindowsWidth = 700, WindowsHeight = 700;
int WindowsXPosition = 100, WindowsYPosition = 100;
float FielSizeX = 640, FielSizeY = 480;
int teak = 1.0;
float ThicknessPlatformі=11;
float BallSize = 8;
float FrameThickness = 10;
int ScoreLeft = 0, ScoreRight = 0;
float TextPositionX = 0, TextPositionY = FielSizeY + 10;
float BallSpeedX = 2.0, PlatformSpeedY =2.0;
void ssettingd();
void сhampion();
void KeySet();
void KeyReset();
void drawing();
void Scoredrawing();
void Loadtexture();
}settings;
class ball{
public:
float x, y;
float vx, vy;
void moveball();
void hittingball();
void drawing();
}ball;
class hittingball {
public:
float x, y;
float vy , size;
bool Up, Down, hold;
hittingball(){
vy =y = 0;
Up = Down = hold = false;}
void drawing();
void moveplatform();
void care();
}left,right;
void Pong::KeyReset() { left.vy = right.vy = 0;}
void Pong::KeySet()
{
if ((left.Up) && (!left.Down)) { left.vy = PlatformSpeedY; }
if ((!left.Up) && (left.Down)) { left.vy = -PlatformSpeedY; }
if ((right.Up) && (!right.Down)) { right.vy = PlatformSpeedY; }
if ((!right.Up) && (right.Down)) { right.vy = -PlatformSpeedY; }
}
void Pong::ssettingd()
{
left.size = right.size = 120;
left.x = -540;
right.x = 540;
while (ball.vx == 0) {ball.vx = BallSpeedX;}
ball.x = ball.y = ball.vy = 0;
}
void Pong::сhampion()
{
if ((ScoreLeft == 7)||(ScoreRight == 7)) {
glutTimerFunc(1000, exit, 0);
settings.teak = 1000;}
if (ball.x < left.x + ThicknessPlatformі - BallSpeedX){
right.hold = true;
ScoreRight++;}
if (ball.x >right.x -ThicknessPlatformі + BallSpeedX){
left.hold = true;
ScoreLeft++;}
}
void Pong::drawing()
{
glEnable(GL_ALPHA_TEST);
glColor3f(1, 1, 0);
glVertex2f(-FielSizeX - FrameThickness, -FielSizeY - FrameThickness);
glVertex2f(FielSizeX + FrameThickness, -FielSizeY - FrameThickness);
glVertex2f(FielSizeX + FrameThickness, -FielSizeY);
glVertex2f(-FielSizeX - FrameThickness, -FielSizeY);
glVertex2f(-FielSizeX - FrameThickness, FielSizeY + FrameThickness);
glVertex2f(FielSizeX + FrameThickness, FielSizeY + FrameThickness);
glVertex2f(FielSizeX + FrameThickness, FielSizeY);
glVertex2f(-FielSizeX - FrameThickness, FielSizeY);
glVertex2f(-FielSizeX - FrameThickness, -FielSizeY - FrameThickness);
glVertex2f(-FielSizeX, -FielSizeY - FrameThickness);
glVertex2f(-FielSizeX, FielSizeY + FrameThickness);
glVertex2f(-FielSizeX - FrameThickness, FielSizeY + FrameThickness);
glVertex2f(FielSizeX, -FielSizeY - FrameThickness);
glVertex2f(FielSizeX + FrameThickness, -FielSizeY - FrameThickness);
glVertex2f(FielSizeX + FrameThickness, FielSizeY + FrameThickness);
glVertex2f(FielSizeX, FielSizeY + FrameThickness);
}
void Pong::Scoredrawing(){
glColor3f(0,1,0);
glRasterPos2f(TextPositionX - 50, TextPositionY + 20);
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, '0' + ScoreLeft);
glRasterPos2f(TextPositionX + 30, TextPositionY + 20);
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, '0' + ScoreRight);
if (ScoreLeft == 7) {
glRasterPos2f(TextPositionX - 200, TextPositionY + 30);
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, 'W');
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, 'i');
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, 'n');}
if (ScoreRight == 7) {
glRasterPos2f(TextPositionX - 200, TextPositionY + 30);//Максим
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, 'W');
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, 'i');
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, 'n');
}}
void Pong::Loadtexture()
{
AUX_RGBImageRec *texture1 = auxDIBImageLoadA("test.bmp");
glGenTextures(1, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture1->data);
}
void ball::moveball(){
x += vx;
y += vy;
}
void ball::hittingball()
{
if ((y <= -settings.FielSizeY) || (y >= settings.FielSizeY)) { vy = -vy; }
if ((x <= left.x + settings.ThicknessPlatformі) && (fabs(double(y - left.y)) <= left.size / 2 + fabs(vy))){
vx = -vx;
vy += left.vy;}
if ((x >= right.x - settings.ThicknessPlatformі) && (fabs(double(y - right.y)) <= right.size / 2 + fabs(vy))){
vx = -vx;
vy += right.vy;}
}
void ball::drawing()
{
glColor3f(1, 1, 1);
glVertex2f(x + settings.ThicknessPlatformі, y + settings.BallSize);
glVertex2f(x + settings.ThicknessPlatformі, y - settings.BallSize);
glVertex2f(x - settings.ThicknessPlatformі, y - settings.BallSize);
glVertex2f(x - settings.ThicknessPlatformі, y + settings.BallSize);
}
void hittingball::drawing()
{
glColor3f(0, 1, 1);
glVertex2f(x + settings.BallSize, y + size/2);
glVertex2f(x + settings.BallSize, y - size/2);
glVertex2f(x - settings.BallSize, y - size/2);
glVertex2f(x - settings.BallSize, y + size/2);
}
void hittingball::moveplatform()
{
y += vy;
if(y<-settings.FielSizeY+size/2){
y=-settings.FielSizeY+size/2;
vy=0;
}
if(y>settings.FielSizeY-size/2){
y=settings.FielSizeY-size/2;
vy=0;
}
}
void hittingball::care()
{
if (hold) {
ball.vx = 0;
if (x < 0) {
ball.x = x + 2 * settings.ThicknessPlatformі;}
else
{ ball.x = x - 2 * settings.ThicknessPlatformі;}
ball.vy = vy;
ball.y = y;}//Максим
}
void keyboard(unsigned char key, int x, int y) {
switch(key) {
case 'w':left.Up = true;
break;
case 's':left.Down = true;
break;
case 'e':if (left.hold) {
left.hold = false;
ball.vx = settings.BallSpeedX;}
break;
case 'o':right.Up = true;
break;
case 'l':right.Down = true;
break;
case 'i':if (right.hold) {
right.hold = false;
ball.vx = -settings.BallSpeedX;}
break;
}
}
void keyboardUp(unsigned char key, int x, int y) {
switch (key){
case 'w':left.Up = false;
break;
case 's':left.Down = false;
break;
case 'o':right.Up = false;
break;
case 'l':right.Down = false;
break;}
}
void Timer(int value) {
settings.сhampion();
settings.KeySet();
left.moveplatform();
right.moveplatform();
ball.moveball();
ball.hittingball();
left.care();
right.care();
settings.KeyReset();
glutPostRedisplay();
glutTimerFunc(settings.teak, Timer, 0);
}
void drawing(){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
right.drawing();
left.drawing();
ball.drawing();
settings.drawing();
glEnd();
settings.Scoredrawing();
glutSwapBuffers();
}
int main(int argc, char **argv) {
srand(time(NULL));
settings.ssettingd();
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH |GLUT_RGBA | GLUT_DOUBLE| GLUT_MULTISAMPLE);
glutInitWindowSize(settings.OrthoWidt, settings.OrthoHeight);
glutInitWindowPosition(settings.WindowsXPosition, settings.WindowsYPosition);
glutCreateWindow("Пинг Понг");
glutDisplayFunc(drawing);
glutTimerFunc(settings.teak, Timer, 0);
glutKeyboardFunc(keyboard);
glutKeyboardUpFunc(keyboardUp);
glClearColor(0, 0, 0, 1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-settings.OrthoWidt, settings.OrthoWidt, -settings.OrthoHeight, settings.OrthoHeight);
glutMainLoop();
return (0);
}