package com.example.opengl1;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer; import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView;
import android.opengl.GLU;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.Menu; /**
* 下面这个demo实现了画一个红色的三角形
* @author pc
*
*/
public class MainActivity extends Activity { MyPointRender1 render; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); MyGLSurfaceView view = new MyGLSurfaceView(this); render = new MyPointRender1(); //renderer: 渲染器..
view.setRenderer(render); setContentView(view);
} class MyGLSurfaceView extends GLSurfaceView{
public MyGLSurfaceView(Context context) {
super(context);
} public MyGLSurfaceView(Context context,AttributeSet attrs) {
super(context, attrs);
}
} /**
* 用来控制整个坐标系的旋转
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
float step = 5f; if(keyCode == KeyEvent.KEYCODE_DPAD_UP){
render.xrotate = render.xrotate - step;
}else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
render.xrotate = render.xrotate + step;
}else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT){
render.yrotate = render.yrotate + step;
}else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
render.yrotate = render.yrotate - step;
} return super.onKeyDown(keyCode, event);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

package com.example.opengl1;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.util.ArrayList;
import java.util.List; import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLU; public class MyPointRender1 implements Renderer { public float xrotate = 0f;
public float yrotate = 0f; /**
* 3.
*/
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glColor4f(1f, 0f,0f,1f); gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
GLU.gluLookAt(gl, 0, 0, 5f, 0, 0, 0, 0, 1, 0); /**
* gl.glRotatef(-90f, 1, 0, 0):
* 设置旋转角度
*
* gl.glRotatef(-90f, 1, 0, 0):中1,0,0.表示绕x轴旋转
* 第一个參数表示旋转角度。-90f表示顺时针旋转90度.90f表示逆时针旋转90度
*
* 旋转以后的坐标是意图是这种
*
* /|\z /y
* | /
* | /
* /------->x
*
*
*
*/
gl.glRotatef(xrotate, 1, 0, 0);
gl.glRotatef(yrotate, 0, 1, 0); float r = 0.5f;
List<Float> coordsList = new ArrayList<Float>();
float x = 0f;
float y = 0f;
float z = 1.5f;
float zstep = 0.005f; for(float alpha = 0f ; alpha < Math.PI*6 ; alpha = (float)(alpha + Math.PI/32)){
x = (float)(r*Math.cos(alpha));
y = (float)(r*Math.sin(alpha));
z = z - zstep; coordsList.add(x);
coordsList.add(y);
coordsList.add(z);
} ByteBuffer ibb = ByteBuffer.allocateDirect(coordsList.size() * 4);
ibb.order(ByteOrder.nativeOrder());
FloatBuffer fbb = ibb.asFloatBuffer();
for(float f : coordsList){
fbb.put(f);
}
ibb.position(0); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, ibb);
gl.glDrawArrays(GL10.GL_POINTS, 0, coordsList.size() / 3); } /**
* 2.
*/
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
float ratio = (float)width/(float)height; gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(-1f, 1f, -ratio, ratio, 3f, 7f);
} /**
* 1.
*/
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glClearColor(0, 0, 0, 1f);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
} }

