viernes, 19 de junio de 2015

Ropa en Unreal Engine 4, 3ds Max y Apex Nvidia - Santuario

Una de las maneras que podemos hacer para crear ropa, o objetos que sean algún tipo de tela, para Unreal Engine 4, utilizamos un plugin para 3ds Max ya que al hacerlo con blender, no se importaba correctamente la tela.

El plugin de Nvidia se llama APEX Clothing lo pueden encontrar aquí. Para poder descargarlo es necesario crear cuenta con Nvidia.

Lo que hicimos fue crear en blender las cortinas que queríamos utilizar, para poder ubicarlas en el lugar donde se quedarán.

Una vez creada la cortina, exportamos el objeto en fbx, para poder abrirlo en 3ds y agregarle el modificador de Apex.



En 3ds Max lo primero que debemos hacer es crear un bone, el cual estará ligado a la cortina.


Después seleccionamos la cortina y le agregamos los valores el modificador skin y le agregamos a este skin el bone que acabamos de agregar.


Después agregamos el modificador llamado "Apex Clothing". 


Al agregar este modificador, podemos agregar las propiedades de las ropas. Estas propiedades están encargadas de decir, que tanta resistencia tiene al doblarse, escala de gravedad, amortiguación, etc. Los valores de nuestro objeto son los siguientes:


La herramienta para pintar los valores de la tela o ropa es la siguiente.

Después de que agregamos los valores a la tela que deseamos que tenga, exportamos el objeto de tela como un fbx y también lo exportamos como PhysX and APEX. Después de hacer esto, importamos el objeto fbx a unreal y le agregamos al objeto el archivo .apx que exportamos.

Al agregar el archivo apx que exportamos, podemos agregar al material del objeto las propiedades para que lo convierta en ropa.


Listo amigos, con esto ya tenemos nuestro objeto como tela. Si tienes alguna duda o algún comentario, no dudes en comentar.

Saludos!

miércoles, 10 de junio de 2015

Liferay "Mi Perfil (My Account)" desde template en velocity

Normalmente no se necesita, pero en algunos casos se puede necesitar crear una entrada al portlet de Mi Perfil (My Account) de Liferay desde algún template en velocity, ya sea desde un custom theme,  template de contenido, template de listas dinámicas, template de asset publisher, etc.

Liferay en su dockbar hace esta liga desde un jsp y es bastante diferente hacerlo en velocity.

Dejo aquí un ejemplo de como llamar el portlet de Mi Perfil (My Account) desde velocity. El código es bastante corto y sencillo, ya que esta URL se encuentra en la variable de Liferay de theme_display!

## Liferay pop up link to display the account editing page of a user (Velocity)
#set ($my_account_url = $theme_display.getURLMyAccount() + "&controlPanelCategory=my")

Creamos la URL para el portlet de Mi Perfil (My Account), luego hay que cargarla en un popup (para hacerlo como lo hace Liferay en el dockbar).
Liferay tiene una utilería de javascript para crear los popups que utiliza, así que la usamos.

<a href="javascript:Liferay.Util.openWindow({dialog: {destroyOnHide: true}, title: 'My Account', uri: '$my_account_url'});">
     Edit Profile
</a>

Listo! así de fácil.

viernes, 5 de junio de 2015

Página de configuración en portlet de Liferay

Varias veces he batallado para recordar y/o encontrar como crear una página de configuración en un portlet al estilo Liferay, así que dejare el proceso aquí para futuras referencias, o por si a alguien le sirve!
(Digo al estilo Liferay porque siempre puedes crear una pagina mas en tu portlet, que tenga acceso restringido para Admins, y manejar ahi las configuraciones del portlet. Pero los portlets de que trae Liferay de caja, no se configuran asi.)

Primero, creamos nuestro portlet.

Entramos al archivo liferay-portlet.xml, en este agregamos el configuration-action-class, usando la clase DefaultConfigurationAction. quedaria asi:

<portlet>
 <portlet-name>configtest</portlet-name>
 <icon>/icon.png</icon>
 <configuration-action-class>com.liferay.portal.kernel.portlet.DefaultConfigurationAction</configuration-action-class>
 <header-portlet-css>/css/main.css</header-portlet-css>
 <footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
 <css-class-wrapper>configtest-portlet</css-class-wrapper>
</portlet>

Al agregar esto, liferay ya crea en las configuraciones del portlet una nueva pestaña llamada setup. Esta pestaña estara en blanco, ahora creemos la página para mostrar algo.

En el archivo de configuración del portlet, portlet.xml agregamos un parámetro de inicialización mas, para agregar el jsp.

<init-param>
 <name>view-template</name>
 <value>/view.jsp</value>
</init-param>
<init-param>
        <name>config-template</name>
        <value>/config.jsp</value>
</init-param>
<expiration-cache>0</expiration-cache>

El nombre del parámetro debe ser config-template, así es como Liferay sabe que ese parámetro es para la configuración del portlet.

Agregamos la pagina config.jsp en este caso a la misma altura de view.jsp, que es la pagina que se crea automáticamente al generar el portlet.

En el view.jsp vamos a traer la configuración para pintarla.

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<%
String message = portletPreferences.getValue("message", "hola mundo");
%>
<%=message %>.


Y en el config.jsp creamos una forma, con un textbox para poner el mensaje que queremos mostrar al usuario (en este caso).
<%@page import="com.liferay.portal.kernel.util.Constants"%>
<%@ taglib uri="http://alloy.liferay.com/tld/aui" prefix="aui" %>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />
<%
String message = portletPreferences.getValue("message", "hola mundo");
%>
<liferay-portlet:actionURL portletConfiguration="true" var="configURL"/>
<liferay-portlet:renderURL portletConfiguration="true" var="configRenderURL"/>

<aui:form action="<%=configURL %>" method="post" name="fm">
 <aui:input name="<%=Constants.CMD %>" type="hidden" value="<%=Constants.UPDATE %>" />
 <aui:input name="redirect" type="hidden" value="<%=configRenderURL %>" />
 <aui:fieldset>
  <aui:input name="preferences--message--" id="message" label="Welcome Message" value="<%=message %>" />
 </aui:fieldset>
 <aui:button-row>
  <aui:button type="submit"/>
 </aui:button-row>
</aui:form>


En el value del textbox, usamos en el name el doble guion para la propiedad message, que es la que utilizamos en el view.jsp para mostrar el mensaje que queremos que vea el usuario, esto es para que la clase DefaultConfigurationAction haga todo mágicamente, sin tener necesidad nosotros de mandarlo guardar o mandarlo traer de la base de datos en un Controller. Este método de guardado/extracción solo se usa en la forma, no al momento de ir por la propiedad en las preferencias del portlet.

Y listo! esto debe tener un portlet con una pagina de configuración al estilo Liferay!


Resultado final:



lunes, 1 de junio de 2015

Santuario - UE4 y Oculust Rift

Hola amigos

Actualmente nos encontramos trabajando en un proyecto nuevo, el cual es la representación del Santuario descrito en el libro de Éxodo de la Biblia.
Para dicho proyecto decidimos utilizar Unreal Engine 4 ya que queremos utilizar un dispositivo para Realidad Aumentada llamado Oculus Rift. Para aquellos que no sepan que es el Oculus Rift, aquí les dejo un video para que se den una idea. VIDEO

Espero muy pronto les podamos avisar en donde lo pueden descargar y como utilizarlo.

Saludos