<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. c語言實現多線程動畫程序

    時間:2025-10-29 21:09:43 C語言

    c語言實現多線程動畫程序范例

      如何用c語言實現多線程動畫程序呢?想要了解的朋友,以下是為大家分享的c語言實現多線程動畫程序的范例,供大家參考借鑒,歡迎瀏覽!

      該程序是利用opengl圖形庫與fmod音頻庫寫的一個簡單3d動畫程序。該程序在vs下運行良好,若缺少相關dll文件請確認已配制fmod與opengl庫。

      mixmodel.cpp

      復制代碼 代碼如下:

      /pic/p>

      /pic/p>

      #include "stdafx.h"

      /pic/p>

      DWORD WINAPI SoundProc(

      LPVOID LPVIDEOPARAMETERS);

      /pic/p>

      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 };

      /pic/p>

      GLuint toTextures[4];

      char* szFiles[4] = {"bcb.bmp","sun.bmp","earth.bmp","moon.bmp"};

      /pic/p>

      void ERRCHECK(FMOD_RESULT result)

      {

      if(result != FMOD_OK)

      {

      printf("FMOD error!(%d) %sn",result,FMOD_ErrorString(result));

      /pic/p>

      }

      }

      void Initial()

      {

      AUX_RGBImageRec* Image[4];

      int i;

      glEnable(GL_DEPTH_TEST);/pic/p>

      glFrontFace(GL_CCW);/pic/p>

      glEnable(GL_CULL_FACE);/pic/p>

      /pic/p>

      glEnable(GL_LIGHTING);

      /pic/p>

      glLightModelfv(GL_LIGHT_MODEL_AMBIENT,whiteLight);

      glLightfv(GL_LIGHT0,GL_DIFFUSE,sourceLight);

      glLightfv(GL_LIGHT0,GL_POSITION,lightPos);

      glEnable(GL_LIGHT0);

      /pic/p>

      glEnable(GL_COLOR_MATERIAL);

      /pic/p>

      glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

      glClearColor(0.0f, 0.0f, 0.0f, 1.0f );/pic/p>

      glGenTextures(4, toTextures);

      for(i=0;i<4;i++)

      {

      /pic/p>

      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);

      /pic/p>

      /pic/p>

      glColor3f(1.0f, 0.0f, 0.0f);

      glutSolidSphere(12.0f, 100, 100);

      glEnable(GL_LIGHTING);

      /pic/p>

      /pic/p>

      glBindTexture(GL_TEXTURE_2D,toTextures[2]);

      glColor3f(0.0f, 0.0f, 1.0f);

      /pic/p>

      /pic/p>

      /pic/p>

      glLightfv(GL_LIGHT0,GL_POSITION,lightPos);

      glRotatef(fElect1, 0.0f, 1.0f, 0.0f);/pic/p>

      glTranslatef(90.0f, 0.0f, 0.0f);/pic/p>

      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);

      /pic/p>

      glPopMatrix();

      /pic/p>

      fElect1 += 5.0f;

      if(fElect1 > 360.0f)fElect1 = 5.0f;

      }

      void ChangeSize(int w, int h)

      {

      if(h == 0)h = 1;

      /pic/p>

      glViewport(0, 0, w, h);

      glMatrixMode(GL_PROJECTION);

      glLoadIdentity();

      /pic/p>

      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)

      {

      /pic/p>

      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

      /pic/p>

      /pic/p>

      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();

      /pic/p>

      /pic/p>

      glMatrixMode(GL_MODELVIEW);

      glEnable(GL_TEXTURE_GEN_S);

      glEnable(GL_TEXTURE_GEN_T);

      glDepthMask(GL_TRUE);

      /pic/p>

      glPushMatrix();

      /pic/p>

      drawsphere();

      glutSwapBuffers();

      }

      void TimerFunc(int value)

      {

      glutPostRedisplay();

      glutTimerFunc(100, TimerFunc, 1);

      }

      /pic/p>

      void bcsound()

      {

      FMOD_RESULT result;

      FMOD::System *system;

      FMOD::Channel *channel;

      result = FMOD::System_Create(&system); /pic/p>

      ERRCHECK(result);

      result = system->setSpeakerMode(FMOD_SPEAKERMODE_5POINT1); /pic/p>

      ERRCHECK(result);

      result = system->setSoftwareChannels(100); /pic/p>

      ERRCHECK(result);

      result = system->setHardwareChannels(32); /pic/p>

      ERRCHECK(result);

      result = system->init(200, FMOD_INIT_NORMAL, 0); /pic/p>

      ERRCHECK(result);

      FMOD::Sound *sound;

      result = system->createSound("P115.ogg", FMOD_DEFAULT, 0, &sound); /pic/p>

      ERRCHECK(result);

      unsigned int lenms;

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

      ERRCHECK(result);

      result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);/pic/p>

      ERRCHECK(result);

      Sleep(lenms);

      result = system->createSound("End Theme.mp3", FMOD_DEFAULT, 0, &sound); /pic/p>

      ERRCHECK(result);

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

      ERRCHECK(result);

      result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);/pic/p>

      ERRCHECK(result);

      Sleep(lenms);

      system->release();/pic/p>

      }

      /pic/p>

      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語言實現多線程動畫程序】相關文章:

    C語言程序的實現12-06

    C語言程序介紹03-01

    c語言鏈接程序08-16

    c語言入門的經典程序03-22

    C語言程序的段03-15

    C語言程序試題10-29

    C語言程序分析10-04

    c語言入門經典程序02-19

    C語言經典程序題10-04

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人