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)的更多相关文章

  1. 在eclipse上搭建Roku开发环境

    环境:Oracle VM virtualBox+Ubuntu server 12.0.4.2 LTS+xfce+ Eclipse IDE for C/C++ Developers 4.3.2 参考:h ...

  2. 2D、3D形变

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Monaco; color: #a5b2b9 } span.Apple-tab-span { ...

  3. CSS3 3D立方体效果-transform也不过如此

    CSS3系列已经学习了一段时间了,第一篇文章写了一些css3的奇技淫巧,原文戳这里,还获得了较多网友的支持,在此谢过各位,你们的支持是我写文章最大的动力^_^. 那么这一篇文章呢,主要是通过一个3D立 ...

  4. 三分钟学会用 js + css3 打造酷炫3D相册

    之前发过该文,后来不知怎么回事不见了,现在重新发一下. 中秋主题的3D旋转相册 如图,这是通过Javascript和css3来实现的.整个案例只有不到80行代码,我希望通过这个案例,让正处于迷茫期的j ...

  5. 使用CSS3实现一个3D相册

    CSS3系列我已经写过两篇文章,感兴趣的同学可以先看一下CSS3初体验之奇技淫巧,CSS3 3D立方体效果-transform也不过如此 第一篇主要列出了一些常用或经典的CSS3技巧和方法:第二篇是一 ...

  6. Android ViewPager打造3D画廊

    本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 网上有很多关于使用Gallery来打造3D画廊的博客,但是在关于Gallery的官方说法中表明: This cl ...

  7. 如何在ASP.Net创建各种3D图表

    我们都知道,图表在ASP.NET技术中是一种特别受欢迎而又很重要的工具.图表是表示数据的图形,一般含有X和Y两个坐标轴.我们可以用折线,柱状,块状来表示数据.通过图表控件,我们即能表示数据又能比较各种 ...

  8. 现代3D图形编程学习-基础简介(3)-什么是opengl (译)

    本书系列 现代3D图形编程学习 OpenGL是什么 在我们编写openGL程序之前,我们首先需要知道什么是OpenGL. 将OpenGL作为一个API OpenGL 通常被认为是应用程序接口(API) ...

  9. CSS 3 学习——transform 3D转换渲染

    以下内容根据官方规范翻译,没有翻译关于SVG变换的内容和关于矩阵计算的内容. 一般情况下,元素在一个无景深无立体感的平面(flat plane)上渲染,这个平面就是其包含块所处的平面.同时,页面上的其 ...

随机推荐

  1. Jmeter和LoadRunner的区别

    1.Jmeter的架构跟LoadRunner原理一样,都是通过中间代理,监控&收集并发客户端发现的指令,把他们生成脚本,再发送到应用服务器,再监控服务器反馈的结果的一个过程. 2.分布式中间代 ...

  2. 1、Node.js 我的开始+安装

    内容:为什么开始学习node.js,需要安装哪些东西,及其安装过程 node.js的学习是按照菜鸟教程的node.js教程学习,学习这项技术主要是因为需要使用. 需要安装的东西:解释器,IDE(集成开 ...

  3. cascade属性

    cascade属性是设置级联操作的也就是在操作一端的数据如果影响到多端数据时会进行级联操作,一对一的时候直接写在标签上,其他的要写在set标签上 cascade="none|save-upd ...

  4. Shell传递参数【转载】

    Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 实例 以 ...

  5. JavaScript的DOM_动态加载脚本和样式

    一.动态加载脚本 当网站需求变大,脚本的需求也逐步变大.我们就不得不引入太多的 JS 脚本而降低了整站的性能,所以就出现了动态脚本的概念,在适时的时候加载相应的脚本. 1.动态加载js文件 比如:我们 ...

  6. ServletContextListener在Springboot中的使用

    ServletContextListener是servlet容器中的一个API接口, 它用来监听ServletContext的生命周期,也就是相当于用来监听Web应用的生命周期.今天我们就来说说如何在 ...

  7. 改变random.seed()种子值,获取不同的随机值

    random.seed() random.seed()是随机数种子,也就是为随机数提供算法,完全相同的种子产生的随机数列是相同的, 所以如果想产生不同的随机数就需要用当前时间作为种子 一般情况下see ...

  8. PAT——1066. 图像过滤

    图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来.现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换. 输入格式: 输入在第一行给出一幅图像的分辨 ...

  9. 《移动App测试实战》读书笔记

    第一章 概述 什么是移动产品? 移动产品是一个可以在移动设备上安装的App,或者一个可以在移动设备上访问的定制页面. 1.1 研发流程 互联网产品的研发过程主要涉及以下职位分工. 产品经理:负责产品方 ...

  10. (转)python类class中_init_函数以及参数self的简单解释

    1)_init_函数(方法) #-*- encoding:utf-8 -*- class NewClass(object): def __init__(self,name): print self s ...