我成功将Box2D安装到我的项目中。但是我怎么能渲染一个身体呢?假设我正在使用支持绘制多边形的东西。我只想找出身体多边形顶点的当前位置,用引擎绘制它。
如果你能帮助我,我将非常感激。
答案 0 :(得分:3)
我找到了!!!
void Box2DUtils::DrawBody(SDL_Surface *buffer, b2Body *body, int fr, int fg, int fb, int falpha, int lr, int lg, int lb, int lalpha, bool aa)
{
const b2Transform& xf = body->GetTransform();
for (b2Fixture* f = body->GetFixtureList(); f; f = f->GetNext())
{
switch (f->GetType())
{
case b2Shape::e_circle:
{
b2CircleShape* circle = (b2CircleShape*) f->GetShape();
b2Vec2 center = b2Mul(xf, circle->m_p);
float32 radius = circle->m_radius;
b2Vec2 axis = xf.R.col1;
//m_debugDraw->DrawSolidCircle(center, radius, axis, color);
if (falpha > 0)
{
filledCircleRGBA(buffer, center.x, center.y, (int) radius, fr, fg, fb, falpha);
}
if (lalpha > 0)
{
if (aa)
{
aacircleRGBA(buffer, center.x, center.y, (int) radius, lr, lg, lb, lalpha);
} else
{
aacircleRGBA(buffer, center.x, center.y, (int) radius, lr, lg, lb, lalpha);
}
} else if (aa)
{
aacircleRGBA(buffer, center.x, center.y, (int) radius, fr, fg, fb, falpha);
}
}
break;
case b2Shape::e_polygon:
{
b2PolygonShape* poly = (b2PolygonShape*) f->GetShape();
int32 vertexCount = poly->m_vertexCount;
b2Assert(vertexCount <= b2_maxPolygonVertices);
b2Vec2 vertices[b2_maxPolygonVertices];
Sint16 xv[b2_maxPolygonVertices];
Sint16 yv[b2_maxPolygonVertices];
for (int32 i = 0; i < vertexCount; ++i)
{
vertices[i] = b2Mul(xf, poly->m_vertices[i]);
xv[i] = (int) vertices[i].x;
yv[i] = (int) vertices[i].y;
}
if (falpha > 0)
{
filledPolygonRGBA(buffer, xv, yv, (Sint16) vertexCount, fr, fg, fb, falpha);
}
if (lalpha > 0)
{
if (aa)
{
aapolygonRGBA(buffer, xv, yv, (Sint16) vertexCount, lr, lg, lb, lalpha);
} else
{
polygonRGBA(buffer, xv, yv, (Sint16) vertexCount, lr, lg, lb, lalpha);
}
} else if (aa)
{
aapolygonRGBA(buffer, xv, yv, (Sint16) vertexCount, fr, fg, fb, falpha);
}
//m_debugDraw->DrawSolidPolygon(vertices, vertexCount, color);
}
break;
}
}
}
答案 1 :(得分:2)
下载中捆绑的Box2D manual refers to a HelloWorld project。同样的文档也是一步一步完成的。引用手册:
该计划 创造一个大的地箱和一个小的 动态框。这段代码没有 包含任何图形。所有你会看到 是控制台中的文本输出 盒子随时间的位置。
如果你没有工作的矩形,这应该可以帮助你开始。
答案 2 :(得分:0)
你应该使用World-&gt; SetDebugDraw(&amp; myDebugDraw)并设置适当的绘图标志来渲染物理世界的各个方面(形状,关节,重心等)。绘图标志通过myDebugDraw设置。 SetDebugFlags(标志)。
myDebugDraw是b2Draw的实例(版本2.1.2和之前版本中的b2DebugDraw),大多数“平台”都有一个现成的实现。在渲染回调期间,使用World-&gt; DrawDebugData(),相应的内容将通过myDebugData实例绘制。
希望这不是因为帖子的短缺而引起的混淆。所有这些都包含在Box2d文档中。