在本文中,我们将详细介绍哪些字符可用于在HTML中显示的上/下三角形的各个方面,并为您提供关于无杆箭头?的相关解答,同时,我们也将为您带来关于AndroidOpenGLES2.0等腰直角三角形和彩色的
在本文中,我们将详细介绍哪些字符可用于在 HTML 中显示的上/下三角形的各个方面,并为您提供关于无杆箭头?的相关解答,同时,我们也将为您带来关于Android OpenGLES2.0等腰直角三角形和彩色的三角形(三)、Angular2排序数组,用于在html中显示* ngFor、C++ 中哪些字符可以用于函数命名、CSS 魔法系列:纯 CSS 绘制三角形(各种角度)_html/css_WEB-ITnose的有用知识。
本文目录一览:- 哪些字符可用于在 HTML 中显示的上/下三角形(无杆箭头)?(在下列的 html 中,哪个可以产生文本框?)
- Android OpenGLES2.0等腰直角三角形和彩色的三角形(三)
- Angular2排序数组,用于在html中显示* ngFor
- C++ 中哪些字符可以用于函数命名
- CSS 魔法系列:纯 CSS 绘制三角形(各种角度)_html/css_WEB-ITnose
哪些字符可用于在 HTML 中显示的上/下三角形(无杆箭头)?(在下列的 html 中,哪个可以产生文本框?)
我正在寻找一个 HTML 或 ASCII 字符,它是一个向上或向下的三角形,以便我可以将其用作切换开关。
我找到了 ↑ ( ↑
) 和 ↓ ( ↓
) - 但它们的茎很窄。我正在寻找 HTML 箭头“head”。
Android OpenGLES2.0等腰直角三角形和彩色的三角形(三)
上一篇博客中我们已经绘制出了一个直角三角形,虽然我们相对于坐标,我们设置的直角三角形的两腰是相等的,但是实际上展示出来的却并不是这样,虽然通过计算,我们可以把三角形的两腰计算一下比例,使它们在坐标上不等,但是现实出来相等,但是当绘制的图形比较复杂的话,这个工作量对我们来说实在太庞大了。那么我们怎么做呢?答案是,使用变换矩阵,把计算交给OpenGL。
矩阵
在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 ,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。
矩阵常被用于图像处理、游戏开发、几何光学、量子态的线性组合及电子学等多种领域。我们现在相当于是在图像处理或者游戏开发的领域来使用矩阵。在大学的高数课中,有学习到矩阵,很多人在大学学习高数、线性代数之类的课程时,总是觉得学习这些东西没什么用(我也是)。实际上,这些这是对于程序员,尤其是需要做游戏开发、图像视频处理的程序员来说是非常重要的。扯偏了。。。
在三维图形学中,一般使用的是4阶矩阵。在DirectX中使用的是行向量,如[xyzw],所以与矩阵相乘时,向量在前矩阵在后。OpenGL中使用的是列向量,如[xyzx]T,所以与矩阵相乘时,矩阵在前,向量在后。关于矩阵的具体知识,博客中不详细讲解,需要了解的同学可以自行查阅。
如果要自己去写变换的矩阵,然后把矩阵交给OpenGL处理,也是一个比较麻烦的事情,那么怎么办呢?这时候需要用到相机和投影,生成需要的矩阵。
相机和投影
相机
根据现实生活中的经历我们指导,对一个场景,随着相机的位置、姿态的不同,拍摄出来的画面也是不相同。将相机对应于OpenGL的世界,决定相机拍摄的结果(也就是最后屏幕上展示的结果),包括相机位置、相机观察方向以及相机的UP方向。
- 相机位置:相机的位置是比较好理解的,就是相机在3D空间里面的坐标点。
- 相机观察方向:相机的观察方向,表示的是相机镜头的朝向,你可以朝前拍、朝后拍、也可以朝左朝右,或者其他的方向。
- 相机UP方向:相机的UP方向,可以理解为相机顶端指向的方向。比如你把相机斜着拿着,拍出来的照片就是斜着的,你倒着拿着,拍出来的就是倒着的。
在Android OpenGLES程序中,我们可以通过以下方法来进行相机设置:
Matrix.setLookAtM (float[] rm,//接收相机变换矩阵 int rmOffset,//变换矩阵的起始位置(偏移量) float eyeX,float eyeY,float eyeZ,//相机位置 float centerX,float centerY,float centerZ,//观测点位置 float upX,float upY,float upZ) //up向量在xyz上的分量
投影
用相机看到的3D世界,最后还需要呈现到一个2D平面上,这就是投影了。在Android OpenGLES2.0(一)――了解OpenGLES2.0也有提到关于投影。Android OpenGLES的世界中,投影有两种,一种是正交投影,另外一种是透视投影。
使用正交投影,物体呈现出来的大小不会随着其距离视点的远近而发生变化。在Android OpenGLES程序中,我们可以使用以下方法来设置正交投影:
Matrix.orthoM (float[] m,//接收正交投影的变换矩阵 int mOffset,//变换矩阵的起始位置(偏移量) float left,//相对观察点近面的左边距 float right,//相对观察点近面的右边距 float bottom,//相对观察点近面的下边距 float top,//相对观察点近面的上边距 float near,//相对观察点近面距离 float far) //相对观察点远面距离
使用透视投影,物体离视点越远,呈现出来的越小。离视点越近,呈现出来的越大。。在Android OpenGLES程序中,我们可以使用以下方法来设置透视投影:
Matrix.frustumM (float[] m,//接收透视投影的变换矩阵 int mOffset,//相对观察点近面距离 float far) //相对观察点远面距离
使用变换矩阵
实际上相机设置和投影设置并不是真正的设置,而是通过设置参数,得到一个使用相机后顶点坐标的变换矩阵,和投影下的顶点坐标变换矩阵,我们还需要把矩阵传入给顶点着色器,在顶点着色器中用传入的矩阵乘以坐标的向量,得到实际展示的坐标向量。注意,是矩阵乘以坐标向量,不是坐标向量乘以矩阵,矩阵乘法是不满足交换律的。
而通过上面的相机设置和投影设置,我们得到的是两个矩阵,为了方便,我们需要将相机矩阵和投影矩阵相乘,得到一个实际的变换矩阵,再传给顶点着色器。矩阵相乘:
Matrix.multiplyMM (float[] result,//接收相乘结果 int resultOffset,//接收矩阵的起始位置(偏移量) float[] lhs,//左矩阵 int lhsOffset,//左矩阵的起始位置(偏移量) float[] rhs,//右矩阵 int rhsOffset) //右矩阵的起始位置(偏移量)
等腰直角三角形的实现
在上篇博客的基础上,我们需要做以下步骤即可实现绘制一个等腰直角三角形:
1.修改顶点着色器,增加矩阵变换:
attribute vec4 vPosition; uniform mat4 vMatrix; void main() { gl_Position = vMatrix*vPosition; }
2.设置相机和投影,获取相机矩阵和投影矩阵,然后用相机矩阵与投影矩阵相乘,得到实际变换矩阵:
@Override public void onSurfaceChanged(GL10 gl,int width,int height) { //计算宽高比 float ratio=(float)width/height; //设置透视投影 Matrix.frustumM(mProjectMatrix,-ratio,ratio,-1,1,3,7); //设置相机位置 Matrix.setLookAtM(mViewMatrix,7.0f,0f,1.0f,0.0f); //计算变换矩阵 Matrix.multiplyMM(mMVPMatrix,mProjectMatrix,mViewMatrix,0); }
3.将变换矩阵传入顶点着色器:
@Override public void onDrawFrame(GL10 gl) { //将程序加入到OpenGLES2.0环境 GLES20.gluseProgram(mProgram); //获取变换矩阵vMatrix成员句柄 mMatrixHandler= GLES20.glGetUniformlocation(mProgram,"vMatrix"); //指定vMatrix的值 GLES20.gluniformMatrix4fv(mMatrixHandler,false,mMVPMatrix,0); //获取顶点着色器的vPosition成员句柄 mPositionHandle = GLES20.glGetAttribLocation(mProgram,"vPosition"); //启用三角形顶点的句柄 GLES20.glEnabLevertexAttribArray(mPositionHandle); //准备三角形的坐标数据 GLES20.glVertexAttribPointer(mPositionHandle,COORDS_PER_VERTEX,GLES20.GL_FLOAT,vertexStride,vertexBuffer); //获取片元着色器的vColor成员的句柄 mColorHandle = GLES20.glGetUniformlocation(mProgram,"vColor"); //设置绘制三角形的颜色 GLES20.gluniform4fv(mColorHandle,color,0); //绘制三角形 GLES20.glDrawArrays(GLES20.GL_TRIANGLES,vertexCount); //禁止顶点数组的句柄 GLES20.gldisabLevertexAttribArray(mPositionHandle); }
运行即可得到一个等腰直角三角形:
彩色的三角形
老显示一个白色的三角形实在太单调了,我们需要让这个三角形变成彩色的。该怎么做?
Android OpenGLES2.0(一)――了解OpenGLES2.0中也提到过,顶点着色器是确定顶点位置的,针对每个顶点执行一次。片元着色器是针对片元颜色的,针对每个片元执行一次。而在我们的片元着色器中,我们是直接给片元颜色赋值,外部我们也只传入了一个颜色值,要使三角形呈现为彩色,我们需要在不同的片元赋值不同的颜色。为了处理简单,我们在上个等腰三角形的实例中修改顶点着色器,保持片元着色器不变,达到让三角形呈现为彩色的目的:
attribute vec4 vPosition; uniform mat4 vMatrix; varying vec4 vColor; attribute vec4 aColor; void main() { gl_Position = vMatrix*vPosition; vColor=aColor; }
可以看到我们增加了一个aColor(顶点的颜色)作为输入量,传递给了vColor。vColor的前面有个varying。像attribute、uniform、varying都是在OpenGL的着色器语言中表示限定符,attribute一般用于每个顶点都各不相同的量。uniform一般用于对同一组顶点组成的3D物体中各个顶点都相同的量。varying一般用于从顶点着色器传入到片元着色器的量。还有个const表示常量。关于着色器语言,在后续博客中将为单独介绍。
然后,我们需要传入三个不同的顶点颜色到顶点着色器中:
//设置颜色 float color[] = { 0.0f,0.0f,1.0f }; ByteBuffer dd = ByteBuffer.allocateDirect( color.length * 4); dd.order(ByteOrder.nativeOrder()); FloatBuffer colorBuffer = dd.asFloatBuffer(); colorBuffer.put(color); colorBuffer.position(0); //获取片元着色器的vColor成员的句柄 mColorHandle = GLES20.glGetAttribLocation(mProgram,"aColor"); //设置绘制三角形的颜色 GLES20.glEnabLevertexAttribArray(mColorHandle); GLES20.glVertexAttribPointer(mColorHandle,4,colorBuffer);
运行得到一个彩色的等腰三角形:
源码
所有的代码全部在一个项目中,托管在Github上――Android OpenGLES 2.0系列博客的Demo
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
Angular2排序数组,用于在html中显示* ngFor
<li *ngFor="let post of posts">
当我显示每个帖子的日期时:
{{post.date | date:'yyyy-MM-dd HH:mm:ss'}}
我想要做的是按照最新的顺序显示所有帖子.
我尝试过使用如下管道:
<li *ngFor="let post of posts | order-by-pipe">
import {Pipe,PipeTransform} from '@angular/core'; @Pipe({ name: 'order-by-pipe' }) export class OrderByPipe implements PipeTransform{ transform(array: Array<string>,args: string): Array<string> { if(!array || array === undefined || array.length === 0) return null; array.sort((a: any,b: any) => { if (a.date < b.date) { return -1; } else if (a.date > b.date) { return 1; } else { return 0; } }); return array; } }
但它不起作用.我收到错误:
TypeError: Cannot read property 'toupperCase' of undefined (" [ERROR ->]*ngFor="let post of posts | order-by-pipe">
欢迎任何帮助,谢谢
更改名称:在您的管道中,orderByPipe可以解决问题.
那很奇怪.
这是一个相同代码的演示,不同的名称:http://plnkr.co/edit/BXkrPqeMYuJMhkx94i6M?p=preview
C++ 中哪些字符可以用于函数命名
C++ 中函数命名的合法字符
在 C++ 中,函数名可以由以下字符组成:
- 大小写字母 (A-Z、a-z)
- 数字 (0-9)
- 下划线 (_)
注意事项:
立即学习“C++免费学习笔记(深入)”;
- 函数名不得以数字开头。
- 函数名不区分大小写 (myFunction 和 MyFunction 等效)。
- 函数名不应为保留关键字 (如 if、for、while 等)。
实战案例:
以下是一些有效的 C++ 函数名示例:
- calculateArea
- getStudentName
- setTemperature
- _init
- checkValidity
而以下函数名则无效:
- 123Degrees:以数字开头
- if:是保留关键字
- my.function:包含特殊字符(句点)
以上就是C++ 中哪些字符可以用于函数命名的详细内容,更多请关注php中文网其它相关文章!
CSS 魔法系列:纯 CSS 绘制三角形(各种角度)_html/css_WEB-ITnose
我们的网页因为 css 而呈现千变万化的风格。这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果。特别是随着 css3 的广泛使用,更多新奇的 css 作品涌现出来。
今天这篇文章开始推出《百变 CSS 系列》,给大家带来 CSS 在网页中以及图形绘制中的使用。首先给大家打来的是流行的 CSS 三角形绘制方法。
您可能感兴趣的相关文章
35个让人惊讶的 CSS3 动画效果演示 Web 前沿:一组极其绚丽的 CSS3 效果 Web 前沿:那些让人惊叹的 CSS3 应用 十款精心挑选的在线 CSS3 代码生成工具 年度盛宴:2012年最精彩的 CSS3 教程
Triangle Up
立即学习“前端免费学习笔记(深入)”;
Triangle Down
立即学习“前端免费学习笔记(深入)”;
Triangle Left
Triangle Right
Triangle Top Left
Triangle Top Right
Triangle Bottom Left
Triangle Bottom Right
您可能感兴趣的相关文章
CSS3 在网页设计中的20佳惊艳应用 推荐12个漂亮的 CSS3 按钮实现方案 推荐10个非常优秀的 CSS3 开发工具 分享50个漂亮的 CSS3 最佳应用示例 24款非常实用的 CSS3 工具终极收藏
本文链接:百变 CSS 系列:纯 CSS 绘制三角形(各种方向)
编译来源:梦想天空 ◆ 关注前端开发技术 ◆ 分享网页设计资源
关于哪些字符可用于在 HTML 中显示的上/下三角形和无杆箭头?的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Android OpenGLES2.0等腰直角三角形和彩色的三角形(三)、Angular2排序数组,用于在html中显示* ngFor、C++ 中哪些字符可以用于函数命名、CSS 魔法系列:纯 CSS 绘制三角形(各种角度)_html/css_WEB-ITnose的相关知识,请在本站寻找。
本文标签: