Skocz do zawartości

tworzenie obiektów obracających się do kamery


Gość bukololo

Rekomendowane odpowiedzi

Gość bukololo

witam, czy istnieje mozliwosc tworzenia w 3dstudio obiektow ktore obracaja sie do kamery tak jak np w sketchup face camera, z gory dziekuje za odpowiedz.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 7
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Popular Days

Top Posters In This Topic

cytuje z książki 3ds max 5 Projekty i rozwiazania, strona 736 werset 4

 

PS. książka to wg encyklopedii : Książka - dokument piśmienniczy myśli ludzkiej, raczej obszerny, w postaci publikacji wielostronicowej o określonej liczbie stron, o charakterze trwałym.

Jakby ktoś zapomniał, w czasach elektrotutków

 

zatem : " działanie kontrolera wymuszanego LookAT sprawia, iż poddany mu obiekt obraca się w taki sposób, by jedna z osi jego lokalnego układu współrzędnych zawsze celowała w inny wybrany obiekt. Aby móc go utworzyć \, utwórz dwa obiekty z których jeden zawsze będzie wskazywac drugi. Wybierz ten z nich, który będzie obiektem wskazującym i przypisz mu kontroler LookAt constraint z menu animation"

Odnośnik do komentarza
Udostępnij na innych stronach

Gość bukololo

wszystko pieknie dzieki, tylko jak to zrobic zeby 1.obracalo sie tylko po x i y a po z nie, 2. zrobic to szybkim kliknieciem dla wiekszej gruby obiektow np kilkudziesieciu plaskich ludzikow porozrzucanych po scenie

Odnośnik do komentarza
Udostępnij na innych stronach

TO ja jeszcze dorzuce skrypta w.ms (ja go nie pisałem ale raczej jest za free) :

 

-- Template: 'Template-Dialog.ms'

 

/*

tut_billboard_01.ms

"Billboard"

version 01

Written for 3dsmax r6

Written by swami*

07.13.03

 

PURPOSE:

- To realize the billboard effect: an object looks at another object, but only rotates

about its World z-axis.

*/

 

--------------------------

-->

--------------------------

-- FUNCTION (makeBillboard)

--

-- This function realizes the billboard effect: an object looks at another object, but only rotates

-- about its World z-axis. This is accomplished by assigning a script controller to the object's rotation.

-- Through the use of a little trigonometry, the rotation is set.

-- The billboard's Local z-axis defines the front of the object. This convention is chosen to match the

-- orientation of objects created in the front view.

--

-- This function is based coded posted to the MAXScript WebBoard by Larry Minton.

 

fn makeBillboard

obj -- The billboard object.

targ -- The lookat object.

=

(

setWaitCursor()

-- Check to ensure the objects are defined and not deleted.

if obj!=undefined AND (NOT isDeleted obj) AND targ!=undefined AND (NOT isDeleted targ) then

(

-- Build string to be used in script controller on obj's rotation.

-- Notes:

-- - Script is in one big 'try/catch'. So, if any error occurs, the catch clause is executed,

-- and rotation is effectively set to [0,0,0].

-- - 'dependsOn' signals the controller to update when another controller changes.

-- In this case, the rotation changes when the position of the lookat object changes.

-- So, on a given frame, when the user moves the lookat object, the billboard rotates.

-- - An object name is put in single quotes (e.g. $'An Object Name') in case spaces or other

-- "problem" characters are contained in the name. Without the single quotes, an error will occur.

-- - The script controller returns a quaternion rotation value: see the lines containing

-- 'eulerAngles' (pronounced "oiler angles").

-- - Basic trigonometry is used to calculate the rotation angle required to achieve the billboard effect.

 

local scriptStr=

"try(

dependsOn $'"+targ.name+"'.pos.controller

 

local d, dz, z_rot, len, ctrl

 

-- Get difference vector of obj and targ.

d=

try ($'"+obj.name+"'.pos-$'"+targ.name+"'.pos)

catch [0,0,0]

 

dz=d.z -- Store z value.

d.z=0 -- Set z to zero.

len=length d -- Vector length.

 

-- Calculate the z rotation (in degrees).

-- Note: len==0 => obj and targ are at same position!

z_rot=

if len!=0

then -90+acos(d.x/len)*(if d.y!=0 then d.y/(abs d.y) else 1)

else -90

(eulerAngles 90 0 z_rot) as quat

)catch ((eulerAngles 90 0 0) as quat)"

 

ctrl=obj.rotation.controller=rotation_script() -- Assign rotation script controller.

setTimeRange ctrl (interval -1000 10000) -- Set script controller's range bar to wide range, in case user expands range later.

ctrl.script=scriptStr -- Put script string into script controller.

)--end main 'if/then'.

 

setArrowCursor()

)

--------------------------

-- end functions.

 

-- If rol_BB dialog already open, then close.

global rol_BB

try (destroyDialog rol_BB) catch()

 

rollout rol_BB "Billboard"

(

-- VARIABLES.

local bbObjsArr -- Declare billboard objects array local to rollout.

local laObj -- Declare lookat object local to rollout.

 

-- UI CONTROL ITEMS.

button but_setBBEffect "Set Billboard Effect" width:125 height:40\

tooltip:"Select billboard objects and camera, then click button"

 

-- EVENTS.

-- Set the billboard effect.

on but_setBBEffect pressed do

(

bbObjsArr=#() -- Initialize billboard objects array to null array.

laObj=undefined -- Initialize lookat object variable to 'undefined'.

 

-- Note: User must manually select objects in viewport, or via 'Select by Name' dialog.

-- Selection should include the billboard objects AND one camera.

-- Loop through selected objects.

for obj in selection do

(

if superClassOf obj==camera -- Check if object is the camera.

then laObj=obj -- Assign camera object to 'laObj' variable.

else if classOf obj!=targetObject then append bbObjsArr obj -- Append object to billboard objects array, but exclude target objects.

)

 

-- Finally, set billboard effect: loop through billboard objects and call 'makeBillboard' fn.

-- This assigns a script controller to the billboard objects' rotation.

if bbObjsArr.count!=0 AND laObj!=undefined then -- Check to ensure objects have been selected.

(

for obj in bbObjsArr do makeBillboard obj laObj

)

)

 

)

--------------------------

-- end rollout.

 

-- Create dialog.

createDialog rol_BB width:250 height:100\

style:#(#style_sysmenu,#style_titlebar,#style_minimizebox,#style_maximizebox)

--------------------------

-- end script.

Odnośnik do komentarza
Udostępnij na innych stronach




×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności