idiotIA
This commit is contained in:
parent
89462381db
commit
172ae79105
33 changed files with 1245 additions and 311 deletions
|
|
@ -1,237 +0,0 @@
|
|||
# coding=UTF-8
|
||||
|
||||
'''
|
||||
Anaglyphed rotating cube (for red and green glasses)
|
||||
|
||||
This client uses the drawing functions (polyline) provided by LJ in lj.py
|
||||
You must check in lj.py if the redis server IP is correct.
|
||||
|
||||
LICENCE : CC
|
||||
'''
|
||||
|
||||
import redis
|
||||
import lj3
|
||||
import math
|
||||
import time
|
||||
import argparse
|
||||
|
||||
from osc4py3.as_eventloop import *
|
||||
from osc4py3 import oscbuildparse
|
||||
#from osc4py3 import oscmethod as osm
|
||||
from osc4py3.oscmethod import *
|
||||
|
||||
OSCinPort = 8004
|
||||
|
||||
print ("")
|
||||
print ("Arguments parsing if needed...")
|
||||
argsparser = argparse.ArgumentParser(description="Text Cycling for LJ")
|
||||
argsparser.add_argument("-r","--redisIP",help="IP of the Redis server used by LJ (127.0.0.1 by default) ",type=str)
|
||||
argsparser.add_argument("-c","--client",help="LJ client number (0 by default)",type=int)
|
||||
argsparser.add_argument("-l","--laser",help="Laser number to be displayed (0 by default)",type=int)
|
||||
argsparser.add_argument("-v","--verbose",help="Verbosity level (0 by default)",type=int)
|
||||
|
||||
args = argsparser.parse_args()
|
||||
|
||||
|
||||
if args.client:
|
||||
ljclient = args.client
|
||||
else:
|
||||
ljclient = 0
|
||||
|
||||
if args.laser:
|
||||
plnumber = args.laser
|
||||
else:
|
||||
plnumber = 0
|
||||
|
||||
# Redis Computer IP
|
||||
if args.redisIP != None:
|
||||
redisIP = args.redisIP
|
||||
else:
|
||||
redisIP = '127.0.0.1'
|
||||
|
||||
|
||||
if args.verbose:
|
||||
debug = args.verbose
|
||||
else:
|
||||
debug = 0
|
||||
|
||||
|
||||
lj3.Config(redisIP,ljclient)
|
||||
|
||||
|
||||
width = 800
|
||||
height = 600
|
||||
centerX = width / 2
|
||||
centerY = height / 2
|
||||
|
||||
# 3D to 2D projection parameters
|
||||
fov = 256
|
||||
viewer_distance = 2.2
|
||||
|
||||
|
||||
# Anaglyph computation parameters for right and left eyes.
|
||||
eye_spacing = 100
|
||||
nadir = 0.5
|
||||
observer_altitude = 30000
|
||||
#observer_altitude = 10000
|
||||
# elevation = z coordinate
|
||||
# 0.0, -2000 pop out
|
||||
map_plane_altitude = 0.0
|
||||
|
||||
# Cube coordinates
|
||||
# Define the vertices that compose each of the 6 faces.
|
||||
vertices = [
|
||||
(- 1.0, 1.0,- 1.0),
|
||||
( 1.0, 1.0,- 1.0),
|
||||
( 1.0,- 1.0,- 1.0),
|
||||
(- 1.0,- 1.0,- 1.0),
|
||||
(- 1.0, 1.0, 1.0),
|
||||
( 1.0, 1.0, 1.0),
|
||||
( 1.0,- 1.0, 1.0),
|
||||
(- 1.0,- 1.0, 1.0)
|
||||
]
|
||||
faces = [(0,1,2,3),(0,4,5,1),(1,5,6,2),(2,3,7,6),(6,5,4,7),(7,3,0,4)]
|
||||
|
||||
|
||||
|
||||
def LeftShift(elevation):
|
||||
|
||||
diff = elevation - map_plane_altitude
|
||||
return nadir * eye_spacing * diff / (observer_altitude - elevation)
|
||||
|
||||
def RightShift(elevation):
|
||||
|
||||
diff = map_plane_altitude - elevation
|
||||
return (1 - nadir) * eye_spacing * diff / (observer_altitude - elevation)
|
||||
|
||||
# If you want to use rgb for color :
|
||||
def rgb2int(r,g,b):
|
||||
return int('0x%02x%02x%02x' % (r,g,b),0)
|
||||
|
||||
|
||||
def OSCljclient(value):
|
||||
# Will receive message address, and message data flattened in s, x, y
|
||||
print("I got /glyph/ljclient with value", value)
|
||||
ljclient = value
|
||||
lj3.LjClient(ljclient)
|
||||
|
||||
|
||||
def Proj(x,y,z,angleX,angleY,angleZ):
|
||||
|
||||
rad = angleX * math.pi / 180
|
||||
cosa = math.cos(rad)
|
||||
sina = math.sin(rad)
|
||||
y2 = y
|
||||
y = y2 * cosa - z * sina
|
||||
z = y2 * sina + z * cosa
|
||||
|
||||
rad = angleY * math.pi / 180
|
||||
cosa = math.cos(rad)
|
||||
sina = math.sin(rad)
|
||||
z2 = z
|
||||
z = z2 * cosa - x * sina
|
||||
x = z2 * sina + x * cosa
|
||||
|
||||
rad = angleZ * math.pi / 180
|
||||
cosa = math.cos(rad)
|
||||
sina = math.sin(rad)
|
||||
x2 = x
|
||||
x = x2 * cosa - y * sina
|
||||
y = x2 * sina + y * cosa
|
||||
|
||||
|
||||
""" Transforms this 3D point to 2D using a perspective projection. """
|
||||
factor = fov / (viewer_distance + z)
|
||||
x = x * factor + centerX
|
||||
y = - y * factor + centerY
|
||||
return (x,y)
|
||||
|
||||
def Run():
|
||||
|
||||
|
||||
Left = []
|
||||
Right = []
|
||||
counter =0
|
||||
WebStatus("LaserGlyph")
|
||||
|
||||
# OSC Server callbacks
|
||||
print("Starting OSC at 127.0.0.1 port",OSCinPort,"...")
|
||||
osc_startup()
|
||||
osc_udp_server("127.0.0.1", OSCinPort, "InPort")
|
||||
osc_method("/ping*", lj3.OSCping)
|
||||
osc_method("/glyph/ljclient", OSCljclient)
|
||||
|
||||
try:
|
||||
|
||||
while 1:
|
||||
Left = []
|
||||
Right = []
|
||||
|
||||
x = vertices[0][0]
|
||||
y = vertices[0][1]
|
||||
z = vertices[0][2]
|
||||
|
||||
# The cube start always with vertice 0
|
||||
# LJ tracers will "move" the laser to this first point in black, then move to the next with second point color.
|
||||
# For more accuracy in dac emulator, repeat this first point.
|
||||
|
||||
# Cube Y axis rotation of 'counter' angle and 3d-2d Proj function.
|
||||
#Left.append( Proj(x+LeftShift(z*5),y,z,0,counter,0))
|
||||
#Right.append(Proj(x+RightShift(z*5),y,z,0,counter,0))
|
||||
|
||||
|
||||
# Add all the cube points face by face.
|
||||
for fa in faces:
|
||||
for point in fa:
|
||||
x = vertices[point][0]
|
||||
y = vertices[point][1]
|
||||
z = vertices[point][2]
|
||||
|
||||
Left.append(Proj(x+LeftShift(z*25),y,z,0,counter,0))
|
||||
Right.append(Proj(x+RightShift(z*25),y,z,0,counter,0))
|
||||
|
||||
|
||||
# Drawing step, 2 possibilities
|
||||
|
||||
# Red and Green drawn by laser 0
|
||||
lj3.PolyLineOneColor(Left, c = red, PL = 0, closed = True)
|
||||
lj3.PolyLineOneColor(Right, c = green, PL = 0, closed = True)
|
||||
lj3.DrawPL(0)
|
||||
|
||||
'''
|
||||
# Red on laser 1 and green on laser 2
|
||||
lj3.PolyLineOneColor(Left, c = red, PL = 1, closed = True)
|
||||
lj3.PolyLineOneColor(Right, c = green, PL = 2, closed = True)
|
||||
lj3.DrawPL(1)
|
||||
lj3.DrawPL(2)
|
||||
|
||||
'''
|
||||
|
||||
time.sleep(0.1)
|
||||
|
||||
counter += 1
|
||||
if counter >360:
|
||||
counter =0
|
||||
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
|
||||
# Gently stop on CTRL C
|
||||
|
||||
finally:
|
||||
|
||||
WebStatus("Glyph Exit")
|
||||
print("Stopping OSC...")
|
||||
lj3.OSCstop()
|
||||
pass
|
||||
|
||||
print ("LaserGlyph Stopped.")
|
||||
|
||||
|
||||
white = rgb2int(255,255,255)
|
||||
red = rgb2int(255,0,0)
|
||||
blue = rgb2int(0,0,255)
|
||||
green = rgb2int(0,255,0)
|
||||
|
||||
|
||||
Run()
|
||||
Loading…
Add table
Add a link
Reference in a new issue