亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? model.pas

?? 3D火焰效果好程序好的很
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
//------------------------------------------------------------------------
//
// Author      : Jan Horn
// Email       : jhorn@global.co.za
// Website     : http://home.global.co.za/~jhorn
// Date        : 7 October 2001
// Version     : 1.0
// Description : Quake 3 Model Loader (MD3 Loader) 
//
//------------------------------------------------------------------------
unit model;

interface

uses
  Windows, SysUtils, OpenGL, Textures;

type
  TMD3Header = Record
    ID : Array[1..4] of Char;               // id = IDP3
    Version       : Integer;                // Version = 15
    Filename      : Array[1..68] of Char;
    numBoneFrames : Integer;
    numTags       : Integer;
    numMeshes     : Integer;
    numMaxSkins   : Integer;
    headerLength  : Integer;
    TagStart      : Integer;
    TagEnd        : Integer;
    FileSize      : Integer;
  end;

  TBoneFrame = Record
    mins : Array[0..2] of glFloat;
    maxs : Array[0..2] of glFloat;
    Position : Array[0..2] of glFloat;
    Scale    : glFloat;
    Creator  : Array[1..16] of Char;
  end;

  TAnim = Record
    FirstFrame     : Integer;
    numFrames      : Integer;
    LoopingFrames  : Integer;
    FPS            : Integer;
  end;

  TRotationMatrix = Array[0..2, 0..2] of glFloat;
  TVector = Array[0..2] of glFloat;
  TTag = Record
    Name     : Array[1..64] of Char;
    Position : TVector;
    Rotation : TRotationMatrix;
  end;

  TTriangle = Record
    Vertex : Array[0..2] of Integer;
  end;

  TTexCoord = Record
    Coord : Array[0..1] of glFloat;
  end;

  TVertex = Record
    Vertex : Array[0..2] of Smallint;
    Normal : Array[0..1] of Byte;
  end;

  TMeshHeader = Record
    ID   : Array[1..4] of Char;
    Name : Array[1..68] of Char;
    numMeshFrames : Integer;
    numSkins     : Integer;
    numVertexes  : Integer;
    numTriangles : Integer;
    triStart     : Integer;
    headerSize   : Integer;
    TexVectorStart : Integer;
    VertexStart  : Integer;
    MeshSize     : Integer;
  end;

  TMesh = Record
    MeshHeader : TMeshHeader;
    Skins      : Array of Array[1..68] of Char;
    Triangle   : Array of TTriangle;
    TexCoord   : Array of TTexCoord;
    Vertex     : Array of TVertex;
    Texture    : glUint;
    SetTexture : Boolean;
  end;

  PMD3Model = ^TMD3Model;
  TMD3Model = object
    frame      : Integer;      // Current frame to draw
    startFrame : Integer;
    endFrame   : Integer;
    nextFrame  : Integer;      // Next frame to draw
    FPS        : Integer;
    Poll       : glFloat;      // Interpolation Time;
    LastUpdate : glFloat;      // last draw
    TexNr      : Integer;      // using for LoadSkin (*.skin)
    TexInf     : Array[0..99] of Integer;   // using for LoadSkin (*.skin)
    md3name    : String;
    Header     : TMD3header;
    BoneFrames : Array of TBoneFrame;
    Tags       : Array of TTag;
    Meshes     : Array of TMesh;
    Links      : Array of PMD3Model;
    procedure LoadModel(filename : String);
    procedure DrawModelInt(const currentFrame, nexFrame : Integer; const pol: Real);
    procedure DrawModel;
    procedure DrawSkeleton(var Mdl : TMD3Model);
    procedure UpdateFrame(time : glFLoat);
    procedure LinkModel(tagname : String; var MD3Model : TMD3Model);
    procedure LoadSkin(Imagepath, filename : String);
  end;

  Q3Player = Object
    Lower, Upper, Head : TMD3Model;
    anim : Array[0..25] of TAnim;
    animLower, animUpper : Integer;
    procedure LoadAnim(filename : String);
    procedure LoadPlayer(path, skin : String);
    procedure SetAnim(ani : Integer);
    procedure Draw(time : glFLoat);
  end;

