3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> Создание объекта с привязкой к мировым координатам из любого вьюпорта.
ProcXel.A
сообщение 03/01/2012, 19:23
Сообщение #1


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 466
Регистрация: 03/01/2012
Из: Воронеж
Пользователь №: 85 109



Я только начал изучать maxscript. Сейчас пытаюсь создать инструмент, который бы создавал плейн, нормалями повернутый в сторону оси минус Z. Мой скрипт работает правильно только тогда, когда Я создаю плэйн из перспективы или из топа. В других вьюпортах плэйн создается по сетке вьюпорта и при создании повернут не так, как мне нужно - то есть не параллельно плоскости XY и не нормалями в сторону -Z.

В общем, как сделать так, чтобы из любого вьюпорта мой плэйн создавался параллельно плоскости XY и нормалями в сторону -Z? smile.gif

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
Go to the top of the page
 
+Quote Post
ProcXel.A
сообщение 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
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






Reply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 25/04/2024 - 23:59