当前位置:  编程技术>c/c++/嵌入式

c语言实现多线程动画程序示例

    来源: 互联网  发布时间:2014-10-25

    本文导语:  该程序是利用opengl图形库与fmod音频库写的一个简单3d动画程序。该程序在vs下运行良好,若缺少相关dll文件请确认已配制fmod与opengl库。 mixmodel.cpp 代码如下:// mixmodel.cpp : 定义控制台应用程序的入口点。// #include "stdafx.h" //定义...

该程序是利用opengl图形库与fmod音频库写的一个简单3d动画程序。该程序在vs下运行良好,若缺少相关dll文件请确认已配制fmod与opengl库。

mixmodel.cpp

代码如下:

// mixmodel.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

//定义一个线程
DWORD WINAPI SoundProc(
 LPVOID LPVIDEOPARAMETERS);
//光照变量
GLfloat  whiteLight[] = { 0.2f, 0.2f, 0.2f, 1.0f };
GLfloat  sourceLight[] = { 0.8f, 0.8f, 0.8f, 1.0f };
GLfloat  lightPos[] = { 0.0f, 0.0f, 0.0f, 1.0f };
//贴图变量
GLuint toTextures[4];
char* szFiles[4] = {"bcb.bmp","sun.bmp","earth.bmp","moon.bmp"};


//声音引擎查错函数
void ERRCHECK(FMOD_RESULT result)
{
 if(result != FMOD_OK)
 {
  printf("FMOD error!(%d) %sn",result,FMOD_ErrorString(result));
  //exit(-1);
 }
}

void Initial()
{

 AUX_RGBImageRec* Image[4];
 int i;
 glEnable(GL_DEPTH_TEST); // 启用深度测试
 glFrontFace(GL_CCW);  // 指定逆时针绕法表示多边形正面

 glEnable(GL_CULL_FACE);  // Do not calculate inside of jet

 // Enable lighting
 glEnable(GL_LIGHTING);

 // Setup and enable light 0
 glLightModelfv(GL_LIGHT_MODEL_AMBIENT,whiteLight);
 glLightfv(GL_LIGHT0,GL_DIFFUSE,sourceLight);
 glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
 glEnable(GL_LIGHT0);

 // Enable color tracking
 glEnable(GL_COLOR_MATERIAL);

 // Set Material properties to follow glColor values
 glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
 glClearColor(0.0f, 0.0f, 0.0f, 1.0f ); //背景为黑色

 

 glGenTextures(4, toTextures);
 for(i=0;isizeX, Image[i]->sizeY, 0, GL_RGB , GL_UNSIGNED_BYTE, Image[i]->data);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
 }

    glEnable(GL_TEXTURE_2D);
 glEnable(GL_TEXTURE_GEN_S);
    glEnable(GL_TEXTURE_GEN_T);
 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
    glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);

}

void drawsphere()
{
 static float fElect1 = 0.0f;
 glTranslatef(0.0f, 0.0f, -250.0f); 
 glBindTexture(GL_TEXTURE_2D,toTextures[1]);
 glDisable(GL_LIGHTING);
 // 绘制红色的太阳模型
 //glShadeModel(GL_SMOOTH);
 glColor3f(1.0f, 0.0f, 0.0f);
 glutSolidSphere(12.0f, 100, 100);
 glEnable(GL_LIGHTING);
 // 当前绘制颜色变为蓝色
 //glShadeModel(GL_FLAT);
 glBindTexture(GL_TEXTURE_2D,toTextures[2]);
 glColor3f(0.0f, 0.0f, 1.0f);

 //绘制地球
 //保存当前的模型视图矩阵
 //glPushMatrix();
 glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
 glRotatef(fElect1, 0.0f, 1.0f, 0.0f);//绕y轴旋转一定的角度
 glTranslatef(90.0f, 0.0f, 0.0f);//平移一段距离
 glutSolidSphere(9.0f, 100, 100);

 glBindTexture(GL_TEXTURE_2D,toTextures[3]);
 glColor3f(1.0f,1.0f,0.0f);
 glRotatef(fElect1*4, 0.0f, 1.0f, 0.0f);
 glTranslatef(40.0f, 0.0f, 0.0f);
 glutSolidSphere(5.0f, 100, 100);
 // 恢复矩阵
 glPopMatrix();
 // 增加旋转步长
 fElect1 += 5.0f;
 if(fElect1 > 360.0f) fElect1 = 5.0f;
}

