凭借着图形学的课,这学期有幸接触了opengl,稍微搞了一些东西,也算入了个门。
直接看代码就行,和上一篇一样没什么高深的算法,不过对于初学者来说要花时间熟悉语法。
背景音乐用的fmod,fmod用多个声道时网上没什么比较清晰的教程,建议用bass。
(刚开始为了找解决方案,还特地买了个mp3转mid转换器,这软件是可以用的,就是还是解决不了根本问题,顺便贴出来分享下click here~)
本篇两个作业用的vs2013,一些库和头文件都需要自己配。
先上几个效果图吧,一大坨代码附在最后。(大神请绕道)
-----------------------------------完结分割线----------------------------------------------
接下来就是厉害的东西了,主笔是我同组的另外两位大神,我是最水的一个。
一些比较难的碰撞检测、阴影效果、地形管理(地形是无限延伸的)都是他们的成果,除此之外还有重力设置方块渲染相机aabb包围盒啥的,框架的搭建也是属于继承那种偏向于项目的东西,我是第一次接触这些东西,就不班门弄斧了,就做了个音效界面还被嫌弃T T。。
这是我上大学以来见过的最牛逼的东西,老实说刚开始听到ys说要做这个时我是震惊的,没想到真的做出来了2333666。。
对我来说也没什么别的想法了,能和这些大神合作本身就是一种幸运。
下面是效果图,由于我最水,就不上代码了,需要的私聊我吧。
-----------------------------------完结分割线----------------------------------------------
最后是一大坨robot代码:
#include <gl/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include "fmod.h" // 音频库的头文件
#pragma comment(lib, "fmodvc.lib") // 把音频库加入到链接器中
#define SOLID 1
#define WIRE 2
#define LEFT 1
#define RIGHT 2
FSOUND_STREAM *mp3back; // 背景音乐 *.mp3格式
int moveX;
int spinX = 0;
int larm = 0, rarm = 0;
bool flag = false;//判断左右
bool limb = true;//判断肢体是上身还是下身,默认上身
bool flag0 = false;//标记是否复位
float dis = 0;
float step = 0;
int weapon = 0;
void init()
{
//定义光源的颜色和位置
GLfloat ambient[] = { 0.5, 0.8, 0.1, 0.1 };
GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat position[] = { -80.0, 50.0, 25.0, 1.0 };
//选择光照模型
GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 };
GLfloat local_view[] = { 0.0 };
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_SMOOTH);
//设置环境光
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
//设置漫射光
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
//设置光源位置
glLightfv(GL_LIGHT0, GL_POSITION, position);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
//启动光照
glEnable(GL_LIGHTING);
//启用光源
glEnable(GL_LIGHT0);
}
//画球
void drawBall(double R, double x, double y, double z, int MODE) {
glPushMatrix();
glTranslated(x, y, z);
if (MODE == SOLID) {
glutSolidSphere(R, 20, 20);
}
else if (MODE =