最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語(yǔ)言實(shí)現(xiàn)多線(xiàn)程動(dòng)畫(huà)程序示例

 更新時(shí)間:2014年04月14日 07:24:27   作者:  
這篇文章主要介紹了c語(yǔ)言實(shí)現(xiàn)多線(xiàn)程動(dòng)畫(huà)程序示例,該程序是利用opengl圖形庫(kù)與fmod音頻庫(kù)寫(xiě)的一個(gè)簡(jiǎn)單3d動(dòng)畫(huà)程序,需要的朋友可以參考下

該程序是利用opengl圖形庫(kù)與fmod音頻庫(kù)寫(xiě)的一個(gè)簡(jiǎn)單3d動(dòng)畫(huà)程序。該程序在vs下運(yùn)行良好,若缺少相關(guān)dll文件請(qǐng)確認(rèn)已配制fmod與opengl庫(kù)。

mixmodel.cpp

復(fù)制代碼 代碼如下:

// mixmodel.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//

#include "stdafx.h"

//定義一個(gè)線(xiàn)程
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"};


//聲音引擎查錯(cuò)函數(shù)
void ERRCHECK(FMOD_RESULT result)
{
 if(result != FMOD_OK)
 {
  printf("FMOD error!(%d) %s\n",result,FMOD_ErrorString(result));
  //exit(-1);
 }
}

void Initial()
{

 AUX_RGBImageRec* Image[4];
 int i;
 glEnable(GL_DEPTH_TEST); // 啟用深度測(cè)試
 glFrontFace(GL_CCW);  // 指定逆時(shí)針繞法表示多邊形正面

 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;i<4;i++)
 {
 // Load environment map
    glBindTexture(GL_TEXTURE_2D, toTextures[i]);
 Image[i] = auxDIBImageLoadA(szFiles[i]);
 glTexImage2D(GL_TEXTURE_2D, 0, 3, Image[i]->sizeX, 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);
 // 繪制紅色的太陽(yáng)模型
 //glShadeModel(GL_SMOOTH);
 glColor3f(1.0f, 0.0f, 0.0f);
 glutSolidSphere(12.0f, 100, 100);
 glEnable(GL_LIGHTING);
 // 當(dāng)前繪制顏色變?yōu)樗{(lán)色
 //glShadeModel(GL_FLAT);
 glBindTexture(GL_TEXTURE_2D,toTextures[2]);
 glColor3f(0.0f, 0.0f, 1.0f);

 //繪制地球
 //保存當(dāng)前的模型視圖矩陣
 //glPushMatrix();
 glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
 glRotatef(fElect1, 0.0f, 1.0f, 0.0f);//繞y軸旋轉(zhuǎn)一定的角度
 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);
 // 恢復(fù)矩陣
 glPopMatrix();
 // 增加旋轉(zhuǎn)步長(zhǎng)
 fElect1 += 5.0f;
 if(fElect1 > 360.0f) fElect1 = 5.0f;
}

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

 // 設(shè)置視區(qū)尺寸
    glViewport(0, 0, w, h);

 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();

 // 設(shè)置修剪空間
 GLfloat fAspect;
 fAspect = (float)w/(float)h;
 gluPerspective(45.0, fAspect, 1.0, 500.0);
/*
     if (w <= h)
   glOrtho (-nRange, nRange, nRange*h/w, -nRange*h/w, -nRange*2.0f, nRange*2.0f);
  else
   glOrtho (-nRange*w/h, nRange*w/h, nRange, -nRange, -nRange*2.0f, nRange*2.0f);
*/
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
}


void RenderScene(void)
{
 // 旋轉(zhuǎn)的角度
 

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

 // 重置模型視圖矩陣
 //glMatrixMode(GL_MODELVIEW);
 glMatrixMode(GL_PROJECTION);

    glPushMatrix();
    glLoadIdentity();
    gluOrtho2D(0.0f, 1.0f, 0.0f, 1.0f);
    glMatrixMode(GL_MODELVIEW);
 glBindTexture(GL_TEXTURE_2D, toTextures[0]);
 glDisable(GL_TEXTURE_GEN_S);
    glDisable(GL_TEXTURE_GEN_T);
 glDepthMask(GL_FALSE);
 glBegin(GL_QUADS);
        glTexCoord2f(0.0f, 0.0f);
        glVertex2f(0.0f, 0.0f);

        glTexCoord2f(1.0f, 0.0f);
        glVertex2f(1.0f, 0.0f);

        glTexCoord2f(1.0f, 1.0f);
        glVertex2f(1.0f, 1.0f);

        glTexCoord2f(0.0f, 1.0f);
        glVertex2f(0.0f, 1.0f);
    glEnd();
 glMatrixMode(GL_PROJECTION);
    glPopMatrix();
 //glLoadIdentity();
 //
    glMatrixMode(GL_MODELVIEW);
 glEnable(GL_TEXTURE_GEN_S);
    glEnable(GL_TEXTURE_GEN_T);
    glDepthMask(GL_TRUE);
 //glLoadIdentity();
 glPushMatrix();
 //將圖形沿z軸負(fù)向移動(dòng)
 drawsphere();
 

 glutSwapBuffers();
}

void TimerFunc(int value)
{
    glutPostRedisplay();
    glutTimerFunc(100, TimerFunc, 1);
}

