gluUnProject glUnProject4包含w值 glProject求取屏幕z坐标
来源:互联网 发布:七天网络查分登录app 编辑:程序博客网 时间:2024/06/08 07:33
1.gluUnProject传入OGL屏幕坐标值,产生世界坐标系中的值,经过ViewPort矩阵,Project矩阵,Model-View矩阵的逆变换得到。gluUnProject个参数中的值见OGL文档,其中winY值需要将窗口坐标系转换为OGL左下角的屏幕坐标系才能得到。winZ值需要已知物体世界坐标系中的z值经过glProject变换得到,才能获得屏幕中点击物体的正确世界坐标系值。
2.变换矩阵用glGetIntegerv查询获得(无论是固定管线,还是Shader可编程管线)。
GLint viewport[4];
GLdouble mvmatrix[16], projmatrix[16];
glGetIntegerv (GL_VIEWPORT, viewport);GLdouble mvmatrix[16], projmatrix[16];
glGetDoublev (GL_MODELVIEW_MATRIX, mvmatrix);
glGetDoublev (GL_PROJECTION_MATRIX, projmatrix);
实例代码:
/* * Copyright (c) 1993-2003, Silicon Graphics, Inc. * All Rights Reserved * * Permission to use, copy, modify, and distribute this software for any * purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright * notice and this permission notice appear in supporting documentation, * and that the name of Silicon Graphics, Inc. not be used in * advertising or publicity pertaining to distribution of the software * without specific, written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" AND * WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, LOSS OF * PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD * PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF * THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE * OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor clauses * in the FAR or the DOD or NASA FAR Supplement. Unpublished - rights * reserved under the copyright laws of the United States. * * Contractor/manufacturer is: *Silicon Graphics, Inc. *1500 Crittenden Lane *Mountain View, CA 94043 *United State of America * * OpenGL(R) is a registered trademark of Silicon Graphics, Inc. *//* * unproject.c * When the left mouse button is pressed, this program * reads the mouse position and determines two 3D points * from which it was transformed. Very little is displayed. */#include <GL/glut.h>#include <stdlib.h>#include <stdio.h>void display(void){ glClear(GL_COLOR_BUFFER_BIT); glFlush();}/* Change these values for a different transformation */void reshape(int w, int h){ glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (45.0, (GLfloat) w/(GLfloat) h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();}void mouse(int button, int state, int x, int y) { GLint viewport[4]; GLdouble mvmatrix[16], projmatrix[16]; GLint realy; /* OpenGL y coordinate position */ GLdouble wx, wy, wz; /* returned world x, y, z coords */ switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN) { glGetIntegerv (GL_VIEWPORT, viewport); glGetDoublev (GL_MODELVIEW_MATRIX, mvmatrix); glGetDoublev (GL_PROJECTION_MATRIX, projmatrix);/* note viewport[3] is height of window in pixels */ realy = viewport[3] - (GLint) y - 1; printf ("Coordinates at cursor are (%4d, %4d)\n", x, realy); gluUnProject ((GLdouble) x, (GLdouble) realy, 0.0, mvmatrix, projmatrix, viewport, &wx, &wy, &wz); printf ("World coords at z=0.0 are (%f, %f, %f)\n", wx, wy, wz); gluUnProject ((GLdouble) x, (GLdouble) realy, 1.0, mvmatrix, projmatrix, viewport, &wx, &wy, &wz); printf ("World coords at z=1.0 are (%f, %f, %f)\n", wx, wy, wz); } break; case GLUT_RIGHT_BUTTON: if (state == GLUT_DOWN) exit(0); break; default: break; }}void keyboard(unsigned char key, int x, int y){ switch (key) { case 27: exit(0); break; }} /* * Open window, register input callback functions */int main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc (keyboard); glutMouseFunc(mouse); glutMainLoop(); return 0;}
0 0
- gluUnProject glUnProject4包含w值 glProject求取屏幕z坐标
- gluUnProject
- gluUnProject
- gluUnProject()函数得到的是什么坐标
- 读取Z Buffer深度值将屏幕2D坐标转化为场景3D坐标源码
- OpenGL通过读取Z Buffer深度值将屏幕2D坐标转化为场景3D坐标(含完整源码)
- 通过读取Z Buffer深度值将屏幕2D坐标转化为场景3D坐标(含程序和源码)
- OpenGL通过读取Z Buffer深度值将屏幕2D坐标转化为场景3D坐标(含完整源码)
- HDU4147 KFC -Z+W
- 【模拟】HDU4147KFC -Z+W
- 屏幕坐标,鼠标坐标,屏幕宽度等取值方式
- OpenGL三维坐标与二维坐标:gluProject 和 gluUnproject 的详解
- Z-Buffer 与 W-Buffer
- Z buffer 和 W buffer
- Z-Buffer 和 W-Buffer
- HDU 4147 KFC -Z+W
- z-buffer 与 w-buffer
- Z-buffer与W-buffer
- 分类:最近邻knn
- linux 查看端口号 以及进程的状态
- 2016-6-3:实验室第九天
- svn 之"回到以前的版本"
- HttpClient Post 二进制/字节流/byte[]
- gluUnProject glUnProject4包含w值 glProject求取屏幕z坐标
- opencv 各个版本 与vs 的匹配关系
- 结合AFNetworking 和 MJExtension的二次网络请求的封装
- image super-resolution as sparse representation of raw image patches 论文详解
- AJXA的基本使用方法和代码
- Android设计模式源码解析之单例模式
- Java中如何将中文转换为英文String
- JMeter之 Non-GUI Mode (Command Line mode)
- 【java】Handler,Looper,Message,MessageQueue。【android】HandlerThread+Looper