powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с OpenGl и Box2d
3 сообщений из 3, страница 1 из 1
Проблема с OpenGl и Box2d
    #38024767
flytracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста что я не так сделал што у меня DrawSolidPolygon выводит полыгон не там где надо, но DrawSolidCircle выводи
круги правильно.

Код: plaintext
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.
void DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color, b2Vec2 center)
{
	glEnable(GL_BLEND);
	glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glColor4f(0.5f * color.r, 0.5f * color.g, 0.5f * color.b, 0.5f);
	
	glBegin(GL_TRIANGLE_FAN);
	for (int32 i = 0; i < vertexCount; ++i)
	{
		glVertex2f(center.x + vertices[i].x * M2P, center.y + vertices[i].y * M2P);
	}
	glEnd();
	glDisable(GL_BLEND);

	glColor4f(color.r, color.g, color.b, 1.0f);
	glBegin(GL_LINE_LOOP );
	for (int32 i = 0; i < vertexCount; ++i)
	{
		glVertex2f(center.x + vertices[i].x * M2P, center.y + vertices[i].y * M2P);
	}
	glEnd();
}

void DrawSolidCircle(const b2Vec2& center, float32 radius, const b2Vec2& axis, const b2Color& color)
{
	const float32 k_segments = 16.0f;
	const float32 k_increment = 2.0f * b2_pi / k_segments;
	float32 theta = 0.0f;
	glEnable(GL_BLEND);
	glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glColor4f(0.5f * color.r, 0.5f * color.g, 0.5f * color.b, 0.5f);
	glBegin(GL_TRIANGLE_FAN );
	for (int32 i = 0; i < k_segments; ++i)
	{
		b2Vec2 v = center + radius * b2Vec2(cosf(theta), sinf(theta));
		glVertex2f(v.x  * M2P, v.y  * M2P);
		theta += k_increment;
	}
	glEnd();
	glDisable(GL_BLEND);

	theta = 0.0f;
	glColor4f(color.r, color.g, color.b, 1.0f);
	glBegin(GL_LINE_LOOP );
	for (int32 i = 0; i < k_segments; ++i)
	{
		b2Vec2 v = center + radius * b2Vec2(cosf(theta), sinf(theta));
		glVertex2f(v.x * M2P, v.y * M2P);
		theta += k_increment;
	}
	glEnd();

	b2Vec2 p = center + radius * axis;
	glBegin(GL_LINES);
	glVertex2f(center.x  * M2P, center.y  * M2P);
	glVertex2f(p.x  * M2P, p.y  * M2P);
	glEnd();
}




...
Рейтинг: 0 / 0
Проблема с OpenGl и Box2d
    #38024772
flytracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
От так но далжно быть.


Самае главное то што box2d всьо делает правельно, потому што круг отбиваетса в правильном месте от обекта земли.
...
Рейтинг: 0 / 0
Проблема с OpenGl и Box2d
    #38033414
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 flytracer:

flytracer
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void DrawSolidPolygon(...)
{
	...
		glVertex2f(center.x + vertices[i].x * M2P, center.y + vertices[i].y * M2P);
	...
}

void DrawSolidCircle(...)
{
	...
		b2Vec2 v = center + radius * b2Vec2(cosf(theta), sinf(theta));
		glVertex2f(v.x  * M2P, v.y  * M2P);
	...
}



Ну, если уж DrawSolidCircle рисует правильно, то тогда по аналогии в DrawSolidPolygon можно попробовать:
Код: plaintext
1.
glVertex2f((center.x + vertices[i].x) * M2P, (center.y + vertices[i].y) * M2P);



Кстати, домножение всех координат на M2P можно переложить на плечи OpenGL:
Код: plaintext
1.
2.
3.
4.
5.
glScalef(M2P, M2P, 1); // когда matrix mode = GL_MODELVIEW
...
glVertex2f(center.x + vertices[i].x, center.y + vertices[i].y); // уже без M2P
...
glVertex2f(v.x, v.y); // уже без M2P
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с OpenGl и Box2d
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]