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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2024, 18:30   #1
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 169
По умолчанию Не поддерживаются функции OpenGl

В рассматриваемом примере использовалась библиотека GL/glut.h , у меня использовалась библиотека gl/GLU.h.С ней не поддерживаются функции OPENGL,что делать?
Код:
#include<math.h>
#include<stdio.h>
#include<gl/GLU.h>

#define res 1
#define SW 160*res
#define SH 120*res
#define SW2 (SW/2)
#define SH2 (SH/2)
#define pixelScale 4/res
#define GLSW (SW*pixelscale)
#define GLSH (SH*pixelScale)

typedef struct
{
	int fr1, fr2;
}time; time T;

typedef struct
{
	float cos[360];
	float sin[360];
}math; math M;

typedef struct
{
	int w, s, a, d;
	int sl, sr;
	int m;
}keys; keys K;

typedef struct
{
	int x, y, z;
	int a;
	int l;
}player; player P;

void pixel(int x, int y, int c)
{
	int rgb[3];
	if (c == 0) { rgb[0] = 255; rgb[1] = 255; rgb[2] = 0; }
	if (c == 1) { rgb[0] = 160; rgb[1] = 160; rgb[2] = 0; }
	if (c == 2) { rgb[0] = 0; rgb[1] = 255; rgb[2] = 0; }
	if (c == 3) { rgb[0] = 0; rgb[1] = 160; rgb[2] = 0; }
	if (c == 4) { rgb[0] = 0; rgb[1] = 255; rgb[2] = 255; }
	if (c == 5) { rgb[0] = 0; rgb[1] = 160; rgb[2] = 160; }
	if (c == 6) { rgb[0] = 160; rgb[1] = 100; rgb[2] = 0; }
	if (c == 7) { rgb[0] = 110; rgb[1] = 50; rgb[2] = 0; }
	if (c == 8) { rgb[0] = 0; rgb[1] = 60; rgb[2] = 130; }

	glColor3ub(rgb[0], rgb[1], rgb[2]);
	glBegin(GL_POINTS);
	glVertex2i(x * pixelScale + 2, y * pixelScale + 2);
	glEnd();
}

void movePlayer()
{
	if (K.a == 1 && K.m == 0) { P.a -= 4; if (P.a < 0) { P.a += 360; } }
	if (K.d == 1 && K.m == 0) { P.a += 4; if (P.a > 359) { P.a -= 360; } }

	int dx = M.sin[P.a] * 10;
	int dy = M.cos[P.a] * 10;

	if (K.w == 1 && K.m == 0) { P.x += dx; P.y += dy; }
	if (K.s == 1 && K.m == 0) { P.x -= dx; P.y -= dy; }

	if (K.sr == 1) { P.x += dy; P.y -= dx; }
	if (K.sl == 1) { P.x -= dy; P.y += dx; }

	if (K.a == 1 && K.m == 1) { P.l -= 1; }
	if (K.d == 1 && K.m == 1) { P.l += 1; }
	if (K.w == 1 && K.m == 1) { P.z -= 4; }
	if (K.s == 1 && K.m == 1) { P.z += 4; }
}


void clearBackground()
{
	int x, y;
	for (y = 0; y < SH; y++)
	{
		for (x = 0; x < SW; x++) { pixel(x, y, 8); }
	}

}

void drawWall(int x1, int x2, int b1, int b2, int t1, int t2)
{
	int x, y;
	int dyb = b2 - b1;
	int dyt = t2 - t1;
	int dx = x2 - x1;

	if (dx == 0) dx = 1;

	int xs = x1;

	if (x1 < 1) { x1 = 1; }
	if (x2 < 1) { x2 = 1; }
	if (x1 > SW - 1) { x1 = SW - 1; }
	if (x2 > SW - 1) { x2 = SW - 1; }

	for (x = x1; x < x2; x++)
	{
		int y1 = dyb * (x - xs + 0.5) / dx + b1;
		int y2 = dyt * (x - xs + 0.5) / dx + t1;

		if (y1 < 1) { y1 = 1; }
		if (y2 < 1) { y2 = 1; }
		if (y1 > SH - 1) { y1 = SH - 1; }
		if (y2 > SH - 1) { y2 = SH - 1; }

		for (y = y1; y < y2; y++)
		{
			pixel(x, y, 0);
		}
	}
}

