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)上渲染,这个平面就是其包含块所处的平面.同时,页面上的其 ...
随机推荐
- 沉淀再出发:jetty的架构和本质
沉淀再出发:jetty的架构和本质 一.前言 我们在使用Tomcat的时候,总是会想到jetty,这两者的合理选用是和我们项目的类型和大小息息相关的,Tomcat属于比较重量级的容器,通过很多的容器层 ...
- Salesforce和SAP Netweaver里数据库表的元数据设计
从Salesforce官网可以了解到Salesforce的force.com平台里数据库表的设计:https://developer.salesforce.com/page/Multi_Tenant_ ...
- OpenStack高可用方案及配置
1 OpenStack高可用介绍 1.1 无状态和有状态服务 无状态服务指的是该服务接收的请求前后之间没有相关关系,接收并处理完该请求后不保存任何状态,在OpenStack的服务中常见的无状态服务 ...
- 函数去抖(debounce)与 函数节流(throttle)
以下场景往往由于事件频繁被触发,因而频繁执行DOM操作.资源加载等重行为,导致UI停顿甚至浏览器崩溃. 1. window对象的resize.scroll事件 2. 拖拽时的mousemove事件 3 ...
- vue实现点击目标元素外页面的其他地方隐藏弹窗。
方法: 步骤1:给页面最外出的元素div加点击事件:@click=“popShow = false”. 步骤2:给点击目标元素加点击事件:@click=“popShow = true”. 备注:pop ...
- Java(Android)编程思想笔记03:在Android开发中使用MVP模式
1. MVP模式简介: MVC模式相信大家肯定是比较熟悉的:M-Model-模型.V-View-视图.C-Controller-控制器. MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M- ...
- hook与链表操作
hook与链表的节点操作有相似之处: 链表的前后顺序相当于程序的执行流: 对链表节点的替换或插入相当于hook技术: 1.替换:用新的节点替换原来的节点: 2.前插入: 3.后插入: 修改原来的结构.
- μCOS-II系统之事件(event)的使用规则及Semaphore的相互排斥量使用方法
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wavemcu/article/details/27798493 ****************** ...
- Linux学习总结(十八)几个简单的文本处理工具cut sort tr split
1 命令cut 用来截取某一个字段格式 : cut -d '分隔符' [-cf] n, n为数字,表示第几段-d:后面跟分隔符,分割符要加单引号-c:后面接的是第几个字符-f:后面接的是第几段那么意思 ...
- 【jQuery】Deferred(延迟)对象
本文针对jQuery-todolist项目中使用到的Deferred(延迟)对象进行具体分析 $.Deferred() 是一个构造函数,用来返回一个链式实用对象方法来注册多个回调,并且调用回调队列,传 ...