DAYS

静坐常思己过,闲谈莫论人非。知事不伸张,知人不评人,知理不争理。

0%

转载至:Michelle Wan:教育心得——智慧地给孩子留白(20181006)

大家好,我是文昭,今天这集节目是来自于Michelle Wan女士的教育心得:智慧地给孩子留白。这期节目篇幅不长,但是“留白”这个概念与教育相结合,这样一个视角一下就引起我的兴趣。今天开头这一段算是我不揣冒昧,越俎代庖,在进入教育这个话题之前,对“留白”这个概念为什么能和教育实践贯通起来,做个解释。

留白是中国画的一个传统技法,它的关键是在于:画面的美感,不是画家创作好了,端给观众们来品位的,而就要求观赏者的参与,最后那个美感是画家和赏画者共同完成的!

“留白”相当于发出了一个邀请,它其实就是一种审美教育的手段,因为赏画的人参与了对美感的构建,他的审美能力、鉴赏品位在这个过程中得到了锻炼和充实,这其实就是教育要达到的目的

阅读全文 »

在前面几篇文章中我们已经初始化了GLSurfaceView 和 EGL,并且使用 OpenGLES(下文简称GLES)渲染出了红色画面。

这一节中我们将在红色上继续画上三角形。

在着手画三角形之前,我们先要学习一点点关于 GLES 的预备知识,非常简单。

  1. GLES 底层是由 c 语言实现,所以没有面向对象特性,它的接口及工作原理更接近面向过程,且其内部就是一个巨大的状态机。例如前面画的红色我们做了两步操作,第一步GLES32.glClearColor,设置清屏颜色,第二步GLES32.glClear进行清屏。
    总结一下就是 GLES 的渲染一般经历两步:1. 状态设置,2. 状态使用。 牢记这一点,对后面的学习会有很大的帮助。

  2. GLES 的渲染工作是在 GPU 中完成,所以我们的模型数据都需要由 CPU 转交给 GPU。

  3. GLES 中的坐标是标准化设备坐标(Normalized Device Coordinates, NDC),标准化设备坐标是一个x、y和z值在-1.0到1.0的一小段空间。任何落在范围外的坐标都会被丢弃/裁剪,不会显示在你的屏幕上。如下图:

    所以如果我们在手机上直接画(0,0.5)、(0.5,0.5)和(-0.5,0.5)这三个点的时候,得到的就未必是上图中的等边三角形了,因为我们屏幕并不是一个正方形,某个方向是会被拉伸的。具体怎么解决这个问题,在以后的章节中会讲到。

差不多就是以上三点,把他们都牢记在心,对入门 GLES 很重要。

阅读全文 »

什么是 EGL?

EGL 官网是这么介绍 EGL 的:

EGL™ is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform window system. It handles graphics context management, surface/buffer binding, and rendering synchronization and enables high-performance, accelerated, mixed-mode 2D and 3D rendering using other Khronos APIs. EGL also provides interop capability between Khronos to enable efficient transfer of data between APIs – for example between a video subsystem running OpenMAX AL and a GPU running OpenGL ES.

这段介绍很长,但意思可以总结为 EGL 是设备显示与渲染引擎之间的。展开讲就是说设备上的渲染引擎比如 OpenGL ES,它只负责如何将用户输入的模型数据渲染成图形数据,但它却不知道怎么将图像显示在设备显示器上。而 EGL 专门就是做这个的,OpenGL ES 把数据给 EGL,EGL 负责将图形数据显示在设备屏幕上。

那么如果我们想要使用 OpenGL ES 进行渲染,前提就是要有 EGL 环境。那 EGL 环境该如何初始化呢?

阅读全文 »

在 Android 应用层我们如果要使用 OpenGL 进行绘制,可以选择 Android 平台给我提供的 GLSurfaceView 和 GLSurfaceView.Renderer。
其中 GLSurfaceView 是 SurfaceView 的子类,GLSurfaceView.Renderer 为我们在 GLSurfaceView 上渲染提供了回调。

简单写一个例子,首先是定义 Renderer:

1
2
3
4
5
6
7
8
9
10
11
12
13
class MyRenderer : GLSurfaceView.Renderer {
override fun onDrawFrame(gl: GL10?) {
GLES32.glClear(GLES32.GL_COLOR_BUFFER_BIT)
}

override fun onSurfaceChanged(gl: GL10?, width: Int, height: Int) {
GLES32.glViewport(0, 0, width, height)
}

override fun onSurfaceCreated(gl: GL10?, config: EGLConfig?) {
GLES32.glClearColor(1.0F, 0F, 0F, 1F)
}
}
阅读全文 »

最近老婆一直在听这首歌,感觉我已经被洗脑了。

阅读全文 »