OPENGL 坐标轴转换
- 坐标轴
- 平移
- 旋转
- 缩放
- 重置坐标轴
- 矩阵操作
- 示例

- public abstract void glTranslatef(float x ,float y, float z)
- gl.glTranslatef(0,0,-3);
3、旋转
- public abstract void glRotatef(float angle,float x,float y,float z)
- public abstract void glScalef(float x,float y,float z)
- gl.glTranslatef(2,0,0);
- gl.glScalef(0.5f,0.5f,0.5f);
先进行缩放,后平移
- gl.glScanlef(0.5f,0.5f,0.5f);
- gl.glTranslatef(2,0,0);
- public abstract void glLoadIdentity();
- public abstract void glPushMatrix();
复制当前操作后的矩阵保存到堆栈中.
glPopMatrix
- public abstract void glPopMatrix();
- public class GLES20Renderer3 implements GLSurfaceView.Renderer{
- private Square square;
- private float angle=0;
- public GLES20Renderer3(){
- square=new Square();
- }
- @Override
- public void onSurfaceCreated(GL10 gl, EGLConfig config) {
- gl.glClearColor(0.0f,0.0f,0.0f,0.5f);
- gl.glShadeModel(GL10.GL_SMOOTH);
- gl.glClearDepthf(1.0f);
- gl.glEnable(GL10.GL_DEPTH_TEST);
- gl.glDepthFunc(GL10.GL_LEQUAL);
- gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_NICEST);
- }
- @Override
- public void onSurfaceChanged(GL10 gl, int width, int height) {
- gl.glViewport(0,0,width,height);
- gl.glMatrixMode(GL10.GL_PROJECTION);
- gl.glLoadIdentity();
- GLU.gluPerspective(gl,45.0f,(float)width/(float)height,0.1f,100.0f);
- gl.glMatrixMode(GL10.GL_MODELVIEW);
- gl.glLoadIdentity();
- }
- @Override
- public void onDrawFrame(GL10 gl) {
- gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
- gl.glLoadIdentity();
- gl.glTranslatef(0,0,-10);
- //A
- gl.glPushMatrix();
- gl.glRotatef(angle,0,0,1);
- square.draw(gl);
- gl.glPopMatrix();
- //B
- gl.glPushMatrix();
- gl.glRotatef(-angle,0,0,1);
- gl.glTranslatef(2,0,0);
- gl.glScalef(.5f,.5f,.5f);
- square.draw(gl);
- //C
- gl.glPushMatrix();
- gl.glRotatef(-angle,0,0,1);
- gl.glTranslatef(2,0,0);
- gl.glScalef(.5f,.5f,.5f);
- square.draw(gl);
- gl.glPopMatrix();
- gl.glPopMatrix();
- angle++;
- }
- }
- public class Square {
- private float vertices[]={
- -1.0f,1.0f,0.0f,
- -1.0f,-1.0f,0.0f,
- 1.0f,-1.0f,0.0f,
- 1.0f,1.0f,0.0f,
- };
- private short[] indices={0,1,2,0,2,3};
- private FloatBuffer vertexBuffer;
- private ShortBuffer indexBuffer;
- public Square(){
- ByteBuffer vbb=ByteBuffer.allocateDirect(vertices.length*4);
- vbb.order(ByteOrder.nativeOrder());
- vertexBuffer=vbb.asFloatBuffer();
- vertexBuffer.put(vertices);
- vertexBuffer.position(0);
- ByteBuffer ibb=ByteBuffer.allocateDirect(indices.length*2);
- ibb.order(ByteOrder.nativeOrder());
- indexBuffer=ibb.asShortBuffer();
- indexBuffer.put(indices);
- indexBuffer.position(0);
- }
- public void draw(GL10 gl){
- gl.glFrontFace(GL10.GL_CCW);
- gl.glEnable(GL10.GL_CULL_FACE);
- gl.glCullFace(GL10.GL_BACK);
- gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
- gl.glVertexPointer(3,GL10.GL_FLOAT,0, vertexBuffer);
- gl.glDrawElements(GL10.GL_TRIANGLES,indices.length,GL10.GL_UNSIGNED_SHORT,indexBuffer);
- gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
- gl.glDisable(GL10.GL_CULL_FACE);
- }
- }
OPENGL 坐标轴转换的更多相关文章
- cocos2d-x 屏幕坐标系和OPenGL坐标系转换
转自:http://home.cnblogs.com/group/topic/57609.html cocos2d坐标系(OPenGL坐标系):以左下角为原点,x向右,y向上 屏幕坐标系(androi ...
- Codeforces 989 P循环节01构造 ABCD连通块构造 思维对云遮月参考系坐标轴转换
A 直接判存不存在连续的三个包含A,B,C就行 /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a ...
- 3DMAX导出到Unity坐标轴转换问题
这是我在3dmax中创建的1cm*1cm*1cm的立方体,右图为3dmax中的坐标系 当我们把这个立方体导入到unity中发现x轴意外的扭转了90度 为了解决这个问题,你需要对模型做出修正 1.选 ...
- obj2opengl:转换OBJ 3D模型到iPhone OpenGL ES兼容的数组中
原文如下:obj2opengl: convert obj 3D models to arrays compatible with iPhone OpenGL ES obj2opengl在GitHub中 ...
- iOS——Core Animation 知识摘抄(四)
原文地址http://www.cocoachina.com/ios/20150106/10840.html 延迟解压 一旦图片文件被加载就必须要进行解码,解码过程是一个相当复杂的任务,需要消耗非常长的 ...
- OSG模型简单控制
OSG模型简单控制 转自:http://milkcu.sintune.net/blog/archives/1392673560.html 结点基本操作 添加结点 OSG中使用osg::Node和osg ...
- [OSG]如何用Shader得到物体的世界坐标
来自:http://www.cnblogs.com/hesicong/archive/2008/05/27/1208312.html 最近群里面有个朋友问我关于如何得到OpenGL世界坐标的问题,当时 ...
- CoreAnimation6-基于定时器的动画和性能调优
基于定时器的动画 定时帧 动画看起来是用来显示一段连续的运动过程,但实际上当在固定位置上展示像素的时候并不能做到这一点.一般来说这种显示都无法做到连续的移动,能做的仅仅是足够快地展示一系列静态图片,只 ...
- 【转】iOS-Core-Animation-Advanced-Techniques(六)
原文:http://www.cocoachina.com/ios/20150106/10839.html 基于定时器的动画和性能调优 基于定时器的动画 我可以指导你,但是你必须按照我说的做. -- 骇 ...
随机推荐
- MySQL必知必会(Select)
SELECT prod_name FROM products; SELECT prod_id, prod_name, prod_price FROM products; SELECT * FROM p ...
- luogu P2740 [USACO4.2]草地排水Drainage Ditches |网络流
题目背景 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没 ...
- [TimLinux] Python 修改进程显示出的标题
1. 安装依赖 https://github.com/timscm/py-setproctitle/archive/version-1.1.10.tar.gz 2. 启动进程 import timei ...
- windows程序设计00_HelloWorld
#include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR sz ...
- Spring MVC文件上传出现错误:Required MultipartFile parameter 'file' is not present
1.配置文件上传的解析器 首先需要在spring mvc的配置文件中(注意是spring mvc的配置文件而不是spring的配置文件:applicationContext.xml)配置: sprin ...
- 【JS】312- 复习 JavaScript 严格模式(Strict Mode)
点击上方"前端自习课"关注,学习起来~ 注:本文为 < JavaScript 完全手册(2018版) >第30节,你可以查看该手册的完整目录. 严格模式是一项 ES5 ...
- Linux源码编译安装httpd
Linux安装软件采用源码编译安装灵活自由,适用于不同平台,维护也十分方便. 源码编译的安装方式一般由3个步骤组成: 1.配置(configure) 2.编译(make) 3.安装(make inst ...
- 大数据学习笔记——Hadoop编程实战之HDFS
HDFS基本API的应用(包含IDEA的基本设置) 在上一篇博客中,本人详细地整理了如何从0搭建一个HA模式下的分布式Hadoop平台,那么,在上一篇的基础上,我们终于可以进行编程实操了,同样,在编程 ...
- pycharm连接mysql
pycharm 换成2019之后连接数据库用户名密码数据库名字都没错,就是连接不上去,网上百度一下,试试将URL后面拼接 ?useSSL=false&serverTimezone=UTC 发现 ...
- LVM(逻辑卷管理器)部署、扩容、缩小
物理卷 -- Physical Volume -- PV 卷组 -- Volume Group -- VG 逻辑卷 -- Logical Volume -- LV 1.硬盘设备管理技术虽然能够有效 ...