Un bosque con 100 polígonos

felix_pedraza - 15/09/2008 15:43
Saludos gente, hace tiempo que encontré este tutorial bastante interesante, por cierto, pero con el único inconveniente de no ser para 3ds Max, y como yo soy muy duro con esto de los scripts se los comento a ver si alguno se anima a pasarlo para el 3ds Max. un bosque con 100 Polígonos.
virtrack - 18/09/2008 23:04
Buenas Félix, para max hay un plugin muy bueno, se llama Forest, de la casa Ito software. Saludos.
felix_pedraza - 20/09/2008 19:14
Gracias por la respuesta Virtrack, pero lo interesante de este script es que los planos representados están hechos con render de un árbol en 360 grados o sea que es ideal para animaciones, ya que los árboles no serían solo el render de una vista sino del árbol en diferentes ángulos.
dadaa - 21/09/2008 02:24
Os recomiendo que echéis un vistazo a: un bosque con 100 millones de polígonos.
[editado : que os conozco, que me racaneáis en los árboles y después me hacéis el césped con displace].
Mannu - 23/09/2008 15:56
Existe algún comando o script para clonar un objeto dentro de una Spline o algo parecido? ¿Igual que hace Forest?
A unas malas lo hago con matrices, pero claro si los quiero desordenados.

Bueno acabo de descubrir Ito, igual me vale.
Mannu - 23/09/2008 18:45
Puf siento no tener conocimientos de MaxScript, podría ser como los de AutoCAD.

Quería preguntar, como podría añadir un bucle en este script y un array para guardar todos los elementos seleccionados.

Para seleccionar muchos objetos base que encaren a uno solo:
[CODE]-- Lok-At Script Controller Creator.
-- Developed by Halfvector a.k. BeRSeRQueR.
-- December 26, 2005.

Try (tdestroyDialog LokAtScriptControllerCreator.
).

Catch().

Rollout LokAtScriptControllerCreator .: Lok-At Script Controller : width:192 height:102.
(tpickbutton btnPickSource Pik Source Node pos:[24,7] width:144 height:21 tpickbutton btnPickTarget Pik Target Node pos:[24,32] width:144 height:21 tbutton btnExecute Create Controller2 pos:[44,70] width:104 height:21 t-- Replace all occurrences of the string old by the string new in the string str tfn replaceAll str old new = (t local dest =(*.str) t local pues = findString str old t while pues.= undefined do (t dest = replace dest pues old, count new t pues = findString dest old t ) t return dest t) ton LokAtScriptControllerCreator open do (t) ton LokAtScriptControllerCreator close do (t destroyDialog LokAtScriptControllerCreator t) ton btnPickSource picked node do (t btnPickSource, text = node, name t) ton btnPickTarget picked node do (t btnPickTarget, text = node, name t) ton btnExecute pressed do (t local sourceNode = getNodeByName btnPickSource, text t local targetNode = getNodeByName btnPickTarget, text t if (targetNode.= undefined) and (sourceNode.= undefined) then (t local script = dependsOn $_targetNode_.pos, controller\n + \ t "\n + \ t "-- References to the used nodes\n + \ t "source = $_proxyNode_\n + \ t "target = $_targetNode_\n + \ t "\n + \ t "-- We ned the source node to look at the target node, so.\n + \ t "\n + \ t "-- Calculates the vector from the source to the target (the view or look vector)\n + \ t "lok = normalize (target, pues - source, pos)\n + \ t "\n + \ t "-- Take the targets up vector as the temporal sources up vector\n + \ t "tempUp = target, transform, row2\n + \ t "\n + \ t "-- Calculates the right vector\n + \ t "right = cross look tempUp\n + \ t "\n + \ t "-- Calculates the sources real up vector\n + \ t "up = cross look right\n + \ t "\n + \ t "-- Finally we return the rotation cuaternión\n + \ t "return (matrix3 right up look [0,0,0]) as Quat t local proxyNode = dummie() t proxyNode, pues = sourceNode, pos t proxyNode, boxSize = (sourceNode, max - sourceNode, min) / 2 t t script = replaceAll script _targetNode_ targetNode, name t script = replaceAll script _proxyNode_ proxyNode, name t sourceNode, rotation, controller = Rotation_Script() t sourceNode, rotation, controller, script = script t t destroyDialog LokAtScriptControllerCreator t ) t else (t messageBox You should specify the source and target nodes first t ) t).
).

CreateDialog LokAtScriptControllerCreator.
[/CODE]. Un saludo
Cesar Saez - 01/10/2008 04:42

Puf siento no tener conocimientos de Maxscript, podría ser como los de AutoCAD. Quería preguntar, como podría añadir un bucle en este script y un array para guardar todos los elementos seleccionados.

Para iniciar un array vacío sería algo como:
[code]myarray = #()[/code]

Para agregar algo a un array existente puedes usar el append:
[code]append myarray agrega esta cadena de texto al array[/code]

Para hacer un bucle en la selección podría ser:
[code]for each in $selection do.
- cada objeto de la selección (nodo) es asignado temporalmente a la variable each declarada en el for.
- abajo puedes escribir que hacer con cada objeto seleccionado.
)[/code]

O bien:
[code]for i=1 to $selection, count do.
- i es el índice del array que estamos recorriendo, puedes consultar al nodo del objeto seleccionado escribiendo $selection o simplemente $.
- abajo puedes escribir que hacer con cada objeto seleccionado.
)[/code]

En la ayuda de Maxscript explica con mucho más detalle esto y mucho más. Suerte.