请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

ESFKAMI

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

ESFX

ESF: Xenoverse

ESF123

ESF1.2.3

EVM2.1

EVM2.1

ECXSSJ

ECX: TeamSSJ

ECX2.2

ECX RC2

ECX2.3

ECX RC3

查看: 1276|回复: 0

[MetaHook]曲面纹理贴图

[复制链接]

211

主题

216

帖子

1142

积分

ESFKAMI

Rank: 8Rank: 8

积分
1142
发表于 2017-7-14 16:50:24 | 显示全部楼层 |阅读模式

  1. #include <gl/glaux.h>
  2. #include <gl/glut.h>
  3. #include <math.h>

  4. #include "qgl.h"

  5. #define D_PI 3.141592653

  6. #pragma comment(lib, "opengl32.lib")
  7. #pragma comment(lib, "GLu32.lib")
  8. #pragma comment(lib, "GLaux.lib")

  9. AUX_RGBImageRec *Water_img;

  10. int rx=0,ry=0,rz=0;

  11. struct cvPoint
  12. {
  13.         float x,y,z; //点的坐标
  14. };

  15. //矢量相乘C=A*B (方向符合右手定则)
  16. void vect_mult(struct cvPoint *A, struct cvPoint *B, struct cvPoint *C)
  17. {
  18.         C->x=A->y * B->z -A ->z * B->y;
  19.         C->y=A->z * B->x -A ->x * B->z;
  20.         C->z=A->x * B->y -A ->y * B->x;
  21. }

  22. double t=0.0;//相位
  23. double sf(double x,double y)
  24. {
  25.         return cos(sqrt(x*x+y*y)+t);
  26. }

  27. float ver[21][21][3];
  28. GLvoid initVer()
  29. {
  30.         int i,j;
  31.         float dx=D_PI*8/20.0,dy=D_PI*8/20.0;
  32.         for(i=0;i<=20;i++)
  33.         for(j=0;j<=20;j++)
  34.         {
  35.                 ver[j][0]=i*dx-D_PI*4;
  36.                 ver[j][1]=j*dy-D_PI*4;
  37.                 ver[j][2]=(float)sf(ver[j][0],ver[j][1]);
  38.         }
  39. }

  40. int HUD_VidInit(void)
  41. {

  42.         QGL_Init();

  43.         Water_img = auxDIBImageLoadA( "esf/water.bmp" );

  44.         // 创建线性滤波纹理[]
  45.         qglBindTexture(GL_TEXTURE_2D, 9000);
  46.         qglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  47.         qglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  48.         qglTexImage2D(GL_TEXTURE_2D, 0, 3, Water_img->sizeX, Water_img->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, Water_img->data);

  49.         free( Water_img );

  50.         return gExportfuncs.HUD_VidInit();
  51. }

  52. void HUD_DrawNormalTriangles(void)
  53. {
  54.         qglDisable( GL_CULL_FACE );// 禁止剔除表面
  55.         qglEnable(GL_TEXTURE_2D);

  56.         qglRotatef(float(rx),1.0,0.0,0.0);
  57.         qglRotatef(float(ry),0.0,1.0,0.0);
  58.         qglRotatef(float(rz),0.0,0.0,1.0);

  59.         qglBindTexture(GL_TEXTURE_2D, 9000);

  60.         initVer();//重新赋值[]
  61.         cvPoint pa,pb,pc;
  62.         qglPushMatrix();
  63.         qglScalef(100.0,100.0,100.0);
  64.         qglTranslatef(-D_PI/2,-D_PI/2,30.0f);
  65.         qglRotatef(0,1,0,0);
  66.         qglRotatef(0,0,0,1);
  67.         for(int i=0;i<20;i++)
  68.         for(int j=0;j<20;j++)
  69.         {
  70.                 //第一条对角线
  71.                 pa.x=ver[i+1][j+1][0]-ver[j][0];
  72.                 pa.y=ver[i+1][j+1][1]-ver[j][1];
  73.                 pa.z=ver[i+1][j+1][2]-ver[j][2];
  74.                 //第二条对角线
  75.                 pb.x=ver[j+1][0]-ver[i+1][j][0];
  76.                 pb.y=ver[j+1][1]-ver[i+1][j][1];
  77.                 pb.z=ver[j+1][2]-ver[i+1][j][2];

  78.                 vect_mult(&pa,&pb,&pc);//计算法向,注意顺序[]
  79.                 qglNormal3f(pc.x,pc.y,pc.z);
  80.                 qglBegin(GL_QUADS);
  81.                 qglTexCoord2f(0.05*i,0.05*j);
  82.                 qglVertex3f(ver[j][0],ver[j][1],ver[j][2]);
  83.                 qglTexCoord2f(0.05*(i+1),0.05*j);
  84.                 qglVertex3f(ver[i+1][j][0],ver[i+1][j][1],ver[i+1][j][2]);
  85.                 qglTexCoord2f(0.05*(i+1),0.05*(j+1));
  86.                 qglVertex3f(ver[i+1][j+1][0],ver[i+1][j+1][1],ver[i+1][j+1][2]);
  87.                 qglTexCoord2f(0.05*i,0.05*(j+1));
  88.                 qglVertex3f(ver[j+1][0],ver[j+1][1],ver[j+1][2]);
  89.                 qglEnd();
  90.         }
  91.         qglPopMatrix();

  92.         t+=0.01;//改变相位

  93.         qglDisable(GL_TEXTURE_2D);

  94.         return gExportfuncs.HUD_DrawNormalTriangles();
  95. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|ESFKAMI    

GMT+8, 2018-5-24 02:40 , Processed in 0.257482 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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