BrightScript 3D test - Roku (4)
My initial attempt to port over an old Actionscript program, here it goes in main.brs.
Library "v30/bslDefender.brs" '''''''''''''''''''''''''''''''''''''''''''''''''''
'
function Main() as void screen = CreateObject("roScreen")
port = CreateObject("roMessagePort")
screen.SetMessagePort(port)
screen.SetAlphaEnable(true) m.PI = 3.14159265358979323846264338327958209749445923078164
m.origin = { x:/, y:/, z: }
m.focal_length =
m.scene = { x:m.origin.x, y:m.origin.y }
m.axis_rotation = { x:, y:, z: }
m.camera = { x:, y:, z: } LINE_COLOR = &h00ee00ff
VERTEX_COLOR = &h00dd00ff m.len =
m.points = [
'
vertex3d(-m.len, -m.len, -m.len),
vertex3d(m.len, -m.len, -m.len),
vertex3d(m.len, -m.len, m.len),
vertex3d(-m.len, -m.len, m.len),
'
vertex3d(-m.len, m.len, -m.len),
vertex3d(m.len, m.len, -m.len),
vertex3d(m.len, m.len, m.len),
vertex3d(-m.len, m.len, m.len),
] ' Initialize drawing points, skip
' screen.Clear(&h000000ff)
' for i=0 to m.points.count()-1 step 1
' screen.DrawPoint(m.points[i].x, m.points[i].y, 4, &h00ff00ff)
' end for
' screen.finish() timer = CreateObject("roTimespan")
start_time = timer.TotalMilliseconds() while(true)
current_time = timer.TotalMilliseconds()
if (current_time - start_time > /)
screen.Clear(&h000000ff)
' Rotation
m.axis_rotation.x = m.axis_rotation.x + 0.001
m.axis_rotation.y = m.axis_rotation.y + 0.001
m.axis_rotation.z = m.axis_rotation.z + 0.001
' 3D translation simulated
projected = project_pts(m.points) ' Top face
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
' Bottom face
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
' Vertices
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
screen.drawLine(projected[].x, projected[].y, projected[].x, projected[].y, line_color)
' Vertex
for i= to projected.count()- step
screen.DrawPoint(projected[i].x, projected[i].y, , vertex_color)
end for screen.finish()
end if
end while End Function '''''''''''''''''''''''''''''''''''''''''''''''''''
' 3D translation simulated
function project_pts(points as Object) as Object projected = [] sin_x = sin(m.axis_rotation.x)
cos_x = cos(m.axis_rotation.x)
sin_y = sin(m.axis_rotation.y)
cos_y = cos(m.axis_rotation.y)
sin_z = sin(m.axis_rotation.z)
cos_z = cos(m.axis_rotation.z) for i= to m.points.count()- step
x = m.points[i].x
y = m.points[i].y
z = m.points[i].z ' rotate about x axis
xy = cos_x*y - sin_x*z
xz = sin_x*y + cos_x*z
' rotate about y axis
yz = cos_y*xz - sin_y*x
yx = sin_y*xz + cos_y*x
' rotate about z axis
zx = cos_z*yx - sin_z*xy
zy = sin_z*yx + cos_z*xy scale = m.focal_length/(m.focal_length+yz-m.camera.z)
x = zx*scale - m.camera.x 'get x position in the view of camera
y = zy*scale - m.camera.y 'get y position in the view of camera projected[i] = vertex3d(x+m.scene.x, y+m.scene.y, yz, scale)
end for return projected end function '''''''''''''''''''''''''''''''''''''''''''''''''''
' Return a vector point
function vertex3d(x as Integer, y as Integer, z as Integer, scale = as Integer) as Object return { x:x, y:y, z:z, scale:scale } end function
And a screen shot:
-- Regards
BrightScript 3D test - Roku (4)的更多相关文章
- 在eclipse上搭建Roku开发环境
环境:Oracle VM virtualBox+Ubuntu server 12.0.4.2 LTS+xfce+ Eclipse IDE for C/C++ Developers 4.3.2 参考:h ...
- 2D、3D形变
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Monaco; color: #a5b2b9 } span.Apple-tab-span { ...
- CSS3 3D立方体效果-transform也不过如此
CSS3系列已经学习了一段时间了,第一篇文章写了一些css3的奇技淫巧,原文戳这里,还获得了较多网友的支持,在此谢过各位,你们的支持是我写文章最大的动力^_^. 那么这一篇文章呢,主要是通过一个3D立 ...
- 三分钟学会用 js + css3 打造酷炫3D相册
之前发过该文,后来不知怎么回事不见了,现在重新发一下. 中秋主题的3D旋转相册 如图,这是通过Javascript和css3来实现的.整个案例只有不到80行代码,我希望通过这个案例,让正处于迷茫期的j ...
- 使用CSS3实现一个3D相册
CSS3系列我已经写过两篇文章,感兴趣的同学可以先看一下CSS3初体验之奇技淫巧,CSS3 3D立方体效果-transform也不过如此 第一篇主要列出了一些常用或经典的CSS3技巧和方法:第二篇是一 ...
- Android ViewPager打造3D画廊
本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 网上有很多关于使用Gallery来打造3D画廊的博客,但是在关于Gallery的官方说法中表明: This cl ...
- 如何在ASP.Net创建各种3D图表
我们都知道,图表在ASP.NET技术中是一种特别受欢迎而又很重要的工具.图表是表示数据的图形,一般含有X和Y两个坐标轴.我们可以用折线,柱状,块状来表示数据.通过图表控件,我们即能表示数据又能比较各种 ...
- 现代3D图形编程学习-基础简介(3)-什么是opengl (译)
本书系列 现代3D图形编程学习 OpenGL是什么 在我们编写openGL程序之前,我们首先需要知道什么是OpenGL. 将OpenGL作为一个API OpenGL 通常被认为是应用程序接口(API) ...
- CSS 3 学习——transform 3D转换渲染
以下内容根据官方规范翻译,没有翻译关于SVG变换的内容和关于矩阵计算的内容. 一般情况下,元素在一个无景深无立体感的平面(flat plane)上渲染,这个平面就是其包含块所处的平面.同时,页面上的其 ...
随机推荐
- SQL Server系统常用存储过程
SQL Server系统存储过程也是好几百个,算了,还是写几个常用的. 1.sp_help 查询表的信息 执行存储过程: sp_help Person 显示结果如下: 妈了个B,有了这张图,你还不懂怎 ...
- XML序列化 System.Xml.Serialization
一.定义元数据 XML序列化常用属性:XMLRoot,XMlType.XMLText.XMLEnum等 [Serializable] [XmlRoot] public class Product { ...
- Java 集合框架(常用数据结构)
早在Java 2中之前,Java就提供了特设类.比如:向量(Vector).栈(Stack).字典(Dictionary).哈希表(Hashtable)这些类(数据结构)用来存储和操作对象组.虽然这些 ...
- 移动App中常见的Web漏洞
智能手机的存在让网民的生活从PC端开始往移动端转向,现在网民的日常生活需求基本上一部手机就能解决.外卖,办公,社交,银行转账等等都能通过移动端App实现.那么随之也带来了很多信息安全问题,大量的用户信 ...
- js布局库
1.viz.js The solution was that someone cross compiled Graphviz to Javascript using llvm + emscripten ...
- SGU---462 Electrician 最大生成树
题目链接: https://cn.vjudge.net/problem/SGU-462 题目大意: 有N条电线需要接入电网,第i条电线计划连接ai和bi两个地点,电线有两个属性:ri(电线稳定度)和c ...
- Linux磁盘管理.md
df df 即“可用磁盘”disk free,用于显示文件系统的磁盘使用情况.默认情况下 df 命令将以每块 1K 的单位进行显示所有当前已挂载的文件系统,如果你想以人类易读的格式显示 df 命令的输 ...
- 软件分享:将应用一键打包成dmg文件
简介 苹果软件开发完成后,都要打包成dmg文件.通常的做法也许是到系统自带的磁盘工具里制作dmg文件,但这样做比较繁琐,尤其是要打包多个应用时,每次只能制作一个dmg文件很麻烦.分享一个很好用很方便的 ...
- java从字符串中提取数字的简单实例
随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取出来呢?大致有以下几种方法, ...
- Python 有用的 map() deduce() filter() 函数
#!/usr/bin/python#5!+4!+3!+2!+1! #give 3 return 3*2*1def jiechen(n): N = map(lambda x:x+1,range(n)) ...