glut基本程序+旋转的四边形

2024-04-14 03:58

本文主要是介绍glut基本程序+旋转的四边形,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#include "stdafx.h"
#include <GL/glut.h>

#include <iostream>

#pragma comment( lib, "glut32.lib")

//注意:glut.h与glut32.lib版本要一样,否则会出现链接错误:无法解析的外部符号__imp____glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用,因为版本不同,可能函数的名称或参数列表不同,即找不到函数的定义)

using namespace std;


double g_dAngle= 0.0f;

 

void Init(void)
{
 glClearColor(0.0f,0.0f,0.0f,0.0f);
}


void Display(void)
{
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(1.0f,0.0f,0.0f);
 

 glLoadIdentity();
 glTranslatef( 0.0f, 0.0f , -2.0f);

 glRotatef( g_dAngle, 0.0f, 0.0f, 1.0f);
 //draw a square
 glBegin( GL_QUADS);
 
  glVertex3f(  0.5f,  0.5f, 0.0f);
  glVertex3f( -0.5f,  0.5f, 0.0f);
  glVertex3f( -0.5f, -0.5f, 0.0f);
  glVertex3f(  0.5f, -0.5f, 0.0f);

 glEnd();

 //glFlush();
 glutSwapBuffers(); //双缓冲

}
void Reshape(int w,int h)

 glViewport(0,0  ,(GLsizei)w  ,(GLsizei)h  );
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 
 gluPerspective( 90.0f, (GLfloat)w/ (GLfloat)h, 0.1f, 1000.0f );

 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
}

void OnTimer( int iTimerIndex)
{
 //更新角度
 g_dAngle += 2.0f;
 if ( g_dAngle > 360.0f)
 {
  g_dAngle -= 360.0f;
 }

 glutPostRedisplay();//刷新显示
    glutTimerFunc( 50, OnTimer, 0);

}
 

void Keyboard(unsigned char key, int x, int y)
{

    switch (key)
    {
        case 'w':     //前
        break;
        case 's':     //后
            break;
        case 'a':     //左
            break;
        case 'd':     //右
            break;
        case 'q':    //上
            break;
        case 27:
            exit(0);
            break;
    }
}

void MouseEvent(int button, int state, int x, int y)
{
    switch(button)
    {
        case GLUT_LEFT_BUTTON:
            cout<<"GLUT_LEFT_BUTTON"<<endl;
            break;
        case GLUT_RIGHT_BUTTON:
            cout<<"GLUT_RIGHT_BUTTON"<<endl;
            break;
        case GLUT_MIDDLE_BUTTON:
            cout<<"GLUT_MIDDLE_BUTTON"<<endl;
            break;
    }
}
void MotionMove(int x,int y)
{

}
 
int main(int argc, char** argv)
{
 glutInit(&argc,argv);
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
 glutInitWindowSize(450,450);
 glutInitWindowPosition(200,200);
 glutCreateWindow("Hello");
 Init();
 glutDisplayFunc( Display);
 glutReshapeFunc( Reshape);

 //定时器
 glutTimerFunc( 50, OnTimer, 0 );

 glutKeyboardFunc( Keyboard);
    glutMouseFunc( MouseEvent);
    glutMotionFunc( MotionMove);

 glutMainLoop();
 return 0;
}

 

这篇关于glut基本程序+旋转的四边形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/902013

相关文章

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3

防止SpringBoot程序崩溃的几种方式汇总

《防止SpringBoot程序崩溃的几种方式汇总》本文总结了8种防止SpringBoot程序崩溃的方法,包括全局异常处理、try-catch、断路器、资源限制、监控、优雅停机、健康检查和数据库连接池配... 目录1. 全局异常处理2. 使用 try-catch 捕获异常3. 使用断路器4. 设置最大内存和线

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(