const BOTH_DEATH1 = 0;
      BOTH_DEAD1  = 1;
      BOTH_DEATH2 = 2;
      BOTH_DEAD2  = 3;
      BOTH_DEATH3 = 4;
      BOTH_DEAD3  = 5;

      TORSO_GESTURE = 6;
      TORSO_ATTACK  = 7;
      TORSO_ATTACK2 = 8;
      TORSO_DROP    = 9;
      TORSO_RAISE   = 10;
      TORSO_STAND   = 11;
      TORSO_STAND2  = 12;

      LEGS_WALKCR   = 13;
      LEGS_WALK     = 14;
      LEGS_RUN      = 15;
      LEGS_BACK     = 16;
      LEGS_SWIM     = 17;
      LEGS_JUMP     = 18;
      LEGS_LAND     = 19;
      LEGS_JUMPB    = 20;
      LEGS_LANDB    = 21;
      LEGS_IDLE     = 22;
      LEGS_IDLECR   = 23;
      LEGS_TURN     = 24;

      MAX_ANIMATIONS = 25;


var anorms : Array[0..255, 0..255, 0..2] of Real;

function CharArrToStr(const C : Array of Char) : String;

implementation

procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external opengl32;


function ArcTan2(Y, X: Extended): Extended;
asm
  FLD     Y
  FLD     X
  FPATAN
  FWAIT
end;

function ArcCos(X: Extended): Extended;
begin
  Result := ArcTan2(Sqrt(1 - X*X), X);
end;


{---------------------------------------------------------}
{--- Converts an array of characters to a string       ---}
{---------------------------------------------------------}
function CharArrToStr(const C : Array of Char) : String;
var I : Integer;
begin
  // convert the array of characters to a String
  I :=0;
  result :='';
  while C[i] <> #0 do
  begin
    result := result + C[I];
    Inc(I);
  end;
end;


{---------------------------------------------------------}
{--- Create a lookup table of normals. Faster this way ---}
{---------------------------------------------------------}
procedure InitNormals;
var I, J : Integer;
    alpha, beta : Real;
begin
  for I :=0 to 255 do
  begin
    for J :=0 to 255 do
    begin
      alpha :=2*I*pi/255;
      beta :=2*j*pi/255;
      anorms[i][j][0] := cos(beta) * sin(alpha);
      anorms[i][j][1] := sin(beta) * sin(alpha);
      anorms[i][j][2] := cos(alpha);
    end;
  end;
end;


{  TMD3Model  }

{---------------------------------------------------------}
{---  Draws a model                                    ---}
{---------------------------------------------------------}
procedure TMD3Model.DrawModel;
begin
  DrawModelInt(frame, nextframe, poll);
end;


{---------------------------------------------------------}
{---  Draw the model using interpolation               ---}
{---------------------------------------------------------}
procedure TMD3Model.DrawModelInt(const currentFrame, nexFrame : Integer; const pol: Real);
var i, j, k : Integer;
    triangleNum, currentMesh, currentOffsetVertex,
    currentVertex, nextCurrentOffsetVertex : Integer;
    normU, normV : Integer;
    s, t : glFloat;
    v, n : Array[0..2] of glFloat;
    nextV, nextN : Array[0..2] of glFloat;
begin
  For k :=0 to header.numMeshes-1 do
  begin
    currentMesh :=k;
    currentOffsetVertex :=currentFrame * meshes[currentMesh].MeshHeader.numVertexes;
    // interpolation
    nextCurrentOffsetVertex := nexFrame * meshes[currentMesh].MeshHeader.numVertexes;

    TriangleNum := Meshes[currentMesh].MeshHeader.numTriangles;

    if meshes[k].settexture then
      glBindTexture(GL_TEXTURE_2D, meshes[k].texture);
    for I :=0 to TriangleNum-1 do
    begin
      glBegin(GL_TRIANGLES);
      for J :=0 to 2 do
      begin
        currentVertex := Meshes[currentMesh].Triangle[i].vertex[j];

        v[0] :=meshes[currentMesh].vertex[currentOffsetVertex + currentVertex].Vertex[0] / 64;
        v[1] :=meshes[currentMesh].vertex[currentOffsetVertex + currentVertex].Vertex[1] / 64;
        v[2] :=meshes[currentMesh].vertex[currentOffsetVertex + currentVertex].Vertex[2] / 64;

        nextv[0] :=meshes[currentMesh].vertex[nextCurrentOffsetVertex + currentVertex].Vertex[0] / 64;
        nextv[1] :=meshes[currentMesh].vertex[nextCurrentOffsetVertex + currentVertex].Vertex[1] / 64;
        nextv[2] :=meshes[currentMesh].vertex[nextCurrentOffsetVertex + currentVertex].Vertex[2] / 64;

	normU := meshes[currentMesh].vertex[currentOffsetVertex + currentVertex].Normal[0];
	normV := meshes[currentMesh].vertex[currentOffsetVertex + currentVertex].Normal[1];

	n[0] :=aNorms[normU, normV, 0];
	n[1] :=aNorms[normU, normV, 1];
	n[2] :=aNorms[normU, normV, 2];

        // interpolated U, V and N
        normU := meshes[currentMesh].vertex[nextCurrentOffsetVertex + currentVertex].Normal[0];
        normV := meshes[currentMesh].vertex[nextCurrentOffsetVertex + currentVertex].Normal[1];

        nextN[0] := anorms[normU, normV, 0];
        nextN[1] := anorms[normU, normV, 1];
        nextN[2] := anorms[normU, normV, 2];

	s :=meshes[currentMesh].TexCoord[currentVertex].Coord[0];
	t :=meshes[currentMesh].TexCoord[currentVertex].Coord[1];

	glTexCoord2f(s, 1-t);

        // interpolation
        glNormal3f(n[0] + pol * (nextN[0] - n[0]), n[1] + pol * (nextN[1] - n[1]), n[2] + pol * (nextN[2] - n[2]));
        glVertex3f(v[0] + pol * (nextV[0] - v[0]), v[1] + pol * (nextV[1] - v[1]), v[2] + pol * (nextV[2] - v[2]));
      end;
      glEnd;
    end;
  end;
