1. 程式人生 > >android opengl es--三角形,四邊形

android opengl es--三角形,四邊形

import java.nio.FloatBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView;

public class OneRend implements GLSurfaceView.Renderer {

 float oneF = 1.0f;
 float quadRotate = 0f;
 private FloatBuffer triggerBuffer2 = FloatBuffer.wrap(new float[] { 0,
   oneF, 0, -oneF, -oneF, 0, oneF, -oneF, 0 });

 private FloatBuffer triggerBuffer1 = FloatBuffer.wrap(new float[] { oneF,
   oneF, 0, -oneF, oneF, 0, oneF, -oneF, 0, -oneF, -oneF, 0 });

 private FloatBuffer color = FloatBuffer.wrap(new float[] { oneF, oneF, 0,
   oneF, -oneF, oneF, 0, oneF, oneF, -oneF, 0, oneF, -oneF, -oneF, 0,
   oneF });

 public OneRend() {
 }

 /**
  * 畫圖
  */
 public void onDrawFrame(GL10 gl) {
  // 清除深度快取
  gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT);
  // 重置觀察模式
  gl.glMatrixMode(GL10.GL_MODELVIEW);
  gl.glLoadIdentity();
  // 平移中心(左移1.5個單位,向螢幕內移6.0個單位)
  gl.glTranslatef(-1.5f, 0.0f, -4.0f);
  gl.glRotatef(quadRotate, 0, .5f, 0f);
  // gl.glColor4f(1f, 0f, 0f, 1f);
  // 啟用裝置狀態,準備用頂點的方式來繪製
  gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  gl.glEnableClientState(gl.GL_COLOR_ARRAY);
  gl.glVertexPointer(3, gl.GL_FLOAT, 0, triggerBuffer2);
  gl.glColorPointer(4, gl.GL_FLOAT, 0, color);
  gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
  gl.glFinish();

  gl.glTranslatef(3.0f, 0.0f, 0.0f);
  gl.glRotatef(quadRotate, 0.0f, 1f, 0f);
  // gl.glColor4f(0f, 1f, 0f, 1f);
  gl.glVertexPointer(3, gl.GL_FLOAT, 0, triggerBuffer1);
  gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
  gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
  gl.glDisableClientState(gl.GL_COLOR_ARRAY);
  quadRotate += .5f;
 }

 /**
  * 大小改變時
  */
 public void onSurfaceChanged(GL10 gl, int width, int height) {
  if (height == 0) {
   height = 1;
  }
  float ratio = (float) width / height;
  gl.glViewport(0, 0, width, height);
  // 選擇投影矩陣
  gl.glMatrixMode(gl.GL_PROJECTION);
  // 重置投影矩陣
  gl.glLoadIdentity();
  // 設定視口大小
  gl.glFrustumf(-ratio, ratio, -1, 1, 1f, 10.0f);
  // 選擇模型觀察矩陣
  gl.glMatrixMode(gl.GL_MODELVIEW);
  // 重置
  gl.glLoadIdentity();

 }

 /**
  * 實使化工作
  */
 public void onSurfaceCreated(GL10 gl, EGLConfig config) {
   gl.glEnable(GL10.GL_DEPTH_TEST);
         gl.glDepthFunc(GL10.GL_LEQUAL);
  // 取消抖動
  gl.glDisable(GL10.GL_DITHER);
  // 陰影平滑
  gl.glShadeModel(gl.GL_SMOOTH);
  // 黑色背景
  gl.glClearColor(0, 0, 0, 0);
  // 設定深度快取
  gl.glClearDepthf(1.0f);
  // 啟用深度測試
  gl.glEnable(gl.GL_DEPTH_TEST);
  gl.glEnable(GL10.GL_CULL_FACE);
  gl.glEnable(GL10.GL_BLEND); // 開啟混合
  // 設定深度測試型別(深度小的時候也渲染)
  gl.glDepthFunc(gl.GL_LEQUAL);
  gl.glDisable(GL10.GL_DEPTH_TEST); // 關閉深度測試
  gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE); // 基於源象素alpha通道值的半透明混合函式
  // 最好的視角修正
  gl.glHint(gl.GL_PERSPECTIVE_CORRECTION_HINT, gl.GL_FASTEST);
 }
}

import zhou.ne.he.four.FourRend;
import zhou.ne.he.one.OneRend;
import zhou.ne.he.thri.ThriRend;
import zhou.ne.he.two.TwoRend;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;

public class Run extends Activity {

 private GLSurfaceView gl_view = null;
 private GLSurfaceView.Renderer gl_rend = null;
 private float mPreviousX;
 private float mPreviousY;

 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  gl_view = new GLSurfaceView(this);
  gl_rend = new FourRend(this.getApplicationContext());
//  gl_rend = new OneRend();
//  gl_rend = new TwoRend();
//  gl_rend = new ThriRend(this.getApplicationContext());
  gl_view.setRenderer(gl_rend);
  setContentView(gl_view);
 }

 public boolean onKeyUp(int keyCode, KeyEvent event) {
  ((ThriRend) gl_rend).onKeyUp(keyCode, event);
  return false;
 }

 public boolean onTouchEvent(MotionEvent event) {
  float x = event.getX();
  float y = event.getY();
  if (event.getAction() == event.ACTION_MOVE) {
   ((ThriRend) gl_rend).rato += (x - mPreviousX) * 0.5f;
  }
  mPreviousX = x;
  mPreviousY = y;
  return super.onTouchEvent(event);
 }

 protected void onResume() {
  super.onResume();
  gl_view.onResume();
 }

 protected void onPause() {
  super.onPause();
  gl_view.onPause();
 }
}

