Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2016, 23:06   #1
MHZ-MHZ
 
Регистрация: 30.11.2015
Сообщений: 3
По умолчанию Наложения текстур (OpenGl C++)

Помогите наложить текстуру или на поле или на мяч игры.
Код:
#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);
}

Последний раз редактировалось MHZ-MHZ; 09.02.2016 в 00:34.
MHZ-MHZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenGl Загрузка текстур в массив impulsgraw Мультимедиа в Delphi 9 21.05.2014 00:01
Загрузка текстур в OpenGL ser70 Общие вопросы C/C++ 3 24.08.2013 13:22
Загрузка текстур OpenGL asm _PROGRAMM_ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 13.09.2012 14:50
OpenGL - наложение текстур. Nater Общие вопросы Delphi 0 21.02.2011 20:14
наложение текстур в OpenGL FJFray Мультимедиа в Delphi 1 23.10.2010 12:40