本例子参考于网络,并进行了一些修改,使用glut+vs2008来实现。

在鼠标点击处重新画一个旋转的红色立方体!

参考代码如下:

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
 
#include <GL/glut.h>
#include <GL/glu.h>
#include <GL/gl.h>
#include <vector>

using namespace std;

typedef struct Point3D
{
    double objx;
    double objy;
    double objz;
}POINT_3D, *PPOINT_3D;

;
;
;
;
vector<POINT_3D> vec3dPoint;
vector<POINT_3D>::iterator it;

#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")

/*THE FUNCTION TO DRAW THE STUFF ON THE SCREEN*/
void display( )
{
    glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT );
    
    //The big green floor like polygon
    glBegin( GL_POLYGON );
    glColor3f(  );
    glVertex3f( -  );
    glVertex3f( -  );
    glVertex3f(  );
    glVertex3f(  );
    glEnd( );

for (it = vec3dPoint.begin(); it != vec3dPoint.end(); it++)
    {
        //The red cube to be drawn at clicked position
        glPushMatrix( );
        glColor3f(  );
        glTranslatef( it->objx,it->objy,it->objz );
        glRotatef(angle, );
        angle++;
        )
        {
            angle = ;
        }
        glutSolidCube(  );
        glPopMatrix( );
    }

glFlush( );
    glutSwapBuffers( );
}

void mouse( int button, int state, int x, int y)
{
    ];
    ];
    ;
    
    /*Read the projection, modelview and viewport matrices
    using the glGet functions.*/
    glGetDoublev( GL_PROJECTION_MATRIX, projection );
    glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
    glGetIntegerv( GL_VIEWPORT, viewport );

//Read the window z value from the z-buffer 
, GL_DEPTH_COMPONENT, GL_FLOAT, &z );

//Use the gluUnProject to get the world co-ordinates of
    //the point the user clicked and save in objx, objy, objz.
]-y, 0.0, modelview, projection, viewport, &objnx, &objny, &objnz );
    gluUnProject( x, viewport[]-y, z, modelview, projection, viewport, &objx, &objy, &objz );
    gluUnProject( x, viewport[, modelview, projection, viewport, &objfx, &objfy, &objfz );
    POINT_3D objxyz;
    objxyz.objx = objx;
    objxyz.objy = objy;
    objxyz.objz = objz;
    vec3dPoint.push_back(objxyz);
}

void initVector()
{
    vec3dPoint.clear();
    POINT_3D objxyz;
    objxyz.objx = objx;
    objxyz.objy = objy;
    objxyz.objz = objz;
    vec3dPoint.push_back(objxyz);
}

void init( int width, int height )
{
    glViewport( , width, height );
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity( );
    gluPerspective(  );
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity( );
    gluLookAt(  );
}

int main( int argc, char **argv )
{
    glutInit( &argc, argv );
    //The most important part specify the things your
    //glut window should provide
    glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
    glutInitWindowSize(  );
    glutCreateWindow("gluUnProject Demo");
    
    glClearColor(  );
    //enable z buffer
    glEnable( GL_DEPTH_TEST );
    //set the value in z-buffer as 1.0
 );
    initVector();
    init(  );
    glutDisplayFunc( display );
    glutReshapeFunc( init );
    glutIdleFunc( display );
    glutMouseFunc( mouse );
    glutMainLoop( );
}

最新文章

  1. windowsxp设置开机不需密码,但是锁定后打开需要密码
  2. MAC安装M2Crypto报command &#39;cc&#39; failed with exit status 1
  3. CentOS6.4 安装Nagios 并监控端口
  4. android开发之socket快传文件以及消息返回
  5. Hadoop概念学习系列之谈谈RPC(三十三)
  6. 《ASP.NET 本质论》HttpApplication的处理管道 ,HttpMoudle,HttpHandler
  7. IOS内存nil与release的区别
  8. pv ticketlock解决虚拟环境下的spinlock问题
  9. eclipse 默认jdk 的设置 eclipse.ini -vm 参数
  10. 你也可以玩转Skype -- 基于Skype API开发外壳程序入门
  11. 内存溢出System.OutOfMemoryException
  12. octomap中3d-rrt路径规划
  13. mac电脑操作
  14. java后台通过Servlet给用户发送手机短信验证码,第一次写勿喷,欢迎转载
  15. C程序员眼里的Python
  16. mac 命令行安装软件
  17. BZOJ1916[USACO 2010 Open Gold 2.Water Slides]——DP+记忆化搜索
  18. ztree实现表格风格的树状结构
  19. javascript:FileReader对象(读取文件)
  20. 1.7.6方法stop()与java.lang.threadDeath异常

热门文章

  1. 修改button的可点击区域
  2. C++泛型编程(1)--自己实现C++迭代器/遍历器 iterator
  3. Structured Streaming教程(2) —— 常用输入与输出
  4. B - 可能的路径(gcd变形)
  5. Android开发中遇到的问题(四)——Android中WARNING: Application does not specify an API level requirement!的解决方法
  6. Axure RP Pro 7.0苏宁易购式标签切换效果教程
  7. 微信小程序 —— 动态决定页面元素显示或隐藏的技巧
  8. c++中string类对象和字符数组之间的相互转换
  9. 折叠代码块 C#中用 #region和#endregion java中用 //region和//endregion
  10. 手把手教你用CAB发布OCX的简单办法