void draw3D()
{
	int wx[4], wy[4], wz[4];
	float CS = M.cos[P.a], SN = M.sin[P.a];

	int x1 = 40 - P.x;
	int x2 = 40 - P.x;
	int y1 = 10 - P.y;
	int y2 = 290 - P.y;

	wx[0] = x1 * CS - y1 * SN;
	wx[1] = x2 * CS - y2 * SN;;
	wx[2] = wx[0];
	wx[3] = wx[1];

	wy[0] = y1 * CS + x1 * SN;
	wy[1] = y2 * CS + x2 * SN;
	wy[2] = wy[0];
	wy[3] = wy[1];

	wz[0] = 0 - P.z + ((P.l * wy[0]) / 32.0);
	wz[1] = 0 - P.z + ((P.l * wy[1]) / 32.0);
	wz[2] = wz[0] + 40;
	wz[3] = wz[1] + 40;

	wx[0] = wx[0] * 200 / wy[0] + SW2;
	wx[1] = wx[1] * 200 / wy[1] + SW2;
	wx[2] = wx[2] * 200 / wy[2] + SW2;
	wx[3] = wx[3] * 200 / wy[3] + SW2;

	wy[0] = wz[0] * 200 / wy[0] + SH2;
	wy[1] = wz[1] * 200 / wy[1] + SH2;
	wy[2] = wz[2] * 200 / wy[2] + SH2;
	wy[3] = wz[3] * 200 / wy[3] + SH2;


	drawWall(wx[0], wx[1], wy[0], wy[1], wy[2], wy[3]);

}

void display()
{
	int x, y;
	if (T.fr1 - T.fr2 >= 50)
	{
		clearBackground();
		movePlayer();
		draw3D();
		T.fr2 = T.fr1;
		glutSwapBuffers();
		glutReshapeWindow(GLSW, GLSH);
	}

	T.fr1 = glutGet(GLUT_ELAPSED_TIME);
	printf(" %i\n", glutGet(GLUT_ELAPSED_TIME) / 1000);
	glutPostRedisplay();
}


void KeysDown(unsigned char key, int x, int y)
{
	if (key == 'w' == 1) { K.w = 1; }
	if (key == 's' == 1) { K.s = 1; }
	if (key == 'a' == 1) { K.a = 1; }
	if (key == 'd' == 1) { K.d = 1; }
	if (key == 'm' == 1) { K.m = 1; }
	if (key == ',' == 1) { K.sr = 1; }
	if (key == '.' == 1) { K.sl = 1; }

}

void KeysUp(unsigned char key, int x, int y)
{

	if (key == 'w' == 1) { K.w = 0; }
	if (key == 's' == 1) { K.s = 0; }
	if (key == 'a' == 1) { K.a = 0; }
	if (key == 'd' == 1) { K.d = 0; }
	if (key == 'm' == 1) { K.m = 0; }
	if (key == ',' == 1) { K.sr = 0; }
	if (key == '.' == 1) { K.sl = 0; }
}

void init()
{
	int x;
	for (x = 0; x < 360; x++)
	{
		M.cos[x] = cos(x / 180 * M_PI);
		M.sin[x] = sin(x / 180 * M_PI);
	}

	P.x = 70;
	P.y = -110;
	P.z = 20;
	P.a = 0;
	P.l = 0;
}

