Как создать модель с нуля - PullRequest
       40

Как создать модель с нуля

1 голос
/ 11 декабря 2011

Я работаю над созданием ландшафта для нашего проекта, что-то, что будет содержаться в классе Model, который я могу нарисовать, но у меня с новым классом все будет в порядке, поскольку мне, возможно, придется часто заглядывать в конкретные данные, а потом япросто нужна базовая функция для работы с классом Game.Во всяком случае, у меня есть достаточное количество знаний о платформе XNA, но из-за того, насколько запутанной она справляется с чем угодно.Поэтому моя проблема в том, что я не могу просто создать модель, не могу создать экземпляр этого класса или что-то еще.У меня есть то, что я считаю правильными данными для формирования геометрии модели, и это все, что мне нужно сейчас, а позже, возможно, ее текстурирование.Я не знаю, куда идти отсюда.

XNA вы обычно используете Content.Load, чтобы их конвейер контента читал в файле и анализировал его специально, но я хочу этого избежать, потому что я хочу свою местностьгенерироваться.Я могу вычислить массив данных и индексов Vertex для треугольников, которые я хочу составить, но пока что мои попытки попытаться создать экземпляр любого объекта, такого как Model или содержащихся в нем, потерпели неудачу.Если есть какой-то фабричный класс, который я могу использовать для его создания, я понятия не имею, что это такое, поэтому, если кто-то еще может указать мне правильное направление и дать мне приблизительное представление о том, как построить модель, это поможет.Если это не ответ, может быть, мне нужно сделать что-то совершенно другое, сосредоточенное на использовании Content.Load или нет, но в основном я не хочу, чтобы моя местность находилась в файле, согласованном между выполнениями, я хочу контролировать данные сеткипри загрузке и рандомизации и т. д.

Итак, как я могу получить модель, сгенерированную полностью программно, чтобы она отображалась на экране и при этом оставалась открытой для отображения данных?

1 Ответ

4 голосов
/ 11 декабря 2011

Model и связанные с ним классы (например: ModelMesh) являются вспомогательными классами.Они не единственный способ рисовать модели.Ожидается, что иногда, особенно когда вы делаете что-то «особенное», вам придется заново их полностью реализовывать, используя те же низкоуровневые методы, которые использует Model.

Вот краткая версия того, что выдолжен сделать:

Прежде всего, во время загрузки создайте VertexBuffer и IndexBuffer и используйте SetData для каждого из них, чтобы заполнить каждый соответствующими данными.

Затем,во время розыгрыша сделайте это:

GraphicsDevice.SetVertexBuffer(myVertexBuffer);
GraphicsDevice.Indices = myIndexBuffer;

// Set up your effect. Use a BasicEffect here, if you don't have something else.
myEffect.CurrentTechnique.Passes[0].Apply();

GraphicsDevice.Textures[0] = myTexture; // From Content.Load<Texture2D>("...")

GraphicsDevice.DrawIndexedPrimitives(...);
...