相關推薦

android opengl es--三角形四邊形

import java.nio.FloatBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import an

android opengl es--紋理對映光照

import zhou.ne.he.four.FourRend; import zhou.ne.he.one.OneRend; import zhou.ne.he.thri.ThriRend; import zhou.ne.he.two.TwoRend; import a

Android OpenGL ES 開發(二)— 繪製三角形

        在前一篇部落格我們知道了Android中OpenGL ES是什麼,然後知道了怎麼搭建一個OpenGL ES的執行環境,現在我們就來開始繪製我們自己想要的圖形了(繪製圖片會在後面講解,因為繪製圖形是繪製圖片的基礎),我們最先開始繪製一個三角形

android opengl es新增紋理繪製立方體紋理立方體使用不同紋理

           紋理就是給物體表面新增圖片,色彩之類,可以認為是上色。            基本步驟: 開啟紋理開關建立紋理繫結紋理設定紋理引數生成紋理設定紋理頂點資料 具體看如下程式碼: @Override public void onSurfaceCrea

Android OpenGL ES 入門系列(一) --- 了解OpenGL ES的前世今生

target 初始化 vertex 單獨 http hang tex 變化 3d圖 轉載請註明出處 本文出自Hansion的博客 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三維圖形 API 的子集,

Android OpenGL ES 開發教程 22 繪製一個球體

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android OpenGL ES 簡明開發教程一 概述

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android OpenGL ES 簡明開發教程二 構造OpenGL ES View

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android OpenGL ES 簡明開發教程三 3D繪圖基本概念

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android OpenGL ES 開發教程 5 關於EGL

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

從零開始OpenGL ES(三) 繪製四邊形

原理 現在要實現用OpenGLES 實現四邊形. 一個四邊形是可以由兩個三角形構成 那麼我畫兩個相連的三角形來實現一個四邊形. 如圖 有個規定.:圖形環繞方向必須一致,要麼全是順時針 要麼全是逆時針 1、GL_TRIANGLES: v1, v2, v3, v3, v

Android OpenGL ES 簡明開發教程一:概述

ApiDemos 的Graphics示例中含有OpenGL ES 例子,OpenGL ES 主要用來開發3D圖形應用的。OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三維圖形 API 的子集,針對手機、PDA和遊戲主機等嵌入式裝置而設計。 下面

Android OpenGL ES 簡明開發教程_真正的3D圖形

摘要:該系列文章均轉載自/content/540025.html由於原文好像無法開啟,正好自己有記錄,所以正好分享出來。Mesh(網格,三角面)是構成空間形體的基本元素,前面的正方形也是由兩個Mesh構成的。本篇將介紹使用Mesh構成四面體,椎體等基本空間形體。Design設計在使用Ope

Android OpenGL ES濾鏡開發之美顏效果

前言 其實之前我就是已經把美顏效果啥的都做完了,但是就一直懶得記錄,今天來記錄一下,之前記錄的就是大眼睛還有貼紙的效果。以前的時候不愛寫部落格,總覺得很麻煩,現在發現寫部落格是用來總結複習很好的一個途徑,很多時候寫效果或者做些什麼,就基本就是做完就完事兒了,也不去總結一下或者拿來複習一下

Android OpenGL ES基礎

前言 此篇僅僅介紹一些概念,其他的內容,會在後面更新,後面內容會以仿抖音小視訊專案形式進行介紹。 什麼是OpenGL ES OpenGL :Open Graphics Library 圖形領域的工業標準,是一套跨程式語言、跨平臺的、專業的圖形程式設計(軟體)介面。它主

Android OpenGL ES 開發教程 26 設定光照效果Set Lighting

                上一篇簡單介紹了OpenGL中使用的光照模型,本篇結合OpenGL ES API說明如何使用光照效果:設定光源定義法線設定物體材料光學屬性光源OpenGL ES中可以最多同時使用八個光源,分別使用0到7表示。OpenGL ES光源可以分為平行光源(Parallel light

Android OpenGL ES- Cube Map

                Cube Map,中文可以翻譯成立方環境對映,下面是摘自維基百科的說明:立方反射對映是用立方對映使得物體看起來如同在反射周圍環境的一項技術。通常,這通常使使用者外渲染中使用的 skybox 完成。儘管由於反射物周圍的物體無法在結果中看到,所以這並不是一個真正的反射,但是通常仍然

20190103-列印各種型別的三角形四邊形

1. 列印四邊形 * * * * * * * ** * * * * * * ** * * * * * * ** * * * * * * ** * * * * * * *如圖:四邊形由寬和高構成,將寬轉換為每行列印的的個數,將高轉換為列印的行數 def quadrangle_generate(widt

Android OpenGL ES(一)----必備知識

1.手機的座標空間 我們都知道要想在手機上隨心所欲的繪製圖形,就必須瞭解手機的座標體系。下圖就是將座標對映到手機螢幕的座標。  圖1手機螢幕基本座標系 2.OpenGL基本圖形 在OpenGL裡,只能繪製點,直線以及三角形。 三角形是最基本的圖形,因為它的結構如此

初學Android,OpenGL ES之使用紋理(八十三)

在網上發現這些講紋理的文章,非常不錯android 遊戲導引(4. 簡單紋理貼圖)Android OpenGL es 紋理座標設定與貼圖規則Android OpenGL | ES給立方體進行紋理對映這篇的例子也是立方體的紋理,不過是用手指劃過讓立方體旋轉使用紋理的重要程式碼如