int main(int argc, char* argv[])
{
	glutInit(&argc, &argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
	glutInitWindowPosition(GLSW / 2, GLSH / 2);
	glutInitWindowSize(GLSW, GLSH);
	glutCreateWindow(" ");
	glPointSize(pixelScale);
	glOrtho2D(0, GLSW, 0, GLSH);
	init();
	glutDisplayFunc(display);
	glutKeyboardFunc(KeysDown);
	glutKeyboardFunc(KeysUp);
	glutMainLoop();

	return 0;
}
Вложения
Тип файла: rar doom.rar (8.5 Кб, 4 просмотров)

Последний раз редактировалось BDA; 04.04.2024 в 19:24.
Timurkh77 вне форума Ответить с цитированием
Старый 01.04.2024, 19:14   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,773
По умолчанию

Если используете виндовые либы, то перед подключайте Windows.h. Но лучше берите инклуды от драйверных сдк.
p51x вне форума Ответить с цитированием
Старый 02.04.2024, 19:48   #3
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 169
По умолчанию

Откуда взять библиотеки OpenGL и как их присоединить?
Timurkh77 вне форума Ответить с цитированием
Старый 02.04.2024, 20:42   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,773
По умолчанию

Виндовые есть в винсдк. От производителей драйверов в их сдк.
p51x вне форума Ответить с цитированием
Старый 03.04.2024, 17:28   #5
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 169
По умолчанию

Установил OpenGl , все функции поддерживаются.Осталась одна ошибка не поддерживается константа пи.Выдает ошибку , что не поддерживается константа M_PI.Что делать?

#include<math.h>
#include<stdio.h>
#include<glut.h>

#define res 1
#define SW 160*res
#define SH 120*res
#define SW2 (SW/2)
#define SH2 (SH/2)
#define pixelScale 4/res
#define GLSW (SW*pixelScale)
#define GLSH (SH*pixelScale)

typedef struct
{
int fr1, fr2;
}time; time T;

typedef struct
{
float cos[360];
float sin[360];
}math; math M;

typedef struct
{
int w, s, a, d;
int sl, sr;
int m;
}keys; keys K;

typedef struct
{
int x, y, z;
int a;
int l;
}player; player P;

void pixel(int x, int y, int c)
{
int rgb[3];
if (c == 0) { rgb[0] = 255; rgb[1] = 255; rgb[2] = 0; }
if (c == 1) { rgb[0] = 160; rgb[1] = 160; rgb[2] = 0; }
if (c == 2) { rgb[0] = 0; rgb[1] = 255; rgb[2] = 0; }
if (c == 3) { rgb[0] = 0; rgb[1] = 160; rgb[2] = 0; }
if (c == 4) { rgb[0] = 0; rgb[1] = 255; rgb[2] = 255; }
if (c == 5) { rgb[0] = 0; rgb[1] = 160; rgb[2] = 160; }
if (c == 6) { rgb[0] = 160; rgb[1] = 100; rgb[2] = 0; }
if (c == 7) { rgb[0] = 110; rgb[1] = 50; rgb[2] = 0; }
if (c == 8) { rgb[0] = 0; rgb[1] = 60; rgb[2] = 130; }

glColor3ub(rgb[0], rgb[1], rgb[2]);
glBegin(GL_POINTS);
glVertex2i(x * pixelScale + 2, y * pixelScale + 2);
glEnd();
}

void movePlayer()
{
if (K.a == 1 && K.m == 0) { P.a -= 4; if (P.a < 0) { P.a += 360; } }
if (K.d == 1 && K.m == 0) { P.a += 4; if (P.a > 359) { P.a -= 360; } }

int dx = M.sin[P.a] * 10;
int dy = M.cos[P.a] * 10;

if (K.w == 1 && K.m == 0) { P.x += dx; P.y += dy; }
if (K.s == 1 && K.m == 0) { P.x -= dx; P.y -= dy; }

if (K.sr == 1) { P.x += dy; P.y -= dx; }
if (K.sl == 1) { P.x -= dy; P.y += dx; }

if (K.a == 1 && K.m == 1) { P.l -= 1; }
if (K.d == 1 && K.m == 1) { P.l += 1; }
if (K.w == 1 && K.m == 1) { P.z -= 4; }
if (K.s == 1 && K.m == 1) { P.z += 4; }
}


void clearBackground()
{
int x, y;
for (y = 0; y < SH; y++)
{
for (x = 0; x < SW; x++) { pixel(x, y, 8); }
}

}

void drawWall(int x1, int x2, int b1, int b2, int t1, int t2)
{
int x, y;
int dyb = b2 - b1;
int dyt = t2 - t1;
int dx = x2 - x1;

if (dx == 0) dx = 1;

int xs = x1;

if (x1 < 1) { x1 = 1; }
if (x2 < 1) { x2 = 1; }
if (x1 > SW - 1) { x1 = SW - 1; }
if (x2 > SW - 1) { x2 = SW - 1; }

for (x = x1; x < x2; x++)
{
int y1 = dyb * (x - xs + 0.5) / dx + b1;
int y2 = dyt * (x - xs + 0.5) / dx + t1;

if (y1 < 1) { y1 = 1; }
if (y2 < 1) { y2 = 1; }
if (y1 > SH - 1) { y1 = SH - 1; }
if (y2 > SH - 1) { y2 = SH - 1; }

for (y = y1; y < y2; y++)
{
pixel(x, y, 0);
}
}
}

void draw3D()
{
int wx[4], wy[4], wz[4];
float CS = M.cos[P.a], SN = M.sin[P.a];

int x1 = 40 - P.x;
int x2 = 40 - P.x;
int y1 = 10 - P.y;
int y2 = 290 - P.y;

wx[0] = x1 * CS - y1 * SN;
wx[1] = x2 * CS - y2 * SN;;
wx[2] = wx[0];
wx[3] = wx[1];

wy[0] = y1 * CS + x1 * SN;
wy[1] = y2 * CS + x2 * SN;
wy[2] = wy[0];
wy[3] = wy[1];

wz[0] = 0 - P.z + ((P.l * wy[0]) / 32.0);
wz[1] = 0 - P.z + ((P.l * wy[1]) / 32.0);
wz[2] = wz[0] + 40;
wz[3] = wz[1] + 40;

wx[0] = wx[0] * 200 / wy[0] + SW2;
wx[1] = wx[1] * 200 / wy[1] + SW2;
wx[2] = wx[2] * 200 / wy[2] + SW2;
wx[3] = wx[3] * 200 / wy[3] + SW2;

wy[0] = wz[0] * 200 / wy[0] + SH2;
wy[1] = wz[1] * 200 / wy[1] + SH2;
wy[2] = wz[2] * 200 / wy[2] + SH2;
wy[3] = wz[3] * 200 / wy[3] + SH2;


drawWall(wx[0], wx[1], wy[0], wy[1], wy[2], wy[3]);

}

void display()
{
int x, y;
if (T.fr1 - T.fr2 >= 50)
{
clearBackground();
movePlayer();
draw3D();
T.fr2 = T.fr1;
glutSwapBuffers();
glutReshapeWindow(GLSW, GLSH);
}

T.fr1 = glutGet(GLUT_ELAPSED_TIME);
printf(" %i\n", glutGet(GLUT_ELAPSED_TIME) / 1000);
glutPostRedisplay();
}


void KeysDown(unsigned char key, int x, int y)
{
if (key == 'w' == 1) { K.w = 1; }
if (key == 's' == 1) { K.s = 1; }
if (key == 'a' == 1) { K.a = 1; }
if (key == 'd' == 1) { K.d = 1; }
if (key == 'm' == 1) { K.m = 1; }
if (key == ',' == 1) { K.sr = 1; }
if (key == '.' == 1) { K.sl = 1; }

}

void KeysUp(unsigned char key, int x, int y)
{

if (key == 'w' == 1) { K.w = 0; }
if (key == 's' == 1) { K.s = 0; }
if (key == 'a' == 1) { K.a = 0; }
if (key == 'd' == 1) { K.d = 0; }
if (key == 'm' == 1) { K.m = 0; }
if (key == ',' == 1) { K.sr = 0; }
if (key == '.' == 1) { K.sl = 0; }
}

void init()
{
int x;
for (x = 0; x < 360; x++)
{
M.cos[x] = cos(x / 180 * M_PI);
M.sin[x] = sin(x / 180 * M_PI);
}

P.x = 70;
P.y = -110;
P.z = 20;
P.a = 0;
P.l = 0;
}

int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(GLSW / 2, GLSH / 2);
glutInitWindowSize(GLSW, GLSH);
glutCreateWindow(" ");
glPointSize(pixelScale);
gluOrtho2D(0, GLSW, 0, GLSH);
init();
glutDisplayFunc(display);
glutKeyboardFunc(KeysDown);
glutKeyboardFunc(KeysUp);
glutMainLoop();

return 0;
}
Вложения
Тип файла: rar doom.rar (14.2 Кб, 3 просмотров)
Timurkh77 вне форума Ответить с цитированием
Старый 03.04.2024, 17:50   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,773
По умолчанию

Код:
#define _USE_MATH_DEFINES
Сделать перед подключением математики
p51x вне форума Ответить с цитированием
Старый 03.04.2024, 19:23   #7
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 169
По умолчанию

Сделал включение , теперь поддерживает константу.
Но выдается линковская ошибка , что не считывается файл glut32.lib.
Я делал следующее , скачал файлы:
glut.dll
glut.h
glut.lib
glut32.dll
glut32.lib
Файлы glut.dll и glut32.dll скачал в папку C:\WINDOWS\SYSWOW64
Файл glut.h в папку Programs Files \Microsoft Visual Studio \...\14.35.32215 в каталог include
Файлы glut.lib и glut32.lib в папку ...\14.35.32215 в каталог lib
Но у меня в каталоге lib есть еще три папки:
onecore
x64
x86
Я не знаю , правильно ли я сделал.
Почему-то не поддерживается библиотека glut32.lib.
Что делать?
Timurkh77 вне форума Ответить с цитированием
Старый 03.04.2024, 20:56   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,773
По умолчанию

Выкинуть glut, который уже лет 20 не поддерживается, или хотя бы заменить на freeglut.
Не захломлять виндовые и компиляторные папки.
Определиться под какую разрядность вы компилируете.
Проверить настройки проекта и указана ли там либа.
p51x вне форума Ответить с цитированием
Старый 04.04.2024, 18:18   #9
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 169
По умолчанию

Библиотека glut.h из примера.Установил библиотеки из youtube-овского примера , как установить OpenGL для Visual Studio.В свойствах программного файла установил ссылку на библиотеки opengl32.lib,glut32.lib,glu32.lib.Н е пойму почему не поддерживается glut32.lib?
Timurkh77 вне форума Ответить с цитированием
Старый 10.04.2024, 19:54   #10
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 169
По умолчанию

Ошибка:пишет не удается открыть файл glut32.lib.Что делать?
Timurkh77 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика в Delphi средствами OpenGL?? Нужна объяснить функции artiom4356 Общие вопросы Delphi 2 01.08.2014 10:23
Как и где узнать все функции и процедуры OpenGL(желательно на Delphi) artiom4356 Общие вопросы Delphi 4 01.08.2014 10:10
Qt+OpenGL. Qt "не видит" функции OpenGL EnterFix Qt и кроссплатформенное программирование С/С++ 4 29.01.2013 18:59
Использование функции чужого приложения/OpenGL coNsept Общие вопросы C/C++ 7 31.12.2010 16:15