OpenGl学习第三章

上个星期学习了下金字塔的绘制,然后这周有看了看正方体的绘制,通过依次绘制6个面来绘制正方体,整体代码跟上次的金三角没有区别,只是坐标点,颜色,已经绘制的代码有点区别,上代码看看

//这是坐标

private static float[][] cubeVertexCoords = new float[][] {

new float[] { // top

1, 1,-1,

-1, 1,-1,

-1, 1, 1,

1, 1, 1

},

new float[] { // bottom

1,-1, 1,

-1,-1, 1,

-1,-1,-1,

1,-1,-1

},

new float[] { // front

1, 1, 1,

-1, 1, 1,

-1,-1, 1,

1,-1, 1

},

new float[] { // back

1,-1,-1,

-1,-1,-1,

-1, 1,-1,

1, 1,-1

},

new float[] { // left

-1, 1, 1,

-1, 1,-1,

-1,-1,-1,

-1,-1, 1

},

new float[] { // right

1, 1,-1,

1, 1, 1,

1,-1, 1,

1,-1,-1

},

};

//这是颜色

private static float[] cubeColors = new float[] {

0,1,0,1,

1,0.5f,0,1,

1,0,0,1,

1,1,0,1,

0,0,1,1,

1,0,1,1

};

然后必须要把呀转化为FloatBuffer  ,这样就可以使用了

private static FloatBuffer[] cubeVertexBfr;

private static FloatBuffer  cubeColorBfr;

转化我写了个转化的工具类

public  class BufferUtil {

private static FloatBuffer floatBuffer;

public static FloatBuffer  floatToBuffer(float[] f){

ByteBuffer  buffer  =ByteBuffer.allocateDirect(f.length*4);

buffer.order(ByteOrder.nativeOrder());

floatBuffer  =buffer.asFloatBuffer();

floatBuffer.put(f);

floatBuffer.position(0);

return floatBuffer;

}

下边是绘制的代码

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//在上边打开在下边就要关闭,这个原因是然后边的绘制不会复用前边的颜色等的样式

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

for (int i = 0; i < 6; i++) // draw each face

{

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, cubeVertexBfr[i]);

gl.glColorPointer(4, GL10.GL_FLOAT, 0, cubeColorBfr);

gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 4);

}

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

}

时间: 2024-09-29 06:09:26

OpenGl学习第三章的相关文章

【OPENGL】第三章 着色器基础(一)

在这一章,我们会学习什么是着色器(Shader),什么是着色器语言(OpenGL Shading Language-GLSL),以及着色器怎么和OpenGL程序交互. 首先我们先来看看什么叫着色器. Shader(着色器)是用来实现图像渲染的,用来替代固定渲染管线的可编程程序. 着色器替代了传统的固定渲染管线,可以实现3D图形学计算中的相关计算,由于其可编程性,可以实现各种各样的图像效果而不用受显卡的固定渲染管线限制.这极大的提高了图像的画质. 在上一篇文章( http://www.cnblog

oracle学习 第三章 常用的SQL*PLUS命令 ——02

今天接着昨天的RUN命令继续讲. 3.5 n(设置当前行)命令和A(PPEND)(附加)命令 设想,你输入了例3-10的查询语句 例 3-10 SQL> SELECT ename 2 FROM emp; 例 3-10 结果 看到以上输出时,您发现在SELECT子句中忘了job,sal.这时您又如何修改您的SELECT子句呢?首先您应该使用SQL*PLUS的L(LIST)命令来显示SQL缓冲中的内容. 例 3-11 SQL> L 例 3-11 结果 在例3-11显示的结果中,2后面的"

安卓学习——第三章

安卓学习——第三章 由于自身的实力不足,经过尝试后放弃了自己编写记账本app,而是打算找到合适的相关项目进行学习.我找到了几个AndroidStudio项目,我在AndroidStudio里面直接打开文件,发现无法运行.想到应该是import项目才行(我可真是菜的真实). 通过import这些项目之后,发现其中一个项目竟然是可以跑起来的.我便将项目通过手机进行测试,发现在手机上也是可以运行的.不过有一些在外观上的问题. 首先是在手机上的显示,会有一部分文字内容是乱码.我便去找编译器里面相关文件的

Struts2框架学习第三章——Struts2基础

本章要点 —  Struts 1框架的基本知识 — 使用Struts 1框架开发Web应用 —  WebWork框架的基本知识 — 使用WebWork框架开发Web应用 — 在Eclipse中整合Tomcat — 使用Eclipse开发Web应用 — 为Web应用增加Struts 2支持 —  Struts 2框架的MVC组件 —  Struts 2框架的流程 — 通过web.xml文件加载Struts 2框架 — 通过struts.properties文件配置Struts 2属性 —  str

汇编学习第三章

在第三章的学习中,我们开始更深入地学习寄存器. (一)字在内存中的存储与内存单元地址   在第二章中,我们了解到,在CPU中,用16位寄存器来存储一个字,但是由于内存单元是字节单元(即在一个单元内只能存放一个字节),所以一个字要用两个内存单元来存放.举个例子,我们用0.1两个单元来存放数据4E20H,0号单元为低地址单元,1号为高地址单元单元,分别存放它的低位.高位数据.由此,我们提出字单元的概念:由两个地址连续的内存单元组成,用来存放一个16位数据的内存单元.,一般我们将起始地址为N的字单元简

LinQ In Action 学习第三章

本章开始前先回顾一个小例子,复习一下第二章所讲内容 var pc = Process.GetProcesses()                .Where(p => p.WorkingSet64 >= 20 * 1024 * 1024) // lamador expression                .OrderByDescending(p => p.WorkingSet64)// extension method                .Select(p =>

网络学习第三章(网桥)

网桥的多个接口的集合就形成了交换机,网桥就是交换机, 在交换机中的消息同样是广播的方式传送, 交换机的工作方式下一章学习.

oracle学习 第三章 常用的SQL*PLUS命令 ——01

下面我们开始新的一章学习! 当输入SQL语句时,该语句被存在SQL缓冲区中(即一个内存区).这个SQL缓冲区很小,只能存一个SQL语句,当下一条SQL语句输入时,原来在缓冲区中的SQL语句被覆盖掉.SQL*PLUS是一个工具(环境).正像我们所看到的,我们可以用它来输入SQL语句.为了有效的输入和编辑SQL语句,SQL*PLUS还提供了一些常用的命令.与SQL语句不同的是SQL*PLUS的命令是可以缩写的.下面就简单的介绍一些常用的SQL*PLUS命令. 3.1 DESC[RIBE]命令 一般在

java学习第三章1.注释,标示符和关键字

3.1 注释. 注释的作用:1.方便后期自己阅读时明白当时的思路. 2.在团队开发中,方便他人理解自己写的代码 注释的种类:1.单行注释:“//"开头,其后的所有内容都被注释掉.单行注释还可以用来检查代码调试程序 2.多行注释用"/*"开头, "*/"结尾.中间部分既是注释的部分.可以注释多行代码. public class Commenttest { /*这是多行注释,这一行以及下面一行.学习java是个艰苦的过程 现在万家灯火,团员圆满的日子里我还在这