Difference between revisions of "Mugic/protocol"

From Immersive Visualization Lab Wiki
Jump to: navigation, search
(Triangle)
(Triangle)
Line 90: Line 90:
 
===Triangle===
 
===Triangle===
  
Defines vertex coordinates and per-vertex colors for a triangle in 3D.
+
Defines vertex coordinates and per-vertex colors for a triangle.
  
 
;Syntax
 
;Syntax

Revision as of 21:21, 14 November 2012

Contents

Overview

MUGIC defines a protocol for a standard display-independent client/server model for the generation, control, and management of graphics rendering within a multi-user environment. The first implementation for the CalVR system used on the state-of-the-art visualisation technologies developed at Calit2. This protocol will provide ease of access and an integrated development environment for research, education, performance, interaction, and presentations. It will provide an easily accessible format for integration of real-time programming softwares (e.g., Touch Designer, Pure Data, Max/MSP, Quartz, Processing, etc.) which in turn will facilitate the incorporation of state-of-the-art gesture control and algorithmic/generative processes for control of graphics on multiple displays. The protocol will also provide multi-user management and access support, as well as real-time telematic connection between multiple servers materializing an enormous potential for development of multi-site virtual reality game and performance productions.


-Server listens to both tcp and udp -UDP and TCP streams will work in conjunction and in collaboration with each other -UDP commands have a 1400 byte limit (or whatever the lower limit is of the client and server MAClayer)


User management every tcp connection has a ttl after the ttl time, the scene associated with user will be deleted

Object managment every object has an owner object can be a collection of objects

Syntax

cmd name [parameter={value,`expr`} ...]

expr is a c-style expression

Parameters

cx cy cz

red green blue alpha r g b a

Gradient { circular,linear,exp}

red2 green2 blue2 alpha2

(for linear gradient). gx gy gz (defined as a vector)

rotx roty rotz

scale

scalex scaley scalez

Variables

var name type={float,array} {value,`expr`}

variables can be used in expressions

variables of other users can also be accessed as user:variable

parameters of objects can be accessed as variables ObjectName:parameter

the value of a parameter of an object of another user is accessed as

User:ObjectName:parameter

Connections

connect <username>

[shouldn't this rather be something like 'user' to set the user name? This would allow: changing the user name, and using the API without a user name if the command is never called -- jurgen]

User Management and Preferences

pref [cmd] [parameter=value]

default object [parameter=[value,`expr`]

Draw Commands

Point

Draws a point (single pixel).

Syntax
point name=<name> x=<xpos> y=<ypos> z=<zpos> r=<red> g=<green> b=<blue> a=<alpha>
point name=<name> xyz=<xpos>,<ypos>,<zpos> rgba=<red>,<green>,<blue>,<alpha>
Parameters
x, y, z: point coordinates in millimeters
r, g, b: color values for red, green, blue; floating point values in range 0 to 1
a: alpha (opacity) value [0..1]
xyz: GLSL-style compact form to set all three coordinates at once
rgba: GLSL-style compact form to set all three color components at once

Triangle

Defines vertex coordinates and per-vertex colors for a triangle.

Syntax
triangle name=<name> xyz1=<xpos1>,<ypos1>,<zpos1> xyz2=<xpos2>,<ypos2>,<zpos2>, xyz3=<xpos3>,<ypos3>,<zpos3> rgb=<red1>,<green1>,<blue1>
triangle name=<name> xyz1=<xpos1>,<ypos1>,<zpos1> xyz2=<xpos2>,<ypos2>,<zpos2>, xyz3=<xpos3>,<ypos3>,<zpos3> rgb1=<red1>,<green1>,<blue1> rgb2=<red2>,<green2>,<blue2> rgb3=<red3>,<green3>,<blue3>
Parameters
xyz1,xyz2,xyz3: GLSL-style compact form to set all three coordinates for each vertex
rgb: GLSL-style compact form to set all three color components to be applied to all three vertices (produces single-colored triangle)
rgb1,rgb2,rgb3: GLSL-style compact form to set all three color components for each vertex

Quads

How do we deal with surface definition?

c1x c1y c1z c1r c1g c1b c1a

c2x c2y c2z c2r c2g c2b c2a

c3x c3y c3z c3r c3g c3b c3a

c4x c4y c4z c4r c4g c4b c4a

Rectangle

Draws an axis parallel 2D rectangle. Its origin is in its geometrical center.

Syntax
rectangle width=<width> height=<height> r=<red> g=<green> b=<blue>
Parameters
width: extends along x axis [millimeters]
height: extends along y axis [millimeters]
r,g,b: fill color components red, green, blue [0..1]

Circle

radius

Ellipse

c2x c2y c2z

Box

Sphere

Cylinder

Pyramid

Update

group

group name [names ... ]

Examples

Example 1

connect user1

circle name=cir1 cx=1000 cy=2000 radius=3000

sphere name=xph1 cx=1000 cy=2000 cz=3000 radius=1000

Example 2

connect user1

var var1=2

circle name=x1 cx=`-var1` radius=`10000/var1`

update var1=3000

update var1=5000

update var1=10000

update x1 cx=`var*1.5`

Example 3

connect user1

var var1=2000; var var2=2500

circle name=c1 cx=`-var1` cy=0 radius=`10000/var1`

square name=s1 cx=`var1` cy=0 width=`abs((2*var-10000/var1)/2)`

group x1 c1 s1

update x1 cx=5000

update x1 cx=7000

Next Phase

alias (e.g. alias square quad ....... )

move dur=

delete dur=

scale

rotate

sheer

copy name= src= link name= src= transformation=

Camera Management

Lighting Management


Quad ID=X p1=0,0 p2=1,0 p3=1,1 P4=0,0 link ID=A src=X scale id=A factor=0.2 move ID= dx=.1 dy=.5 group iD=C A,B