valanchik 4 Posted May 8, 2020 (edited) Задача такая: нужно нарисовать 2D проекцию периметра габаритов танка. Отсюда два вопроса: 1. Как получить габаритные размеры модели танка(пусть даже 3D)? 2. Как нарисовать прямоугольник произвольной формы? Edited May 8, 2020 by valanchik Quote Share this post Link to post Short link Share on other sites
valanchik 4 #482135 Posted May 8, 2020 неужели сложный или невыполнимый вопорс? Может чёт уточнить? Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #482139 Posted May 8, 2020 15 часов назад, valanchik сказал: Задача такая: нужно нарисовать 2D проекцию периметра габаритов танка. Отсюда два вопроса: 1. Как получить габаритные размеры модели танка(пусть даже 3D)? 2. Как нарисовать прямоугольник произвольной формы? 1. vehicle.typeDescriptor.hull.hitTester.bbox - массив с координатами габаритов корпуса модели танка 2. Ни как, игра 3D, модели создавайте Quote Share this post Link to post Short link Share on other sites
valanchik 4 #482140 Posted May 8, 2020 (edited) 1 hour ago, StranikS_Scan said: 1. vehicle.typeDescriptor.hull.hitTester.bbox - массив с координатами габаритов корпуса модели танка 2. Ни как, игра 3D, модели создавайте спасибо большое! хоть что-то... Если интересно, то я хочу сделать автоматическую разметку данных для компьютерного зрения. Ручками с видео уже запарился. :) 1 hour ago, StranikS_Scan said: 1. vehicle.typeDescriptor.hull.hitTester.bbox - массив с координатами габаритов корпуса модели танка 2. Ни как, игра 3D, модели создавайте v.typeDescriptor.hull.hitTester.bbox - выдаёт это: ((-0.953349, -0.520142, -3.27106), (0.953349, 0.482166, 2.86672), 3.446629762649536) я так понял что первый массив - это x1,y1,z1, второй x2,y2,z2 а третий элемент что за число? Edited May 8, 2020 by valanchik Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #482248 Posted May 11, 2020 08.05.2020 в 21:20, StranikS_Scan сказал: 2. Ни как, игра 3D, модели создавайте ЕМНИП, есть DebugDrawer с набором примитивов. 1 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #482256 Posted May 11, 2020 4 часа назад, Mixaill сказал: ЕМНИП, есть DebugDrawer с набором примитивов. С ведроидом не перепутал, там как раз такая штука есть DebugDrawer? Quote Share this post Link to post Short link Share on other sites
valanchik 4 #482294 Posted May 12, 2020 (edited) 22 hours ago, StranikS_Scan said: С ведроидом не перепутал, там как раз такая штука есть DebugDrawer? import DebugManager DebugManager.showRectangle2D(groupID, name, start, end, isPixels=False, color=COLORS.DEFAULT) есть такой способ, но в моём случае, что-то нифига не выводит на экран. Пробовал и регистрировать группу и так и сяк, но что-то нифига не реагирует. Может где-то надо переменную окружения какую-нить изменить, что у меня типа дебаг режим? Пробую из ориона по F10 и ещё по теме: v.typeDescriptor.hull.hitTester.bbox - недостаточно. есть такой способ получения точек танка(включая точки bbox) for vehiclePoint in getVisibilityCheckPointsGen(vehicle) .... на выходе 7мь точек. Но мне, чтобы построить вокруг танка парралелепипед - надо ещё знать ширину танка. Кто знает как узнать ширину танка? Edited May 12, 2020 by valanchik Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #482295 Posted May 12, 2020 22 минуты назад, valanchik сказал: есть такой способ, но в моём случае, что-то нифига не выводит на экран. Ну потому что там пусто внутри - тыц. 24 минуты назад, valanchik сказал: на выходе 7мь точек. Но мне, чтобы построить вокруг танка парралелепипед - надо ещё знать ширину танка. Кто знает как узнать ширину танка? Да вы батенька шутник. Обзорные точки по вашему вычисляются без учета ширины танка ))) Quote Share this post Link to post Short link Share on other sites
valanchik 4 #482296 Posted May 12, 2020 (edited) 46 minutes ago, StranikS_Scan said: Да вы батенька шутник. Обзорные точки по вашему вычисляются без учета ширины танка ))) def getVehiclePointsGen(vehicle): vehicleDesr = vehicle.typeDescriptor hullPos = vehicleDesr.chassis.hullPosition hullBboxMin, hullBboxMax, _ = vehicleDesr.hull.hitTester.bbox turretPosOnHull = vehicleDesr.hull.turretPositions[0] turretLocalTopY = max(hullBboxMax.y, turretPosOnHull.y + vehicleDesr.turret.hitTester.bbox[1].y) yield Vector3(0.0, hullPos.y + turretLocalTopY, 0.0) gunPosOnHull = turretPosOnHull + vehicleDesr.turret.gunPosition yield hullPos + gunPosOnHull hullLocalCenterY = (hullBboxMin.y + hullBboxMax.y) / 2.0 hullLocalPt1 = Vector3(0.0, hullLocalCenterY, hullBboxMax.z) yield hullPos + hullLocalPt1 hullLocalPt2 = Vector3(0.0, hullLocalCenterY, hullBboxMin.z) yield hullPos + hullLocalPt2 hullLocalCenterZ = (hullBboxMin.z + hullBboxMax.z) / 2.0 hullLocalPt3 = Vector3(hullBboxMax.x, gunPosOnHull.y, hullLocalCenterZ) yield hullPos + hullLocalPt3 hullLocalPt4 = Vector3(hullBboxMin.x, gunPosOnHull.y, hullLocalCenterZ) yield hullPos + hullLocalPt4 Я даже понимаю, что всё что мне надо по точкам(включая ширину танка), скорее всего можно вывести векторами на примере кода выше. Но это же трындец товарищи. И только потому что я чуть-чуть извращенец в программировании до сих пор пытаюсь добиться своей цели. Пальцем в небо тоже не очень программировать. Просто значение ширины меня бы удовлетворило бы. А тут пока для меня куча неизвестных. 46 minutes ago, StranikS_Scan said: Ну потому что там пусто внутри - тыц. Согласен, но надеялся на чудо :) И ещё.... Все точки корпуса(из семи) находятся в одной плоскости. Точки на башне(кроме верхей по центру) тоже не симметричны. В итоге из полезной инфы: точка по центру башни точка по центру дна корпуса центр переда и зада корпуса. И все эти 4ре точки в одной плоскости. Надо знать ширину танка или ещё какой-то способ узнать габариты корпуса. вот даже наглядно сделал :) точки поднял на 1 унит вверх, чтобы видно было и ещё наглядней Edited May 12, 2020 by valanchik Quote Share this post Link to post Short link Share on other sites
valanchik 4 #482317 Posted May 13, 2020 (edited) Короче я тут подзатупил чуток :) узнал я свою ширину :) cMin, cMax, _ = vehicle.getBounds(TankPartIndexes.CHASSIS) addModel(vehicle, Math.Vector3(vehicle.position.x+cMin.x, vehicle.position.y, vehicle.position.z)) addModel(vehicle, Math.Vector3(vehicle.position.x+cMax.x, vehicle.position.y, vehicle.position.z)) просто чуток подзабыл как с векторами работать :) Edited May 13, 2020 by valanchik 1 Quote Share this post Link to post Short link Share on other sites
valanchik 4 #482335 Posted May 14, 2020 (edited) Полный код получения 8ми точек для построения периметра танка без учета орудия: from Math import Vector3, Matrix from vehicle_systems.tankStructure import TankPartIndexes def printPoints(vehicle): matrix = Matrix(vehicle.matrix) cMin, cMax, _ = vehicle.getBounds(TankPartIndexes.CHASSIS) _, hMax, _ = vehicle.getBounds(TankPartIndexes.HULL) hMax.y+=cMax.y; _, tMax, _ = vehicle.getBounds(TankPartIndexes.TURRET) tMax.y+=hMax.y; cMax.y = tMax.y BACK_LEFT_BOTTOM = matrix.applyVector(cMin)+vehicle.position BACK_LEFT_TOP = matrix.applyVector(Vector3(cMin.x, cMax.y, cMin.z))+vehicle.position BACK_RIGTH_BOTTOM = matrix.applyVector(Vector3(cMax.x, cMin.y, cMin.z))+vehicle.position BACK_RIGTH_TOP = matrix.applyVector(Vector3(cMax.x, cMax.y, cMin.z))+vehicle.position FRONT_RIGTH_TOP = matrix.applyVector(cMax)+vehicle.position FRONT_RIGTH_BOTTOM = matrix.applyVector(Vector3(cMax.x, cMin.y, cMax.z))+vehicle.position FRONT_LEFT_TOP = matrix.applyVector(Vector3(cMin.x, cMax.y, cMax.z))+vehicle.position FRONT_LEFT_BOTTOM = matrix.applyVector(Vector3(cMin.x, cMin.y, cMax.z))+vehicle.position width = BACK_LEFT_TOP.distTo(BACK_RIGTH_TOP) height = BACK_LEFT_TOP.distTo(BACK_LEFT_BOTTOM) length = BACK_LEFT_TOP.distTo(FRONT_LEFT_TOP) это было больно и жестоко, но я это сделал :) Сочувствую вам, мододелы.... Тема закрыта. Edited May 14, 2020 by valanchik 1 Quote Share this post Link to post Short link Share on other sites
valanchik 4 #482577 Posted May 17, 2020 1 Quote Share this post Link to post Short link Share on other sites
SoprachevAK 64 #482619 Posted May 18, 2020 On 5/17/2020 at 1:41 PM, valanchik said: А как ты в итоге рисуешь прямоугольники? или это уже машинное зрение дорисовывает Quote Share this post Link to post Short link Share on other sites