end;


{---------------------------------------------------------}
{--- Links a model to a tag. (head is linked to torso) ---}
{---------------------------------------------------------}
procedure TMD3Model.LinkModel(tagname: String; var MD3Model: TMD3Model);
var I : Integer;
begin
  for I :=0 to Header.numTags-1 do
  begin
    if CharArrToStr(tags[i].Name) = tagname then
    begin
      Links[i] :=@MD3Model;
      exit;
    end;
  end;
end;


{---------------------------------------------------------}
{---  Loads a model from a .MDL files                  ---}
{---  Result 1 = OK, -1 = no file, -2 = Bad header     ---}
{---------------------------------------------------------}
procedure TMD3Model.LoadModel(filename: String);
var F : File;
    I : Integer;
    MeshOffset : Integer;
begin
  if FileExists(filename) = FALSE then
    exit;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清在线精品| 欧美老肥妇做.爰bbww视频| 欧美亚洲高清一区二区三区不卡| 欧美一区二区三区不卡| 国产精品卡一卡二卡三| 青青草97国产精品免费观看 | 成人精品免费看| 日韩一区二区三区观看| 亚洲精品亚洲人成人网| 国产成人免费在线| 欧美一区二区精品久久911| 一区二区三区在线视频免费观看| 韩日av一区二区| 国产成人在线色| 欧美日韩激情在线| 亚洲欧美激情小说另类| 国产福利91精品一区| 在线成人高清不卡| 一区二区三区高清在线| 成人黄色在线看| 久久一区二区视频| 另类欧美日韩国产在线| 7777精品伊人久久久大香线蕉经典版下载| 亚洲免费看黄网站| 激情欧美一区二区| 欧美一区二区三区的| 午夜视黄欧洲亚洲| 欧美私人免费视频| 一区二区三区在线免费视频| 91美女片黄在线| 亚洲成人一区二区在线观看| 蜜桃免费网站一区二区三区| 欧美日韩国产天堂| 亚洲福中文字幕伊人影院| 99国产一区二区三精品乱码| 国产精品久久久久久久久搜平片| 国产黄色精品视频| 久久无码av三级| 国产在线播放一区| 久久网这里都是精品| 国产精品影视天天线| 国产午夜精品一区二区三区视频 | 精品国产凹凸成av人网站| 久久精品久久99精品久久| 精品国产91久久久久久久妲己| 激情图区综合网| 国产拍揄自揄精品视频麻豆| 成人高清在线视频| 亚洲精品日日夜夜| 欧美精品第1页| 麻豆传媒一区二区三区| 久久久欧美精品sm网站| 国产91精品久久久久久久网曝门 | 久久久www免费人成精品| 国产毛片精品视频| 日韩久久一区二区| 91麻豆精品国产自产在线观看一区 | 福利一区二区在线观看| 中文字幕一区二区在线观看| 日本韩国欧美国产| 日韩av一区二| 亚洲国产成人一区二区三区| 一本色道久久综合亚洲91| 婷婷丁香久久五月婷婷| 久久久综合激的五月天| 色婷婷综合久久| 狠狠色综合色综合网络| 亚洲欧洲制服丝袜| 日韩欧美色综合网站| 成人黄色综合网站| 日韩电影在线免费看| 亚洲国产精品传媒在线观看| 欧美日韩在线播放一区| 激情深爱一区二区| 亚洲国产成人av网| 国产精品乱码久久久久久| 欧美日韩精品专区| 粉嫩高潮美女一区二区三区 | 免费不卡在线视频| 国产精品久线观看视频| 日韩一区二区不卡| 91免费版pro下载短视频| 久久国产麻豆精品| 一区二区三区不卡在线观看| 精品国产在天天线2019| 在线观看亚洲专区| 成人免费视频免费观看| 久久99精品国产.久久久久| 亚洲一区视频在线| 国产精品成人一区二区艾草| 精品成人在线观看| 欧美日本视频在线| 在线中文字幕一区二区| 粉嫩久久99精品久久久久久夜| 蜜臀av性久久久久蜜臀av麻豆| 亚洲欧洲无码一区二区三区| 精品日韩成人av| 欧美高清视频一二三区| 在线视频欧美精品| 91在线无精精品入口| 国产精品一区二区久久不卡 | 欧美一区二区网站| 欧美日韩不卡在线| 在线看不卡av| 色综合天天性综合| 成人免费va视频| 成人免费视频一区二区| 国产99久久久精品| 高清不卡一区二区在线| 懂色av一区二区三区蜜臀| 国产精品自拍在线| 国产精品一区二区在线播放 | 91福利在线看| 色狠狠av一区二区三区| 色综合 综合色| 色偷偷久久一区二区三区| 色妞www精品视频| 91福利社在线观看| 欧美天堂一区二区三区| 欧美色中文字幕| 欧美精选一区二区| 日韩一区二区中文字幕| 精品国产一区二区三区不卡| 2024国产精品| 国产精品高清亚洲| 一区二区三区中文在线| 午夜a成v人精品| 裸体健美xxxx欧美裸体表演| 韩国欧美国产一区| 豆国产96在线|亚洲| 91麻豆免费看| 欧美群妇大交群的观看方式| 日韩精品在线一区二区| 久久久久亚洲综合| 国产精品成人午夜| 亚洲成人免费影院| 国内精品国产成人| 北条麻妃一区二区三区| 欧美日韩一区国产| 精品免费99久久| 中文字幕一区二区三区不卡在线| 亚洲精品国产成人久久av盗摄| 亚洲超碰精品一区二区| 国产米奇在线777精品观看| 波多野结衣视频一区| 欧美日韩激情一区二区三区| 久久精品亚洲国产奇米99| 一区在线播放视频| 欧美aaaaaa午夜精品| 粉嫩av一区二区三区在线播放| 欧美视频一区二| 久久精品视频在线免费观看| 亚洲精品国产一区二区三区四区在线| 视频一区中文字幕| 成人午夜在线免费| 日韩一区二区在线观看| 中文字幕在线观看一区二区| 日本欧美一区二区三区| jlzzjlzz亚洲日本少妇| 日韩欧美一二三| 一区二区在线看| 国产成人久久精品77777最新版本| 在线免费观看视频一区| 久久久久国产一区二区三区四区| 亚洲五码中文字幕| www.亚洲免费av| 精品国产一区二区精华| 丝袜亚洲另类欧美| 91亚洲精品乱码久久久久久蜜桃| 欧美va亚洲va香蕉在线| 亚洲国产一区二区视频| 成人午夜电影小说| 精品久久久久久久久久久院品网| 亚洲精品videosex极品| 成人一级黄色片| 精品国产91洋老外米糕| 日韩专区中文字幕一区二区| 91热门视频在线观看| 国产午夜一区二区三区| 久久精品噜噜噜成人av农村| 欧美日韩一区二区在线视频| 亚洲欧洲日产国码二区| 国产精品一二三在| 久久综合给合久久狠狠狠97色69| 日韩在线一区二区| 欧美久久高跟鞋激| 亚洲国产精品一区二区久久 | 国产美女视频91| 日韩一级成人av| 日韩成人午夜电影| 欧美群妇大交群中文字幕| 亚洲一区二区三区不卡国产欧美| 91玉足脚交白嫩脚丫在线播放| 久久精品一区二区三区不卡 | 一区二区三区在线视频观看58 | 日韩午夜在线影院| 午夜久久电影网| 欧美午夜精品一区二区蜜桃| 亚洲日本一区二区| 99精品国产99久久久久久白柏|