2013-07-30 1 views
0

Я работаю над стратегией в реальном времени, и мне нужно нарисовать прямоугольник выбора на моей кубической местности, основанной на вокселе, как я могу это сделать? Я знаю, что некоторые RTS просто уходят с простым методом 2d/hud/gui/on screen, но мне действительно нравится, как Warcraft 3 делает это на местности.Как проецировать форму на среду/VBO?

Ребята, речь идет не о сборке, а о рендеринге прямоугольника на неровной поверхности нескольких разных блоков. Подобно тому, как сетка отображается в редакторе Warcraft 3: World! http://press2reset.com/wp-content/uploads/2012/02/Warcraft3WorldEditorScreen.jpg

+0

Google for "3d picking". –

+0

@GregPrisament: выбор не имеет ничего общего с проецированием материала на рельеф. –

+0

@NicolBolas: Я согласен, что есть несколько подходов к этому, и выбор может быть не лучшим, но я думаю, что это возможно. Вот что я думал: вы могли бы потенциально использовать сбор, чтобы определить ячейку местности «на клик», а также ячейку местности «мышь». Затем визуализируйте прямоугольную область, ограниченную этими двумя ячейками другого цвета или что угодно. –

ответ

0

Похоже, вы хотите найти пространство экрана выбранного вами трехмерного пространства.

Если это так, то «собирание» будет найти 3d точку, которую вы щелкнули, а затем сделать нормальный MVP * pickedPoint, чтобы попасть в усеченное пространство, разделить на w и, наконец, умножить на вашу ширину окна и высоту, то есть:

vec4 clipSpacePt = ModelviewProjection * pickedPoint 
clipSpacePt.xyz /= clipSpacePt.w; 

vec2 windowSpacePt; 
windowSpacePt.x = clipSpacePt.x * windowWidth; 
windowSpacePt.y = clipSpacePt.y * windowHeight; 

Сделайте это для первой выбранной точки, а также для того, где находится ваш курсор, чтобы получить «проекционный прямоугольник выбора».

Смежные вопросы