Я создал буфер вершин, который содержит вершины для круга в точке (0, 0) с радиусом 2.5.Перевести VertexBuffer
Я хочу нарисовать этот круг, где бы мы ни находились, поэтому я захватил WM_MOUSEMOVE
и сохранил позицию мыши в точке P. Я уже настроил мир, взгляд и проекцию при создании моего окна (мой взгляд на Это хорошо).
После создания окна я сделал:
D3DXMATRIX World, View, Projection;
D3DXVECTOR3 Camera = {0.0f, 0.0f, 10.0f};
D3DXVECTOR3 LookAt = {0.0f, 0.0f, 0.0f};
D3DXVECTOR3 UpVector = {0.0f, 1.0f, 0.0f};
D3DXMatrixIdentity(&World);
D3DXMatrixLookAtLH(&View, &Camera, &LookAt, &UpVector);
D3DXMatrixPerspectiveFovLH(&Projection, D3DXToRadian(45), static_cast<float>(WindowWidth)/static_cast<float>(WindowHeight), 1.0f, 100.0f);
d3ddevice->SetTransform(D3DTS_WORLD, &World);
d3ddevice->SetTransform(D3DTS_VIEW, &View);
d3ddevice->SetTransform(D3DTS_PROJECTION, &Projection);
Чтобы сделать буфер вершин, что я делаю:
void DrawFilledCircle(float mx, float my, float r, D3DCOLOR colour)
{
if (!vertexbuffer)
{
CreateVertexBuffer_FilledCircle(mx, my, r, colour, 10); //perfectly fine.
}
d3ddevice->SetFVF(VERTEX_FVF_TEX);
d3ddevice->SetStreamSource(0, vertexbuffer, 0, sizeof(D3DVertex));
d3ddevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 0, 10 - 2);
}
void RenderD3D()
{
d3ddevice->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_RGBA(0, 40, 100, 255), 1.0f, 0);
d3ddevice->BeginScene();
D3DXMATRIX World;
D3DXMatrixIdentity(&World);
D3DXMatrixTranslation(&World, P.x, P.y, 0);
d3ddevice->SetTransform(D3DTS_WORLD, &World);
DrawFilledCircle(P.x, P.y, 2.5, D3DCOLOR_RGBA(0xFF, 0x00, 0x00, 0xFF));
d3ddevice->EndScene();
d3ddevice->Present(nullptr, nullptr, nullptr, nullptr);
}
Однако, преобразования не происходит. Мой круг рисуется хорошо, но он все еще нарисован на (0, 0)
.
Любые идеи, почему мои преобразования не применяются?
Вы проверили в отладчике, что ваша позиция мыши 'P' содержит действительные данные вашей текущей позиции? Вы можете попытаться установить значение P на произвольное значение, чтобы проверить, где находится проблема: код чертежа или позиция. – Gnietschow
Да Я проверил, что значение P содержит действительные данные. Он содержит (0, 0) в начале и по мере того, как я перемещаю мышь, он точно обновляется. – Brandon
Одна из проблем, которые я вижу (хотя я думаю, что это не основная причина, а всего лишь фактор содействия) - это отображение от пикселей к мировым единицам , Я думаю, 'P' измеряется в пикселях. Чтобы круг мог следовать за мышью, вам нужно будет перевести эти значения в мировые единицы (на основе преобразования перспективы). На какой глубине вы рисуете круг? Может быть, он движется, но так мало, что вы не можете его распознать? Вы обязательно переделаете сцену, верно? –