OpenGL——点的绘制(使用OpenGL来绘制可旋转坐标系的螺旋线)的更多相关文章

  1. 开源免费跨平台opengl opencv webgl gtk blender, opengl贴图程序

    三维图形的这是opengl的强项,大型3D游戏都会把它作为首选.图像处理,是opencv的锁定的目标,大多都是C的api,也有少部分是C++的,工业图像表现,图像识别,都会考虑opencv的.webg ...

  2. 基于Cocos2d-x学习OpenGL ES 2.0系列——OpenGL ES渲染之Shader准备(7)

    Cocos2d-x底层图形绘制是使用OpenGL ES协议的.OpenGL ES是什么呢? OpenGL ES(OpenGl for Embedded System)是OpenGL三维图形API的子集 ...

  3. OpenGL ES: (5) OpenGL的基本概念、OpenGL ES 在屏幕产生图片的过程、OpenGL管线(pipeline)

    一. OpenGL的基本概念 OpenGL 的结构可以从逻辑上划分为下面 3 个部分: 图元(Primitives) 缓冲区(Buffers) 光栅化(Rasterize) 图元(Primitives ...

  4. 【Android端 APP GPU过度绘制】GPU过度绘制及优化

    一.Android端的卡顿 Android端APP在具体使用的过程中容易出现卡顿的情况,比如查看页面时出现一顿一顿的感受,切换tab之后响应很慢,或者具体滑动操作的时候也很慢. 二.卡顿的原因 卡顿的 ...

  5. 4. 2D绘制与控件绘制

    绘制基本图形和文本 绘制图形和文本的基本方法 drawPoint(绘制点).drawLine(绘制直线).drawCircle(绘制圆) drawArc(绘制弧).drawText(绘制文本) pac ...

  6. Chapter 1. OpenGL基础回顾 - Review of OpenGL Basics

    译自<OpenGL® Shading Language, Second Edition> 本章主要回顾OpenGL应用编程接口,为后续章节中的材质铺垫基础.这并不是详尽的回顾.如果你已经 ...

  7. Android OpenGL ES(一)OpenGL ES介绍

    在学习Android OpenGL ES开发之前,你必须具备Java 语言开发经验和一些Android开发的基本知识,但并不需要有图形开发的经验,本教程也会涉及到一些基本的线性几何知识,如矢量,矩阵运 ...

  8. Breaseman算法绘制圆形|中点算法绘制圆形_程序片段

    Breaseman算法绘制圆形|中点算法绘制圆形_程序片段 1. Breaseman算法绘制圆形程序 由于算法的特殊性,限制绘制第一象限部分,其他部分通过旋转绘制. void CCGProjectWo ...

  9. C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码

    原文:C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码 C#WPF 如何绘制几何图形? 怎么绘制坐标系?绘制sin曲线(正弦曲线)? 这离不开Path(Syst ...

随机推荐

  1. Codeforces Round #260 (Div. 2)A. Laptops

    A. Laptops time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  2. mysql 中的数据类型

    unsigned   既为非负数,用此类型可以增加数据长度! 例如如果    tinyint最大是127,那    tinyint    unsigned    最大   就可以到    127 * ...

  3. js字母大小写转换

    function a(){ document.getElementById("test").value = document.getElementById("test&q ...

  4. word-wrap 和 word-break

    一.word-wrap 1.浏览器支持 所有主流浏览器都支持 word-wrap属性 2.定义和用法 word-wrap 属性允许长单词或 URL 地址换行到下一行. 语法 word-wrap: no ...

  5. cxf的使用及安全校验-01创建简单的服务端接口

    最近因为项目的需要,研究了一下webservice的使用: 这里以cxf2.7.0为例,大致介绍一下,也用于备份啦(张立胜) 大致介绍一下项目的情况:项目有maven管理,webservice调用的方 ...

  6. MD5 Tool 工具类

    package com.example.secret.tools; import java.io.UnsupportedEncodingException; import java.security. ...

  7. [转载]opencv +linux

    转载 ubuntu12.04安装openCV2.4.2(2012-08-08 16:54:06 参考http://www.samontab.com/web/2012/06/installing-ope ...

  8. linux查看磁盘空间

    首先如果需要查看整个磁盘还剩多少空间,可以使用命令: df -h 如果你并不关心磁盘还剩余多少空间,只是需要知道当前的文件夹下的磁盘使用情况,可以使用如下命令: -h 上面使用du --max-dep ...

  9. 用phpMyAdmin修改mysql数据库密码

    1初始数据库密码为空. 2第一步,点击phpMyAdmin里的用户选项. 3选择root localhost用户名,点击编辑权限. 4此时会出来修改权限的页面,里面可以设置的选项还是比较多的,暂时不管 ...

  10. hadoop调优之一:概述

    hadoop集群性能低下的常见原因 (一)硬件环境 1.CPU/内存不足,或未充分利用 2.网络原因 3.磁盘原因 (二)map任务原因 1.输入文件中小文件过多,导致多次启动和停止JVM进程.可以设 ...