我成功地將Box2D安裝到我的項目中。但是我怎樣才能渲染一個身體?假設我正在使用支持繪製多邊形的東西。我只是想找出身體 - 多邊形頂點的當前位置,用引擎繪製它。Box2D:如何手動渲染一個物體
如果你能幫助我,我會非常感激。
我成功地將Box2D安裝到我的項目中。但是我怎樣才能渲染一個身體?假設我正在使用支持繪製多邊形的東西。我只是想找出身體 - 多邊形頂點的當前位置,用引擎繪製它。Box2D:如何手動渲染一個物體
如果你能幫助我,我會非常感激。
我發現了!
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;
}
}
}
Box2D manual refers to a HelloWorld project捆綁在下載中。同樣的文檔也一步一步地通過它。引述手冊:
程序 創建一個大型地面盒和一個小 動箱。此代碼不包含任何圖形,其中 包含任何圖形。所有你會看到的 是隨着時間的推移在 框的位置控制檯的文本輸出。
如果你沒有一個矩形工作,這應該有助於你開始。
你應該用世界 - > SetDebugDraw(& myDebugDraw),並設置相應的圖紙標誌渲染物理世界的各個方面(形狀,關節,重心等)水彩標誌設置通過myDebugDraw.SetDebugFlags(標誌)。
myDebugDraw是b2Draw的一個實例(b2DebugDraw版本2.1.2及以前版本),大多數「平臺」都有一個可用的實現。在渲染回調期間,使用World-> DrawDebugData(),並通過myDebugData實例繪製適當的內容。
希望這不是因爲帖子的簡短而令人困惑。所有這些都包含在Box2d文檔中。
感謝您的回答。但正如你所看到的,這個問題已經有1.5年曆史了。我現在已經很熟悉SDL,OpenGL和Box2D。 – 2011-12-20 22:47:25