Hola Comunidad!
[spoiler]Hace Casi Un Mes, Solicite Mejoras Y Criticas Sobre Un Tema En Particular:
http://www.comunidadgm.org/index.php?topic=18729.0 (http://www.comunidadgm.org/index.php?topic=18729.0)
Pues Aquí Les Muestro El Motor De Movimiento, La Versión Menú, Sera Para Otra Ocasión[/spoiler]
•Nombre del creador : Zela
•Breve descripción de la función :
Rotar Punto En Una Esfera Falsa 3D, A La Vista 2D (Pantalla) Según Una Dirección
(https://scontent-a-mia.xx.fbcdn.net/hphotos-frc3/v/t1.0-9/1005922_134733006734449_1902763783_n.jpg?oh=60d38bfa7cf40712a0f9fb0252b01502&oe=550C264D)
•Versión GM utilizada : :GM8:
•Código del Script :
> Evento Inicialización "sc_pantalla"
[gml]// devuelve la posicion adecuada al rotar en la orbita
/* argumentos
0 = pos_x
1 = pos_y
2 = pos_z
3 = direccion_x
4 = direccion_y
5 = cantidad de angulo a rotar ¡¡En Radianes!!
6 = indice de la coordenada a obtener (0 = x, 1 = y, 2 = z)
By : Zela
*/
var __cte,__cte2;
__cte2 = sqrt(argument3*argument3 + argument4*argument4)
__cte = (argument0*argument4 - argument1*argument3)*(1-cos(argument5))
if (argument6 = 0){
if (__cte2 = 0){return argument0}
else { return argument0*cos(argument5) + __cte*argument4/(__cte2*__cte2) - argument3*argument2*sin(argument5)/__cte2}
}
if (argument6 = 1){
if (__cte2 = 0){return argument1}
else { return argument1*cos(argument5) - __cte*argument3/(__cte2*__cte2) - argument4*argument2*sin(argument5)/__cte2}
}
if (argument6 = 2){
if (__cte2 = 0){return argument2}
else { return argument2*cos(argument5) + (argument4*argument1 + argument3*argument0)*sin(argument5)/__cte2}
}[/gml]
•Comentarios :
Pues Solo Es El Motor De Movimiento, en El Ejemplo Adjunto Esta La Manera De Utilizarlo :-[
En El Ejemplo Hay Otro Scrips, "sc_velreg", lo cual solo entrega un valor entre [0,1] según una función especifica, arreglada con una distancia máxima (el valor 1)...
•Imágenes Del Ejemplo:
(https://scontent-a-mia.xx.fbcdn.net/hphotos-frc3/v/t1.0-9/580190_134736160067467_809250657_n.jpg?oh=c834839a9fc72fd7f3f90e43da0853c3&oe=55184C9C)
(https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-xfa1/v/t1.0-9/1005718_134736156734134_888550876_n.jpg?oh=84e5cd48dc85b2582e51011749f3714d&oe=55058C46&__gda__=1426346959_ea6db8163e40fc56e26017ded821494b)
Saludos
Solo para comentar que me gusta el efecto, en verdad se ven bien los menús así, ya tiempo sin ver scripts divertidos por aquí. Por otra parte el script solo funciona en 2d (no lo he leído)?, no se puede usar para girar puntos al rededor de esferas en 3d?, o es que en realidad solo funciona desde un punto de vista especifico?.
Por otra parte el script que usas para regular la velocidad xP, no se mucho de calculo. podrías explicar un poco?.
Le Respondo ^^:
>
Cita de: brunoxzx en Julio 03, 2013, 07:36:03 AM
... Por otra parte el script solo funciona en 2d (no lo he leído)?, no se puede usar para girar puntos al rededor de esferas en 3d?, o es que en realidad solo funciona desde un punto de vista especifico?.
...
- Pues La Verdad Cuando Diseñe El Scripts, Los Puntos Giran Entorno A Una Esfera En 3D, Pero Los Acomode Para Que Girasen Según Una Dirección Dada Para La Pantalla (Vista 2D) "La Imagen Lo Explica Bien", Lo Cual Si Lo Quieres Usar Para Girar Un Puntos Desde Una Vista 3D, No Le Funcionará :-[, Una Forma Diferente De Entender Del Porque No Funcionaria En 3D, Que En Este Scripts La Pantalla Seria Como Una Cámara 3D ¡FIJA! (E Ideal) Con El Centro De Una Esfera 3D ¡FIJA! Rotando Puntos, Por Lo Tanto No Tiene Mucho Futuro En Implementación 3D, Lo Cual Esta Bien, Porque Así Lo Diseñe ;D.
>
Cita de: brunoxzx en Julio 03, 2013, 07:36:03 AM
...
Por otra parte el script que usas para regular la velocidad xP, no se mucho de calculo. podrías explicar un poco?.
- Te Explico Como Lo Diseñe Y El Porque.
Quería Algo Que Al Alejarme De Un Punto Avance Mas Rápido (Pero No Linealmente, Sino Gradual) Y Al Acercarme La Manera Inversa Pero Gradual , Lo Cual Pensé En La Siguiente Ilustración:
(http://sphotos-f.ak.fbcdn.net/hphotos-ak-prn2/1048593_135333426674407_1090952490_o.jpg)
Si Te Fijas, En La
"Vista Interesante" Se Ve Claro En La Gráfica Lo Que Quería Conseguir. Al Alejarme (Acercándome A La Distancia Máxima) Los Valores De La Velocidad AUMENTAN, Y Al Revés Pasa Lo Viceversa (Disminuye La Velocidad, Pero No De Manera Brusca), Lo Cual Conseguía Todo Lo Que Quería. Ahora El Único Problema Es Como Expresaba Eso A Lo Matemático. Entonces Me Di Cuenta Que Hay Intervalos Que Relacionar...
Desde
La Vista Interesante A
La Vista Matemática// Intervalo De Las X
[0, Dist_Max] -> [0,3]
Pues Si Notas
[0,Dis_max] / Dis_Max = [0,1]
[0,1] * 3 = [0,3]
Entonces Solo Bastaría Con Multiplicar Nuestras Distancias
[0,Dist_Max] Por
(3/Dis_Max)Lo Cual La Línea Del Scritps Es La Siguiente:
[gml]__x = point_distance(0,0,argument0,argument1)/(argument2/3)[/gml]
Para No Pasarnos De La (Distancia Máxima) Lo Truncamos,
Recordar Que El 3 = Dis_Max:
[gml]if (__x >3) {__x = 3}[/gml]
Para Conseguir El Casi Cero De Velocidad Al Estar Cerca De La Distancia Mínima, lo Truncamos En 0.2 Dandole El Valor De -2 Lo Cual Es Literalmente Casi 0,
Porque Ya No Es Necesario Calcular Mas Allá[gml]else if (__x < 0.2) {__x = -2}[/gml]
Y Para Terminar Lo Retornamos:
[gml]return exp(__x - 3)[/gml]
Nota Que Para Pasar Del Intervalo [0,1] -> [0,Vel_max], solo bastaría con multiplicar [0,1] por Vel_Max para conseguir esa variación de velocidad..
Y Así Nació La Función. ;D
El Script completo Es Este:
[gml]// devuelve un numero entre 0 y 1, segun la funcion exp(x-3)
/* argumentos
0 = direccion x
1 = direccion y
2 = distancia maxima
*/
var __x,;
__x = point_distance(0,0,argument0,argument1)/(argument2/3)
if (__x >3) {__x = 3}
else if (__x < 0.2) {__x = -2}
return exp(__x - 3)[/gml]
Saludos :).
Perdón ayer estaba algo loco probando el gm studio y como que no razonaba bien ;D.
Creo que observando bien es bastante claro por que no funciona en 3d, igual gracias por la expoliación.
En cuanto a el suavizado de la velocidad, Wow que raro! creo que había visto que para dar el efecto de suavizado usaran la función de seno como se muestra en la imagen.
(http://yal.cc/wp-content/uploads/2013/06/visual-window-slide-1.png)
A la final no se que tan notable sea la diferencia entre tu efecto y el que da la función trigonométrica, pero bueno funciona y supongo que tal como tu deseas. Muchas gracias por la explicacion seguro servira de algo :P.
O.o!, Un Warning! de Mi Parte, La Función Sin(x) Por Si sola No Es Circular En Su Grafica, Ten Cuidado Con Ello, A mi Me Paso Antes xD!...
Del Porque No Use Una Función Sin(x)... Si Comparo Las Funciones sin(x*pi/2) y exp(x-3) En Sus Graficas... Obtengo:
(http://sphotos-h.ak.fbcdn.net/hphotos-ak-frc1/580192_135571486650601_1869036548_n.jpg)
Las Etiquetas [1],[2],[3] Serán Las Funciones De La Imagen:
> Sobre [2], Es Solo Acomodar [1] A Como Me Serviría (Lo Que Quería).
> La Imagen Achatada Me Muestra Claramente Que [3] es Mucho Mas Suave Que [2].
> La [3] Es Mas Simple Q [2] En Escritura
Todo Eso Lo Concluí Teniendo Presente Que El Script Lo Quería Con Respecto A La Distancia En El Eje x... Pues Esop :-[
Aunque Igual Puedes Tomar [1] y Pensar Que Al Acercarme A 1, Es Mi Distancia Mínima En el eje X y El 0 La Máxima... (mmm.. Interesante)
PD: Parezco adicto A Las Funciones ;D...
Saludos
Pues creo que para la función que te di [1] era tomar en las X el 0 como minimo y 1 como máximo, y si quieres hacer el degradado al revés tomas desde el 1 hasta el 2 en x. Pero desde luego tu das un degradado más lento, en realidad es cuestión de tus necesidades pero la de seno tiene la ventaja de que ya esta entre 0 y 1 y no tienes que moverla o deshacerte de la parte menor a 0.2.
Buena, Cada Día Se Aprenden Cosas Nuevas, Suelo Mucho Acomodar Cosas A Lo Que Necesito, Me Gusto Esa Vista Que Da