游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2293|回复: 1

自己动手画圆环体(轮胎体)代码

[复制链接]

5

主题

10

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2005-1-19 10:09:00 | 显示全部楼层 |阅读模式
const
{正旋值-90_+90}zhengxuan1:array[-9..9]of single=(-1    ,-0.985,-0.966,-0.906,-0.819,-0.707,-0.574,-0.423,-0.2589,-0.087,0.087,0.259,0.423,0.574,0.707,0.819,0.906,0.966,0.996);
{余玄值-90_+90}yuxuan1   :array[-9..9]of single=(0     ,0.174 ,0.342,0.5,0.643,0.766,0.866,0.94,0.985,1,0.985,0.94,0.866,0.766,0.643,0.5,0.342,0.174,0);
{正旋值0_+360 }zhengxuan2:array[0..18]of single=(0.0001,0.3420,0.6428,0.8660,0.9848,0.9848,0.8660,0.6428,0.3420,0,-0.3420,-0.6428,-0.8660,-0.9848,-0.9848,-0.8660,-0.6428,-0.3420,0.0001);
{余玄值0_+360 }yuxuan2   :array[0..18]of single=(1     ,0.9397,0.7660,0.5,0.1736,-0.1736,-0.5,-0.7660,-0.9397,-1,-0.9397,-0.7660,-0.5,-0.1736,0.1736,0.5,0.7660,0.9397,1);

procedure tform1.yuanhuan(ox,oy,oz,s,r1,l1,l2,l3,l4:real;fangxiang:integer);
{//轮胎体//fangxiang=1面向z轴方向//fangxiang=2指向x轴方向//fangxiang=3指向y轴方向}
var
  i,j:integer;
  x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x12,y12,z12,x13,y13,z13,nx1,ny1,nz1,nx,ny,nz,n:real;
begin
  for i:=0 to 17 do
    begin
      for j:=0 to 17 do
        begin
          glbegin(gl_quads);
            case fangxiang of
             1:begin
               x1:=ox+(s+r1*yuxuan2[j])*yuxuan2    ;y1:=oy+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2    ;z1:=oz+r1*zhengxuan2[j]  ;
               x2:=ox+(s+r1*yuxuan2[j])*yuxuan2[i+1]  ;y2:=oy+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2[i+1]  ;z2:=oz+r1*zhengxuan2[j]  ;
               x3:=ox+(s+r1*yuxuan2[j+1])*yuxuan2[i+1];y3:=oy+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2[i+1];z3:=oz+r1*zhengxuan2[j+1];
               x4:=ox+(s+r1*yuxuan2[j+1])*yuxuan2  ;y4:=oy+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2  ;z4:=oz+r1*zhengxuan2[j+1];
               end;
             2:begin
               x1:=ox+r1*zhengxuan2[j]  ;y1:=oy+(s+r1*yuxuan2[j])*yuxuan2    ;z1:=oz+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2    ;
               x2:=ox+r1*zhengxuan2[j]  ;y2:=oy+(s+r1*yuxuan2[j])*yuxuan2[i+1]  ;z2:=oz+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2[i+1]  ;
               x3:=ox+r1*zhengxuan2[j+1];y3:=oy+(s+r1*yuxuan2[j+1])*yuxuan2[i+1];z3:=oz+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2[i+1];
               x4:=ox+r1*zhengxuan2[j+1];y4:=oy+(s+r1*yuxuan2[j+1])*yuxuan2  ;z4:=oz+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2  ;
               end;
             3:begin
               x1:=ox+(s+r1*yuxuan2[j])*yuxuan2    ;y1:=oy+r1*zhengxuan2[j]  ;z1:=oz+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2    ;
               x2:=ox+(s+r1*yuxuan2[j])*yuxuan2[i+1]  ;y2:=oy+r1*zhengxuan2[j]  ;z2:=oz+sqrt(s*s+2*r1*s*yuxuan2[j]+r1*r1)*zhengxuan2[i+1]  ;
               x3:=ox+(s+r1*yuxuan2[j+1])*yuxuan2[i+1];y3:=oy+r1*zhengxuan2[j+1];z3:=oz+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2[i+1];
               x4:=ox+(s+r1*yuxuan2[j+1])*yuxuan2  ;y4:=oy+r1*zhengxuan2[j+1];z4:=oz+sqrt(s*s+2*r1*s*yuxuan2[j+1]+r1*r1)*zhengxuan2  ;
               end;
             end;
            x12:=x2-x1           ;y12:=y2-y1           ;z12:=z2-z1;
            x13:=x3-x1           ;y13:=y3-y1           ;z13:=z3-z1;
            nx:=y12*z13-z12*y13  ;ny:=z12*x13-x12*z13  ;nz:=x12*y12-y12*x12;
            n:=sqrt(nx*nx+ny*ny+nz*nz);
            nx1:=nx/n;ny1:=ny/n;nz1:=nz/n;
            gltexcoord2f(l1+j/18*(l3-l1)    ,l2+i/18*(l4-l2)    );glnormal3f(nx1,ny1,nz1);glvertex3f(x1,y1,z1);
            gltexcoord2f(l1+j/18*(l3-l1)    ,l2+(i+1)/18*(l4-l2));glvertex3f(x2,y2,z2);
            gltexcoord2f(l1+(j+1)/18*(l3-l1),l2+(i+1)/18*(l4-l2));glvertex3f(x3,y3,z3);
            gltexcoord2f(l1+(j+1)/18*(l3-l1),l2+i/18*(l4-l2)    );glvertex3f(x4,y4,z4);
          glend;
        end;
    end;
end;

0

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
QQ
发表于 2005-1-19 23:11:00 | 显示全部楼层

Re: 自己动手画圆环体(轮胎体)代码

高手, 只是编译以后运行时出错,可不可以发布出全部代码?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 03:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表