//背景音樂(lè)的調(diào)度函數(shù)
void bcsound()
{
FMOD_RESULT result;
FMOD::System *system;
FMOD::Channel *channel;
result = FMOD::System_Create(&system);             // 創(chuàng)造FMOD的系統(tǒng)內(nèi)核對(duì)象
ERRCHECK(result);

result = system->setSpeakerMode(FMOD_SPEAKERMODE_5POINT1);     // 設(shè)置5.1聲道模式
ERRCHECK(result);

result = system->setSoftwareChannels(100);         // 調(diào)整軟件混合
ERRCHECK(result);

result = system->setHardwareChannels(32);     // 調(diào)整硬件混合
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);         //載入磁盤(pán)文件到內(nèi)存,(全部載入后返回)
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);         //載入磁盤(pán)文件到內(nèi)存,(全部載入后返回)
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();//釋放
}

//動(dòng)畫(huà)功能函數(shù)
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;
}



相關(guān)文章

  • C++編譯器和鏈接器工作原理及使用方法完全指南

    C++編譯器和鏈接器工作原理及使用方法完全指南

    本文將詳細(xì)介紹C++中的編譯器和鏈接器以及它們的工作原理及使用方法全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 可能是全網(wǎng)最詳細(xì)的Qt連接MySQL數(shù)據(jù)庫(kù)教程

    可能是全網(wǎng)最詳細(xì)的Qt連接MySQL數(shù)據(jù)庫(kù)教程

    QT眾所周知是一個(gè)開(kāi)源的,以C++為底層的可視化工具庫(kù),下面這篇文章主要給大家介紹了關(guān)于最詳細(xì)的Qt連接MySQL數(shù)據(jù)庫(kù)教程的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • C++實(shí)現(xiàn)Go的defer功能(示例代碼)

    C++實(shí)現(xiàn)Go的defer功能(示例代碼)

    defer和go一樣都是Go語(yǔ)言提供的關(guān)鍵字。defer用于資源的釋放,會(huì)在函數(shù)返回之前進(jìn)行調(diào)用。接下來(lái)通過(guò)本文給大家介紹C++實(shí)現(xiàn)Go的defer功能,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • C++中十種內(nèi)部排序算法的比較分析

    C++中十種內(nèi)部排序算法的比較分析

    本文給大家分享的是個(gè)人寫(xiě)的一段對(duì)C++中十種內(nèi)部排序算法的比較分析的代碼,主要在于測(cè)試10種排序方法的性能,給大家參考下吧。
    2015-03-03
  • C++ vector容器 find erase的使用操作:查找并刪除指定元素

    C++ vector容器 find erase的使用操作:查找并刪除指定元素

    這篇文章主要介紹了C++ vector容器 find erase的使用操作:查找并刪除指定元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • C++中文件操作基礎(chǔ)詳解

    C++中文件操作基礎(chǔ)詳解

    這篇文章主要為大家詳細(xì)介紹了C++中的一些文件操作基礎(chǔ)詳解,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下
    2022-06-06
  • C++ 自定義控件的移植問(wèn)題

    C++ 自定義控件的移植問(wèn)題

    這篇文章主要介紹了C++ 自定義控件的移植問(wèn)題,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-06-06
  • C++設(shè)計(jì)模式之簡(jiǎn)單工廠(chǎng)模式實(shí)例

    C++設(shè)計(jì)模式之簡(jiǎn)單工廠(chǎng)模式實(shí)例

    這篇文章主要介紹了C++設(shè)計(jì)模式之簡(jiǎn)單工廠(chǎng)模式實(shí)例,工廠(chǎng)模式有一種非常形象的描述,建立對(duì)象的類(lèi)就如一個(gè)工廠(chǎng),而需要被建立的對(duì)象就是一個(gè)個(gè)產(chǎn)品,需要的朋友可以參考下
    2014-09-09
  • C++ normal_distribution高斯正態(tài)分布函數(shù)的用法示例

    C++ normal_distribution高斯正態(tài)分布函數(shù)的用法示例

    高斯分布也稱(chēng)為正態(tài)分布(normal distribution),常用的成熟的生成高斯分布隨機(jī)數(shù)序列的方法由Marsaglia和Bray在1964年提出,這篇文章主要給大家介紹了關(guān)于C++ normal_distribution高斯正態(tài)分布函數(shù)用法的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • C++ STL入門(mén)教程(6) set(集合)的使用方法

    C++ STL入門(mén)教程(6) set(集合)的使用方法

    這篇文章主要為大家詳細(xì)介紹了C++ STL入門(mén)教程的第六篇,set集合的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評(píng)論

安陆市| 通渭县| 金阳县| 云浮市| 东莞市| 泸定县| 淄博市| 永修县| 黄浦区| 长阳| 乌鲁木齐县| 牡丹江市| 灯塔市| 承德县| 大关县| 宝丰县| 台安县| 临夏市| 财经| 晋宁县| 潍坊市| 朝阳市| 修武县| 白沙| 田阳县| 木兰县| 黄平县| 蓬溪县| 汾阳市| 普定县| 稷山县| 清远市| 永顺县| 海原县| 抚顺市| 漠河县| 苏尼特左旗| 孟连| 河西区| 烟台市| 康平县|