`
暴风雪
  • 浏览: 388074 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[opengl]简单的opengl程序,实现四方体左右移动以及响应键盘运动

 
阅读更多
#ifndef GLUT_DISABLE_ATEXIT_HACK
#define GLUT_DISABLE_ATEXIT_HACK
#endif #define GLEW_STATIC
#include <GL/glew.h>
#include <GL/wglew.h>
#include <GL/freeglut.h>
#include <vector>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp> //for matrices
#include <glm/gtc/type_ptr.hpp>
//undefine if u want to use the default bending constraint of pbd
#include<iostream>
using namespace std;

GLfloat rtx = 0.0f, rty = 0.0f, rtz = 0.0f;
GLfloat step = 0.0005;
//float exp1 = 1e-3;

void init()
{
	glLoadIdentity();
	glClearColor(0.0, 0.0, 0.0, 0.0);
}

void draw(void)
{
	glClear(GL_COLOR_BUFFER_BIT);

	glPushMatrix();
	printf("%f %f %f\n", rtx, rty, rtz);
	glTranslatef(rtx, rty, rtz);

	glBegin(GL_QUADS);
		glColor3f(1.0f, 0.0f, 0.0f);
		glVertex2f(-0.5f, 0.5f);
		glColor3f(0.0f, 1.0f, 0.0f);
		glVertex2f(0.5f, 0.5f);
		glColor3f(0.0f, 0.0f, 1.0f);
		glVertex2f(0.5f, -0.5f);
		glColor3f(0.5f, 0.5f, 0.5f);
		glVertex2f(-0.5f, -0.5f);
	glEnd();

	glPopMatrix();
	glutSwapBuffers();
}


/* special key defined in glut
#define GLUT_KEY_F1			1
#define GLUT_KEY_F2			2
#define GLUT_KEY_F3			3
#define GLUT_KEY_F4			4
#define GLUT_KEY_F5			5
#define GLUT_KEY_F6			6
#define GLUT_KEY_F7			7
#define GLUT_KEY_F8			8
#define GLUT_KEY_F9			9
#define GLUT_KEY_F10			10
#define GLUT_KEY_F11			11
#define GLUT_KEY_F12			12

#define GLUT_KEY_LEFT			100
#define GLUT_KEY_UP			101
#define GLUT_KEY_RIGHT			102
#define GLUT_KEY_DOWN			103
#define GLUT_KEY_PAGE_UP		104
#define GLUT_KEY_PAGE_DOWN		105
#define GLUT_KEY_HOME			106
#define GLUT_KEY_END			107
#define GLUT_KEY_INSERT			108
*/
void processKeyBoard1(int key, int x, int y)
{
	switch (key)
	{
	case GLUT_KEY_LEFT:
		if (rtx - step > -0.53)rtx -= step;
		break;
	case GLUT_KEY_RIGHT:
		if (rtx + step < 0.53)rtx += step;
		break;
	case GLUT_KEY_UP:
		if (rty + step < 0.53)rty += step;
		break;
	case GLUT_KEY_DOWN:
		if (rty - step > -0.53)rty -= step;
		break;
	default:
		break;
	}

	glutPostRedisplay();
	return;
}

//float step = 0.001;
void move(){
    if(rtx+step>0.5||rtx+step<-0.5)step=-step;
    rtx+=step;
    glutPostRedisplay();
}

int main(int argc, char *argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(600, 600);
	glutCreateWindow("test");

	init();

	glutDisplayFunc(draw);
//	glutIdleFunc(move);               //自动运动
	glutSpecialFunc(processKeyBoard1);//响应键盘
	glutMainLoop();
	return 0;
}

 参考 http://blog.csdn.net/iaccepted/article/details/43802347

 

绕y轴旋转

 

#ifndef GLUT_DISABLE_ATEXIT_HACK
#define GLUT_DISABLE_ATEXIT_HACK
#endif #define GLEW_STATIC
#include <GL/glew.h>
#include <GL/wglew.h>
#include <GL/freeglut.h>
#include <vector>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp> //for matrices
#include <glm/gtc/type_ptr.hpp>
//undefine if u want to use the default bending constraint of pbd
#include<iostream>
using namespace std;

GLfloat rtx = 0.0f, rty = 0.0f, rtz = 0.0f;
GLfloat step = 0.01;
//float exp1 = 1e-3;

void init()
{
	glLoadIdentity();
	glClearColor(0.0, 0.0, 0.0, 0.0);
}

float rquad  = 0;
void draw(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glPushMatrix();
	printf("%f %f %f\n", rtx, rty, rtz);
	glTranslatef(rtx, rty, rtz);

    glRotatef(rquad,0.0f,1.0f,0.0f);
	glBegin(GL_QUADS);
		glColor3f(1.0f, 0.0f, 0.0f);
		glVertex2f(-0.5f, 0.5f);
		glColor3f(0.0f, 1.0f, 0.0f);
		glVertex2f(0.5f, 0.5f);
		glColor3f(0.0f, 0.0f, 1.0f);
		glVertex2f(0.5f, -0.5f);
		glColor3f(0.5f, 0.5f, 0.5f);
		glVertex2f(-0.5f, -0.5f);
	glEnd();

	glPopMatrix();
	glutSwapBuffers();
}

//float step = 0.001;
void move(){
//    if(rtx+step>0.5||rtx+step<-0.5)step=-step;
//    rtx+=step;
    rquad += step;
    glutPostRedisplay();
}

int main(int argc, char *argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(600, 600);
	glutCreateWindow("test");

	init();

	glutDisplayFunc(draw);
	glutIdleFunc(move);
//	glutSpecialFunc(processKeyBoard1);
	glutMainLoop();
	return 0;
}

 

分享到:
评论

相关推荐

    openGL实现的正方体六面贴图

    在这个“OpenGL实现的正方体六面贴图”的项目中,我们主要关注的是如何使用OpenGL来绘制一个正方体,并为每个面分别应用不同的纹理图像。下面我们将详细探讨相关的知识点。 首先,OpenGL是一个低级别的图形库,它...

    OpenGL三维彩色平滑着色正方体,自由旋转,由三角形绘制

    OpenGL是计算机图形学中的一种广泛应用的图形库,它允许开发者创建复杂的3D和2D图形。在"OpenGL三维彩色平滑着色正方体,自由旋转,由三角形绘制"这个主题中,我们将深入探讨几个关键知识点。 首先,OpenGL是一个跨...

    行业文档-设计装置-一种四方体纯净水桶.zip

    在本压缩包“行业文档-设计装置-一种四方体纯净水桶.zip”中,主要包含了一份名为“一种四方体纯净水桶.pdf”的文档,该文档详细介绍了设计一款四方体形状的纯净水桶的相关知识和技术要点。四方体设计在水桶行业中是...

    Qt下的OpenGL例程

    应用Qt开发的OpenGL例程,实现了三棱锥和四方体的三维显示和运动等简单的操作,适合入门学者

    Opengl ES 2.0的示例代码

    Opengl_ES_2.0 的示例代码,是个旋转的方体。可以在仿真器上模拟。 仿真器:OpenGL_ES_2_0_Emulator_1.2.0.5635_Win32.msi 说明: 仿真器安装完毕后 1.把其中的libEGL.lib和libGLESv2.lib拷贝到vs2008的lib库中,...

    DLL9_创建方体_UG8.5二次开发_

    "DLL9_创建方体_UG8.5二次开发_"这个标题暗示了这是一个关于利用UG8.5的二次开发功能,通过动态链接库(DLL)来实现自动化创建立方体(BLOCK方体)的项目。 在UG8.5中,二次开发是指用户根据自身需求,通过编写程序代码...

    行业分类-设备装置-一种方体产品自动排列装置.zip

    2. 工作原理:解释了如何通过机械运动和控制逻辑实现方体产品的自动排列。 3. 机械设计:详细介绍了装置的机械部件,如驱动机构、导向系统、抓取装置等。 4. 控制系统:涵盖了装置的电子控制部分,如PLC编程、传感器...

    行业文档-设计装置-方体阀.zip

    在设计装置时,理解和掌握方体阀的工作原理、结构特点以及设计要点至关重要。以下是对方体阀及其设计相关知识点的详细阐述。 1. 工作原理: 方体阀通常由阀体、阀瓣、驱动装置和连接部件组成。当阀门关闭时,阀瓣...

    《方体的成角透视——方体建筑》详案文本.doc

    《方体的成角透视——方体建筑》详案文本主要涵盖了艺术与建筑中的透视原理,特别是针对方体建筑的设计和绘画技巧。成角透视是一种常见的绘画技法,它描绘的对象不与观察者所在的画面平行。在教学过程中,通过回顾上...

    行业文档-设计装置-方体暖气片.zip

    本篇将深入探讨“方体暖气片”这一特定类型的设计原理、制作材料、安装方法以及在实际应用中的优势。 一、设计原理 方体暖气片,顾名思义,以其独特的立方体形状为特点。这种设计主要考虑了空间利用和热交换效率。...

    行业文档-设计装置-方体高压角式截止阀.zip

    《方体高压角式截止阀》是一份详细探讨该类型阀门设计与应用的行业文档,主要针对工程技术人员、设计师以及阀门行业的从业者。这份压缩包包含了唯一的文件“方体高压角式截止阀.pdf”,该文件应该提供了全面的技术...

    12pyopenGL静态圆锥方体球体前后遮挡

    在 OpenGL 中提高渲染的一种方式。只刷新屏幕上发生变化的部分,OpenGL 允许将要进行渲染的窗口只去指定一个裁剪框。 基本原理:用于渲染时限制绘制区域,通过此技术可以在屏幕(帧缓冲)指定一个矩形区域。启用裁剪...

    行业文档-设计装置-方体直管换热器.zip

    方体直管换热器是化工、石油、动力、食品等多个行业中常见的热交换设备,它在工艺流程中扮演着至关重要的角色,用于实现热量的传递,提高能源利用效率。本文档详细介绍了方体直管换热器的设计原理、结构特点、选型...

    方体切割优化模型.pdf

    《方体切割优化模型》是针对特定工业制造过程中的一个问题,即如何最经济地通过切割一个长方体来获得预设定大小的长方体。该模型建立了一个数学框架,旨在最小化加工费用,同时考虑了切割方向的不同成本以及换刀产生...

    行业分类-设备装置-方体钣金外壳空气净化器结构.zip

    《方体钣金外壳空气净化器结构》 在现代生活中,空气净化器已经成为许多家庭和办公场所不可或缺的设备,其主要功能是清除空气中的悬浮颗粒物、有害气体和微生物,以改善室内空气质量。本压缩包文件“行业分类-设备...

    行业文档-设计装置-一种方体整盖式手动明杆楔形闸阀.zip

    《一种方体整盖式手动明杆楔形闸阀》的文档主要涵盖了闸阀的设计、结构、工作原理以及在实际工业应用中的重要性。闸阀是流体控制系统中不可或缺的一部分,广泛应用于石油、化工、电力、冶金等多个领域,用于截断或接...

    基于C++实现的点云测体积Demo,用Kinect+PCL点云库测量方体体积

    点云技术在三维重建、机器人导航、物体识别等领域有广泛应用,而C++是实现这些功能的强大编程语言。本文将深入探讨如何使用C++结合Kinect V2传感器和Point Cloud Library (PCL)来实现点云数据处理,进而测量立方体...

Global site tag (gtag.js) - Google Analytics