- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用 OpenGL 绘制了几个二维形状现在我想添加捏/缩放。我的观点是透视图(顶 View )。我假设它是 3D,z 轴 = 0。
现在,我应该如何更改 glfrustum 并在我的 Activity 中添加触摸方法,以便我能够捏合/缩放?
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 25);
我觉得应该是这样的
gl.glFrustumf(-ratio, ratio, -1, 1, 1*zoom, 25*zoom);
但是touch方法应该怎么写来改变这个缩放参数来做双指缩放呢?
现在的问题是渲染器,我在末尾添加了缩放方法,但是在缩放方法中它给我错误 gl.glfrustum 而在 onsurfacechanged 上它没有给我同样的错误!我该如何解决?
public class GLrenderer implements Renderer {
public GLqueue tri;
public GLrenderer() {
tri = new GLqueue();
}
public void onSurfaceCreated(GL10 gl, EGLConfig eglConfig) {
// TODO Auto-generated method stub
gl.glDisable(GL10.GL_DITHER);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glClearColor(.0f, .0f, .0f, 0f);
gl.glClearDepthf(1f);
}
public void onDrawFrame(GL10 gl) {
// TODO Auto-generated method stub
gl.glDisable(GL10.GL_DITHER);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_COLOR_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
GLU.gluLookAt(gl, 0, 0, -5, 0, 0, 0, 0, 2, 0);
//gl.glRotatef(1, 1, 0, 0);
// gl.glRotatef(10, 0, 0, 1);
tri.draw(gl);
}
public void onSurfaceChanged(GL10 gl, int width, int height ) {
// TODO Auto-generated method stub
gl.glViewport(0, 0, width, height);
float ratio = (float) width / height;
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 25);
}
public static void zoom(float d2) {
// TODO Auto-generated method stub
int zoom = (int) (zoom*d2);
gl.glFrustumf(-ratio, ratio, -1, 1, 1*zoom, 25*zoom);
}
}
最佳答案
如果你有一些决定缩放的浮点值,你可以使用这个:
glFrustum(left*zoom, right*zoom, bottom*zoom, top*zoom, near, far);
这是一个例子:
摘自 OnTouchListener
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
pointers = 1;
return true;
case MotionEvent.ACTION_POINTER_2_DOWN:
pointers = 2;
distance = fingerDist(event);
return true;
case MotionEvent.ACTION_MOVE:
if( pointers == 2 ){
float newDist = fingerDist(event);
float d = distance/newDist;
renderer.zoom(d);
distance = newDist;
}
return true;
default:
return false;
}
}
protected final float fingerDist(MotionEvent event){
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}
来自渲染器
:
public final void zoom(float mult){
zoom *= mult;
Matrix.frustumM(
pMatrix, 0,
zoom*left, zoom*right, zoom*bottom, zoom*top,
near, far);
}
请注意,此代码是为 gles 2.0 而不是 1.0 编写的,因此不是调用 Matrix.frustumM()
,而是调用 gl.glFrustumf()
。您可能必须将此操作发布到您的 gl 线程才能正常工作。
关于Android 捏/缩放和 glfrustum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10449749/
根据 MSDN,我们将当前矩阵与透视矩阵相乘。我们在这里谈论什么矩阵?同样来自 MSDN: "The glFrustum function multiplies the current matrix
我正在尝试使用 C++ 和 openGL 创建一个 3D 操作程序。我对 openGL 比较陌生,所以我经常需要查阅文档才能找到正确的函数来完成我想做的事情。我认为我对正交投影和透视投影有很好的理解(
关于使用 glFrustum, glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1, 1, -1, 1, 0.1, 1000.0);
我有这个代码: /* * This is a simple program that computes FPS * by means of a circular buffer */ #inclu
目前我将 glFrustum 设置为 glFrustum(0, 100.0, 0, 100.0, -50, 50); 我的图像是一个矩形立方体,尺寸为:当形状的尺寸小于查看框时,为什么我看不到图像?
我刚开始阅读有关 OpenGL 的主题,特别是关于 Viewing 的内容满足我目前的需求。我正在尝试理解 glFrustum 以了解我在屏幕上绘制的对象的透视投影,据我所知,glFrustum 会使
我正在尝试使用 OpenGL 对场景进行离轴投影,并且我阅读了文档给 Robert Kooima's off-axis projection并且现在对实际必须做的事情有了更好的了解,但仍有一些我在这里
我有一个程序,可以根据用户的位置在屏幕上渲染场景。当用户改变位置时,平截头体改变以提供离轴投影。我想利用该技术在三个不同的显示器上工作,将一个更大的场景拼接在一起,具有以下类型: 想象一下在三个显示器
我使用 OpenGL 绘制了几个二维形状现在我想添加捏/缩放。我的观点是透视图(顶 View )。我假设它是 3D,z 轴 = 0。 现在,我应该如何更改 glfrustum 并在我的 Activit
我正在尝试使用 glFrustum 进行透视投影,据我所知,glFrustum 像 glOrtho 可用于修改我们的映射所需的坐标系到实际屏幕坐标(如 Blue book 中所读)。所以,如果我执行
我的老师说它们可以互换使用来影响投影矩阵。他认为 gluLookAt()之所以优选使用,是因为它“由于能够定义视角而相对简单”。这是真的?我见过同时使用 gluLookAt() 的代码示例和 glFr
我想知道 gluLookAt 和 glFrustum 是否会扭曲渲染的图片。 场景是这样渲染的: 这是呈现它的代码。 InitCamera 被调用一次 并且,据我现在的理解,应该设置一个矩阵,就好像我
我正在调试我想查看深度图像扫描的代码,但我的相机设置不允许我看到扫描。因此,我正在玩弄相机设置。我在 (30,120,800) 处创建了一个巨大的点,我可以使用 gluLookAt 看到它。 glFr
我试图在窗口上画一条线,但它没有用 glFrustum() 显示。我在 glOrtho() 中使用了相同的代码,它确实显示了该行。我还需要设置什么才能让我的线路显示在设置窗口上吗? void init
原始问题/代码 我正在微调 3D 对象的渲染并尝试使用 gluLookAt 实现相机跟随对象,因为对象的中心 y 位置一旦达到其最大高度就会不断增加。下面是我设置 ModelView 和投影矩阵的代码
我正在编写一个太空探索应用程序。我决定以光年为单位,并准确地模拟了恒星之间的距离。经过修补和大量艰巨的工作(主要是学习绳索),我让相机从穿越宇宙的星舰的角度正常工作。 最初我没有注意 gluPersp
我只是使用 LWJGL 3 设置一个简单的渲染器,当它在我的外部显示器上运行时,它看起来像我预期的那样,但是当在我的 Macbook 上调整它的大小时,它会缩小视口(viewport)。然后,如果我移
我正在完成一项绘制线框 GLUT 标准对象的任务。这看起来很简单,但我们被告知我们不能使用 gluAtLook()、glOrtho()、glFrustrum,但我们必须使用 glTranslate()
我一直在使用 OpenGL 3.0,让我困惑的一件事是新的 OpenGL 如何处理视锥体。如果您应该为透视计算创建自己的矩阵,那么如何向 OpenGL 指定 zFar 和 zNear 平面距离是多少?
概述: 我正在尝试创建一个类似于此的 3D 应用程序: www.youtube.com/watch?v=h9kPI7_vhAU. 我正在使用 OpenCV2.2、Python2.7 和 pyOpenG
我是一名优秀的程序员,十分优秀!