计算机图形学OpenGL——键盘控制三维汽车

news/2024/7/8 5:31:15 标签: opengl, 图形, 三维小车

                           计算机图形学OpenGL

                                                                                                                           — —键盘控制三维汽车

       最终实现效果:

     

   

  

   源代码:

#include "stdafx.h"
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>
#include <math.h>
static GLfloat xRot = 0.0f;
static GLfloat yRot = 0.0f;
void Display(void)
{   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
   	glRotatef(xRot, 1.0f, 0.0f, 0.0f);  //绕x轴旋转
	glRotatef(yRot, 0.0f, 1.0f, 0.0f);  //绕y轴旋转
	//车下半部
	glBegin(GL_POLYGON);
		glColor3f(0.1, 0.1, 0.8);
		glVertex3f(-40.0f,0.0f,15.0f);
		glVertex3f(40.0f,0.0f,15.0f);
		glColor3f(1, 0.5, 0.8);
		glVertex3f(40.0f,-15.0f,15.0f);
		glVertex3f(-40.0f,-15.0f,15.0f);
	glEnd();
	glBegin(GL_POLYGON);
		glColor3f(0.3, 0.2, 0.5);
		glVertex3f(40.0f,0.0f,-15.0f);
		glVertex3f(40.0f,0.0f,15.0f);
		glVertex3f(40.0f,-15.0f,15.0f);
		glVertex3f(40.0f,-15.0f,-15.0f);
	glEnd();
	glBegin(GL_POLYGON);
		glColor3f(0.3, 0.1, 0.3);
		glVertex3f(-40.0f,0.0f,-15.0f);
		glVertex3f(-40.0f,0.0f,15.0f);
		glVertex3f(-40.0f,-15.0f,15.0f);
		glVertex3f(-40.0f,-15.0f,-15.0f);
	glEnd();
    glBegin(GL_POLYGON);
		glColor3f(0.1, 0.1, 0.8);
		glVertex3f(-40.0f,0.0f,-15.0f);
		glVertex3f(40.0f,0.0f,-15.0f);		
		glColor3f(1, 0.5, 0.8);
		glVertex3f(40.0f,-15.0f,-15.0f);
		glVertex3f(-40.0f,-15.0f,-15.0f);
	glEnd();
	glBegin(GL_POLYGON);
		glColor3f(0, 0, 1);
		glVertex3f(-40.0f,0.0f,15.0f);
		glVertex3f(-40.0f,0.0f,-15.0f);
		glVertex3f(40.0f,0.0f,-15.0f);
		glVertex3f(40.0f,0.0f,15.0f);
	glEnd();
	glBegin(GL_POLYGON);
		glColor3f(0.8, 0.5, 0.2);
		glVertex3f(-40.0f,-15.0f,15.0f);
		glVertex3f(-40.0f,-15.0f,-15.0f);
		glVertex3f(40.0f,-15.0f,-15.0f);
		glVertex3f(40.0f,-15.0f,15.0f);
	glEnd();
	//车上半部
	glBegin(GL_POLYGON);
		glColor3f(0, 0, 1);
		glVertex3f(-20.0f,0.0f,15.0f);
		glVertex3f(-10.0f,10.0f,15.0f);
		glVertex3f(20.0f,10.0f,15.0f);
		glVertex3f(25.0f,0.0f,15.0f);
	glEnd();
	glBegin(GL_POLYGON);
		glColor3f(0, 0, 1);
		glVertex3f(-20.0f,0.0f,-15.0f);
		glVertex3f(-10.0f,10.0f,-15.0f);
		glVertex3f(20.0f,10.0f,-15.0f);
		glVertex3f(25.0f,0.0f,-15.0f);
	glEnd();
	glBegin(GL_POLYGON);
		glColor3f(0, 1, 1);
    	glVertex3f(-10.0f,10.0f,15.0f);
    	glVertex3f(-10.0f,10.0f,-15.0f);
		glVertex3f(20.0f,10.0f,-15.0f);
		glVertex3f(20.0f,10.0f,15.0f);
	glEnd();
    glBegin(GL_POLYGON);
		glColor3f(0.5, 0.8, 0.8);
    	glVertex3f(-10.0f,10.0f,15.0f);
		glVertex3f(-20.0f,0.0f,15.0f);
		glVertex3f(-20.0f,0.0f,-15.0f);
    	glVertex3f(-10.0f,10.0f,-15.0f);
	glEnd();
	glBegin(GL_POLYGON);
		glColor3f(0, 0.5, 0.5);
		glVertex3f(20.0f,10.0f,15.0f);
		glVertex3f(20.0f,10.0f,-15.0f);
		glVertex3f(25.0f,0.0f,-15.0f);
		glVertex3f(25.0f,0.0f,15.0f);
	glEnd();
	glBegin(GL_POLYGON);
		glColor3f(0, 0, 1);
		glVertex3f(-30.0f,-15.0f,15.0f);
		glVertex3f(-30.0f,-15.0f,-15.0f);
		glVertex3f(30.0f,-15.0f,-15.0f);
		glVertex3f(30.0f,-15.0f,15.0f);
	glEnd();
	//车轮
	glColor3f(1, 0, 0);
	glTranslated(-20.0f,-15.0f,15.0f);
    glutSolidTorus(2,5,5,100);
	glTranslated(0.0f,0.0f,-30.0f);
    glutSolidTorus(2,5,5,100);
	glTranslated(45.0f,0.0f,0.0f);
    glutSolidTorus(2,5,5,100);
	glTranslated(0.0f,0.0f,30.0f);
    glutSolidTorus(2,5,5,100);
    glPopMatrix();
	glutSwapBuffers();   //交换缓冲
}
//定义键盘控制函数
void SpecialKeys(int key, int x, int y)
{   if(key == GLUT_KEY_UP)		xRot-= 5.0f;   
	if(key == GLUT_KEY_DOWN)	xRot += 5.0f;
	if(key == GLUT_KEY_LEFT)	yRot -= 5.0f;
	if(key == GLUT_KEY_RIGHT)	yRot += 5.0f;
	glutPostRedisplay(); // 刷新窗口
}
int main(int argc, char* argv[])
{   glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
	glutCreateWindow("车");
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
	glEnable(GL_DEPTH_TEST);	
	glShadeModel(GL_SMOOTH);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho (-100, 100, -100, 100,-100, 100);
	glutSpecialFunc(SpecialKeys);  //注册功能键回调函数
	glutDisplayFunc(Display);
	glutMainLoop();
	return 0;
}


