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. 主运行循环main run loop的一些理解

    应用主运行循环负责处理所有用户相关的事件.UIApplication对象在应用启动时安装主运行循环并且使用此循环去处理事件和处理基于视图的界面更新.正如名字所表明的,该主运行循环是在应用的主线程app ...

  2. CSS transform(变形)和transform-origin(变形原点)

    transform(变形)和transform-origin(变形原点)的说明: 目前这两个属性得到了除去ie以外各个主流浏览器webkit,firefox,opera的支持,属性名分别为 -webk ...

  3. 使用hbase的api创建表时出现的异常

    /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Didea.launcher.port=7538 -Didea.launcher.bin.path=/usr/l ...

  4. 光盘自动运行HTML页,Autorun文件写法

    1.把你的网页放在一个根目录下面,起名为index.html 2.在目录新建一个autorun.inf的文件,打开后编辑为以下内容: 代码如下: [autorun]icon=***.ico(加图标) ...

  5. git命令简图

    基本概念 版本库(repository)=.git目录 工作区(working)=当前工作的目录 暂存区(stage)=临时缓存 图示 仓库操作 分支操作 工作区操作 参考链接(相当好) http:/ ...

  6. 洛谷 P1896 互不侵犯King

    P1896 [SCOI2005]互不侵犯King 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 ...

  7. 在shell中运行以不同方式运行脚本

    在shell当中,可以有3中方式运行脚本: 1 . ./script_name 或者source ./script_name 2 直接./script_name 3 ./script_name &am ...

  8. Gora官方文档之二:Gora对Map-Reduce的支持

    参考官方文档:http://gora.apache.org/current/tutorial.html 项目代码见:https://code.csdn.net/jediael_lu/mygoradem ...

  9. C# winform 窗体 彻底退出窗体的方法

      1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application.Exit();  强制所有消 ...

  10. python之pandas模块

    一.pandas模块是基于Numpy模块的,pandas的主要数据结构是Series和DadaFrame,下面引入这样的约定: from pandas import Series,DataFrame ...