void ChangeSize(int w, int h)
{
 if(h == 0) h = 1;

 // 设置视区尺寸
    glViewport(0, 0, w, h);

 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();

 // 设置修剪空间
 GLfloat fAspect;
 fAspect = (float)w/(float)h;
 gluPerspective(45.0, fAspect, 1.0, 500.0);
/*
     if (w setSpeakerMode(FMOD_SPEAKERMODE_5POINT1);     // 设置5.1声道模式
ERRCHECK(result);

result = system->setSoftwareChannels(100);         // 调整软件混合
ERRCHECK(result);

result = system->setHardwareChannels(32);     // 调整硬件混合
ERRCHECK(result);

result = system->init(200, FMOD_INIT_NORMAL, 0);         // 初始化FMOD,音量大小为200
ERRCHECK(result);

FMOD::Sound *sound;
result = system->createSound("P115.ogg", FMOD_DEFAULT, 0, &sound);         //载入磁盘文件到内存,(全部载入后返回)
ERRCHECK(result);

unsigned int lenms;
result = sound->getLength(&lenms,FMOD_TIMEUNIT_MS);
ERRCHECK(result);

result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);//播放
ERRCHECK(result);
Sleep(lenms);

result = system->createSound("End Theme.mp3", FMOD_DEFAULT, 0, &sound);         //载入磁盘文件到内存,(全部载入后返回)
ERRCHECK(result);
result = sound->getLength(&lenms,FMOD_TIMEUNIT_MS);
ERRCHECK(result);

result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);//播放
ERRCHECK(result);
Sleep(lenms);

system->release();//释放
}

//动画功能函数
void graph(int argc, char* argv[])
{
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
 glutInitWindowSize(600,350);
 glutCreateWindow("日月地模型示例");
 glutReshapeFunc(ChangeSize);
 glutDisplayFunc(RenderScene);
    glutTimerFunc(500, TimerFunc, 1);
 Initial();
 glutMainLoop();

}

int main(int argc, char* argv[])
{
 HANDLE hThread1;
 hThread1 = CreateThread(NULL,0,SoundProc,NULL,0,NULL);
 CloseHandle(hThread1);

 graph(argc,argv);
 Sleep(3000);

    return 0;
}

DWORD WINAPI SoundProc(
 LPVOID LPVIDEOPARAMETERS)
{
 bcsound();
 return 0;
}




    
 
 

您可能感兴趣的文章:

  • c语言实现MD5算法完整代码示例
  • 使用c语言判断100以内素数的示例(c语言求素数)
  • c语言中if 语句的作用范围示例代码
  • c语言打印输出双引号的方法示例
  • c语言动态数组示例
  • c语言strftime时间格式化示例
  • c语言文件读写示例(c语言文件操作)
  • c语言求阶乘精确值示例
  • c语言的cps实现求fibonacci数列示例
  • c语言多线程编程使用示例
  • c语言生成随机uuid编码示例
  • c语言二进制数按位输出示例
  • c语言随机数函数示例
  • c语言获取文件大小的示例
  • 一个小示例告诉你Python语言的优雅之处
  • C语言小程序 杨辉三角示例代码
  • C语言使用普通循环方法和递归求斐波那契序列示例代码
  • c语言可变参数实现示例
  • 用C语言获取文件的大小示例分享
  • c语言线程终止练习示例
  • c语言合并两个已排序数组的示例(c语言数组排序)
  • 项目需要,麻烦有做过Linux平台c++语言多线程开发的同学进来看下
  • linux下C语言多线程编程问题(急)
  • C语言封装的轻量线程环境 Protothreads
  • 求助linux下socket多线程编程的例子(C语言写的)
  • c语言多线程实现并行服务器遇到点小问题,求解!
  • linux C 语言 多线程读写消息队列
  • linux下的c语言线程创建问题,求解阿!
  • c语言socket多线程编程限制客户端连接数
  • 100分求解:将这个C语言写的线程程序改写成C++程序
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 如何在GTK2.0下实现国际化(语言选择根据自己设置的语言,不用系统的语言)
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • 网站重定向用C语言实现iptables,ACL实现
  • c语言基于libpcap实现一个抓包程序过程
  • C语言实现的mogstored守护进程 cmogstored
  • MD5算法的C语言实现
  • Linux 下的C语言实现数据库连接池操作。
  • 如何在linux下用c语言实现ftp编程
  • C语言的KD树实现 kdtree
  • 如何实现类似PHP.PB等语言中eval的函数功能?
  • 怎样用JAVA语言实现对串口的操作?
  • 请问《软件工程java语言实现》一书在那里能下载
  • R语言的Java实现 FastR_
  • LINUX下用C语言实现修改目录名字。
  • 求在linux下用c语言实现数据库连接池的操作。
  • linux下FTP服务器与客户端的C语言实现
  • 类似于Shell界面下setup命令的文本模式菜单用C语言如何实现
  • PHP 语言实现 HippyVM
  • java语言实现监控程序
  • c语言实现程序互斥问题 急.....
  • 2013年7月和2013年8月编程语言排行榜
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • 2017 年热门编程语言排行榜出炉,你的语言上榜没?
  • 求助,在linux下,c语言和汇编语言的接口是什么?
  • linux下FTP服务器与客户端的C语言实现 iis7站长之家
  • C语言中间语言 CIL
  • PHP编程语言介绍及安装测试方法
  • 最近学JSP,苦于HTML语言和JAVA语言太差,请教推荐几本书,thanks.
  • 以NetBeans IDE为例介绍如何使用XML中Schema语言
  • 动态编程语言 LIME编程语言


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3