Создание объекта с привязкой к мировым координатам из любого вьюпорта. |
Home· Статьи · Вакансии · Чертежи · 3D Галерея · 2D Галерея · Форум · Форум Realtime | Реклама |  Конкурсы | RAR Award | Правила |
Здравствуйте, гость ( Вход | Регистрация )
Создание объекта с привязкой к мировым координатам из любого вьюпорта. |
03/01/2012, 19:23
Сообщение
#1
|
|
Мастер Группа: Пользователи Сообщений: 1 466 Регистрация: 03/01/2012 Из: Воронеж Пользователь №: 85 109 |
Я только начал изучать maxscript. Сейчас пытаюсь создать инструмент, который бы создавал плейн, нормалями повернутый в сторону оси минус Z. Мой скрипт работает правильно только тогда, когда Я создаю плэйн из перспективы или из топа. В других вьюпортах плэйн создается по сетке вьюпорта и при создании повернут не так, как мне нужно - то есть не параллельно плоскости XY и не нормалями в сторону -Z.
В общем, как сделать так, чтобы из любого вьюпорта мой плэйн создавался параллельно плоскости XY и нормалями в сторону -Z? CODE plugin simpleObject game2D_sprite_def
name: "2D Sprite" classID:#(0x3631913e, 0x42e0cb8a) category: "2D Game Objects" ( local sprite2d local max_x = 1024 local max_y = 768 fn ResetObjRot = ( $.rotation = ( quat 0 0 0 1 ) print "Reset rotation..." ) parameters main rollout:param ( size_x type:#integer ui:size_x default:0 size_y type:#integer ui:size_y default:0 ) rollout param "Properties" ( spinner size_x "Size of X" type:#integer range:[0,max_x,0] spinner size_y "Size of Y" type:#integer range:[0,max_y,0] button reset_btn "Reset rot." on reset_btn pressed do ( ResetObjRot() ) ) on buildMesh do ( -- vertices, faces and texture coords v = #( [ -size_x / 2, -size_y / 2, 0], [ size_x / 2, -size_y / 2, 0], [ -size_x / 2, size_y / 2, 0], [ size_x / 2, size_y / 2, 0] ) f = #( [1,3,2], [2,3,4] ) t = #( [0, 1, 0], [ 1, 1, 0], [ 0, 0, 0], [ 1, 0, 0] ) -- build mesh and texture space setMesh mesh vertices:v faces:f tverts:t buildTVFaces mesh for i = 1 to mesh.numfaces do ( setTVFace mesh i ( getFace mesh i ) ) --print "buildMesh" ) tool create ( on mousePoint click do ( case click of ( 1: ( --print "mousePoint_1" nodeTM.translation = gridPoint ) 2: ( --print "mousePoint_3" if ( viewport.getType() != #view_bottom ) do ( viewport.setType #view_bottom ) #stop ) ) ) on mouseMove click do ( case click of ( 2: ( --print "mouseMove_3" size_x = 2 * abs gridDist.x as integer if ( size_x > max_x ) do ( size_x = max_x ) size_y = 2 * abs gridDist.y as integer if ( size_y > max_y ) do ( size_y = max_y ) ) ) ) ) ) Сообщение отредактировал ProcXel.A - 03/01/2012, 19:25 |
|
|
03/01/2012, 22:55
Сообщение
#2
|
|
Мастер Группа: Пользователи Сообщений: 1 466 Регистрация: 03/01/2012 Из: Воронеж Пользователь №: 85 109 |
Немного переделал скрипт.
Кто-нибудь подскажет, почему строка: in coordsys gimbal ( print $; $Sprite2D.rotation = eulerAngles 0 0 0 ) не работает? О_о CODE plugin simpleObject Sprite2D
name: "Sprite2D" classID:#(0x3631913e, 0x42e0cb8a) category: "2D Game Objects" ( local max_x = 1024 local max_y = 768 parameters main rollout:param ( sx type:#integer ui:size_x default:32 sy type:#integer ui:size_y default:32 dp type:#integer ui:depth defauilt: 0 ) rollout param "Properties" ( spinner size_x "Size of X" type:#integer range:[0,max_x,32] spinner size_y "Size of Y" type:#integer range:[0,max_y,32] spinner depth "Depth" type:#integer range:[0,1000,0] ) on buildMesh do ( v = #( [-sx/2, -sy/2, dp], [sx/2, -sy/2, dp], [-sx/2, sy/2, dp], [sx/2, sy/2, dp] ) f = #( [3,2,1], [3,4,2] ) t = #( [0,1,0], [1,1,0], [0,0,0], [1,0,0] ) setMesh mesh vertices:v faces:f tverts:t buildTVFaces mesh for i = 1 to mesh.numFaces do ( setTVFace mesh i ( getFace mesh i ) ) ) tool create ( on mousePoint click do ( case click of ( 1: ( nodeTM.translation = gridPoint ) 2: ( in coordsys gimbal ( print $ --$Sprite2D.rotation = eulerAngles 0 0 0 ) #stop ) ) ) ) ) Сообщение отредактировал ProcXel.A - 03/01/2012, 22:58 |
|
|
Bots |
Системное сообщение
|
|
|
|
|
Текстовая версия | Сейчас: 26/04/2024 - 04:16 |