粒子效果 触屏点击设置位置
来源:互联网 发布:数据备份自动还原 编辑:程序博客网 时间:2024/06/03 09:17
物体显示大小与投影方式有关;
2D坐标转换在屏幕上点击效果与物体深度有关 。
有关OpenGl 射线拾取
屏幕 2D 坐标 转换 OpenGL世界3D坐标
屏幕 使用的笛卡尔(直角坐标系)是坐标系 以 屏幕左上角 为起点(0,0)
OpenGl视口坐标 原点处于左下角
OpenGLX = ScreenX;
OpenGLY = ViewportHeight – ScreenY;
/**
* 获得模型在OpenGL 世界中坐标x,y,z
*/
GLU.gluUnProject(winX, winY, winZ, model, modelOffset, project, projectOffset, view, viewOffset, obj, objOffset)
//设置 屏幕2D坐标 转换 OpenGL世界3D坐标
public float[] setXY(GL10 gl) {
float[] ret = new float[4]; //OpenGL坐标 数组
if (gl != null) {
OpenGLX = PraticleX; //视口坐标 屏幕坐标换算 X
OpenGLY = getWidthHeiht()[0]- PraticleY;//视口坐标 屏幕坐标换算 Y
//获取 模型矩阵 投影矩阵
int[] bits = new int[16];
float[] model = new float[16];//模型矩阵
float[] proj = new float[16];//投影矩阵
gl.glGetIntegerv(GL11.GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES,
bits, 0);
for (int i = 0; i < bits.length; i++) {
model = Float.intBitsToFloat(bits);
}
// GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES
gl.glGetIntegerv(GL11.GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES,
bits, 0);
for (int i = 0; i < bits.length; i++) {
proj = Float.intBitsToFloat(bits);
}
//根据 视图坐标 模型矩阵 投影矩阵 获取OpenGL世界3维坐标
// new int[] { 0, 0, getWidth(), getHeight() } 视图窗口大小
GLU.gluUnProject((float) OpenGLX, (float) OpenGLY, 0, model, 0,
proj, 0, new int[] { 0, 0, getWidth(), getHeight() }, 0,
ret, 0);
}
return ret;
}
添加 投影设置 之前必须调用
glMAtrixMocle();
glLoadIdentity();
OpenGL 两种投影方式
正射投影 , 又叫平行投影 视景体是一个矩形的平行管道 不论物体距离相机多远, 投影后的物体大小尺寸都是不变的
void glOrtho();
void glOrtho2D(); 一个特殊的正射投影 是用于把二维图像投影到二维屏幕上
透视投影 , 即离视点越远物体越小 离视点越近物体越大 元到极致即为消失 成为光点
void glFrustum();
void gluPerspective();
2D坐标转换在屏幕上点击效果与物体深度有关 。
有关OpenGl 射线拾取
屏幕 2D 坐标 转换 OpenGL世界3D坐标
屏幕 使用的笛卡尔(直角坐标系)是坐标系 以 屏幕左上角 为起点(0,0)
OpenGl视口坐标 原点处于左下角
OpenGLX = ScreenX;
OpenGLY = ViewportHeight – ScreenY;
/**
* 获得模型在OpenGL 世界中坐标x,y,z
*/
GLU.gluUnProject(winX, winY, winZ, model, modelOffset, project, projectOffset, view, viewOffset, obj, objOffset)
//设置 屏幕2D坐标 转换 OpenGL世界3D坐标
public float[] setXY(GL10 gl) {
float[] ret = new float[4]; //OpenGL坐标 数组
if (gl != null) {
OpenGLX = PraticleX; //视口坐标 屏幕坐标换算 X
OpenGLY = getWidthHeiht()[0]- PraticleY;//视口坐标 屏幕坐标换算 Y
//获取 模型矩阵 投影矩阵
int[] bits = new int[16];
float[] model = new float[16];//模型矩阵
float[] proj = new float[16];//投影矩阵
gl.glGetIntegerv(GL11.GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES,
bits, 0);
for (int i = 0; i < bits.length; i++) {
model = Float.intBitsToFloat(bits);
}
// GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES
gl.glGetIntegerv(GL11.GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES,
bits, 0);
for (int i = 0; i < bits.length; i++) {
proj = Float.intBitsToFloat(bits);
}
//根据 视图坐标 模型矩阵 投影矩阵 获取OpenGL世界3维坐标
// new int[] { 0, 0, getWidth(), getHeight() } 视图窗口大小
GLU.gluUnProject((float) OpenGLX, (float) OpenGLY, 0, model, 0,
proj, 0, new int[] { 0, 0, getWidth(), getHeight() }, 0,
ret, 0);
}
return ret;
}
添加 投影设置 之前必须调用
glMAtrixMocle();
glLoadIdentity();
OpenGL 两种投影方式
正射投影 , 又叫平行投影 视景体是一个矩形的平行管道 不论物体距离相机多远, 投影后的物体大小尺寸都是不变的
void glOrtho();
void glOrtho2D(); 一个特殊的正射投影 是用于把二维图像投影到二维屏幕上
透视投影 , 即离视点越远物体越小 离视点越近物体越大 元到极致即为消失 成为光点
void glFrustum();
void gluPerspective();
0 0
- 粒子效果 触屏点击设置位置
- ListView设置点击效果
- TextView设置点击效果
- 粒子效果
- 粒子效果
- 粒子效果
- 粒子效果
- 粒子效果
- 粒子效果
- 网页效果获取鼠标点击的位置
- 点击button 发亮效果 设置
- 设置ImageButton的点击效果
- ImageView 点击效果 selector 设置
- 按钮的点击效果设置
- 利用xml设置点击效果
- Android CardView 设置点击效果
- 安卓设置点击效果
- 设置XML点击效果事件
- Java那些事:动态代理
- 什么是AIDL
- javascript入门
- C 语言中对各种数据结构的处理
- Linux awk指令
- 粒子效果 触屏点击设置位置
- 王垠:程序员的心理疾病
- Android 如何清空 Canvas 清屏只需三句话
- JQuery UI Drag and Drop在ipad和iphone上的解决办法
- java如何获得系统时间
- 动态规划—杭电2084 数塔
- 多继承与虚函数
- Struts2在myeclipse开发的乱码问题解决——属性文件的编辑问题
- 遗传算法matlab仿真实例