http://www.niftyadmin.cn/n/835346.html

相关文章

ActiveMQ开发

ActiveMQ开发 1.概述与介绍 ActiveMQ是Apache出品&#xff0c;最流行的、功能强大的即时通讯和集成模式的开源服务器。ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMSProvider实现。提供客户端支持跨语言和协议&#xff0c;带有易于在充分支持JMS1.1和1.4使用J2EE企业集成模…

221. Maximal Square

Given a 2D binary matrix filled with 0s and 1s, find the largest square containing only 1s and return its area. Example: Input: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 Output: 4 难度&#xff1a;medium 题目&#xff1a;给定由0,1组成的矩阵&#xff0c;找出由1…

Ubuntu 16.04 装机后的配置要点

Ubuntu 作为一个Linux的发行版&#xff0c;在桌面环境的易用性上做了很多改善&#xff0c;对推动Linux的推广做了很大的贡献。同时&#xff0c;它作为服务器的操作系统也越来越多的被使用。当然&#xff0c;服务器端可能更多的人在使用Redhat、CentOS等系统。Linux的发行版本很…

jzoj5683. 【GDSOI2018模拟4.22】Prime (Min_25筛+拉格朗日插值+主席树)

题面 \(n\leq 10^{12},k\leq 100\) 题解 一眼就是一个\(Min\_25\)筛拉格朗日插值优化&#xff0c;然而打完之后交上去发现只有\(60\)分 神\(tm\)还要用主席树优化…… 大概是这样&#xff0c;设\(g(n,j)\)表示\(1\)到\(n\)之间的所有满足\(i\)是质数或者\(i\)的最小质因子大于\…

在工作组环境下配置CA并应用到Web服务器和客户端

在工作组环境下配置CA并应用到Web服务器和客户端 1.目的 1、实践在Windows Server环境下配置简单的IIS&#xff0c;以对外提供Web页面&#xff1b; 2、实践在Windows Server环境下配置CA服务器并对Web服务器应用发放证书&#xff1b; 3、实践CA服务器向用户&#xff08;浏览器&…

网易易盾饶晓艳:内容安全“第三方”这条路,曾经不好“走”

1999年&#xff0c;出于对网易内部产品安全保护的需求&#xff0c;网易成立了安全部&#xff0c;那时候饶晓艳还没有加入网易&#xff0c;而网易易盾更是还没“出生”。当时的她不会想到&#xff0c;17年后的自己将与网易易盾结缘。 “那会儿&#xff0c;人们对于网络安全还没…

OpenSSL消息摘要

OpenSSL消息摘要 1.目的 (1) 掌握OpenSSL消息摘要原理和常用API&#xff1b; (2) 基于OpenSSL库开发命令行消息摘要程序。 2.步骤 (1) 实现独立的文件摘要函数&#xff0c;支持对文件的摘要计算&#xff0c;支持MD5和SHA-1两种摘要算法&#xff1b; (2) 在Main函数中调用上述…

视频点播开发者实战:视频水印动态替换

简介 在某些特定场景&#xff0c;不同的视频需要压制不同的水印信息&#xff0c;例如&#xff1a;短视频需要压制不同用户的昵称等&#xff0c;以表示不同视频版权属于不同的上传用户。 水印动态替换前提 配置转码模板时绑定指定的水印ID&#xff0c;换暂只替换对已经绑定的水印…