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

ESFKAMI

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

ESFX

ESF: Xenoverse

ESF123

ESF1.2.3

EVM2.1

EVM2.1

ECXSSJ

ECX: TeamSSJ

ECX2.2

ECX RC2

ECX2.3

ECX RC3

查看: 1017|回复: 0

[MetaHook]画天空盒子|Draw a Skybox

[复制链接]

211

主题

216

帖子

1142

积分

ESFKAMI

Rank: 8Rank: 8

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

  1. #include <exportfuncs.h>
  2. #include <gl/glaux.h>

  3. #include "surface.h"
  4. #include "qgl.h"

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

  8. cl_enginefunc_t gEngfuncs;
  9. AUX_RGBImageRec *Sky_rt, *Sky_lf, *Sky_ft, *Sky_bk, *Sky_up, *Sky_dn;

  10. int Initialize(struct cl_enginefuncs_s *pEnginefuncs, int iVersion)
  11. {
  12.         memcpy(&gEngfuncs, pEnginefuncs, sizeof(gEngfuncs));
  13.         return gExportfuncs.Initialize(pEnginefuncs, iVersion);
  14. }

  15. int HUD_VidInit(void)
  16. {
  17.         QGL_Init();

  18.         if( strcmp( gEngfuncs.pfnGetCvarString( "sv_skyname" ), "SkyName" ) ) return gExportfuncs.HUD_VidInit();

  19.         // >> 装入位图
  20.         Sky_rt = auxDIBImageLoadA( "esf/gfx/env/SkyName_rt.bmp" );
  21.         Sky_lf = auxDIBImageLoadA( "esf/gfx/env/SkyName_lf.bmp" );
  22.         Sky_ft = auxDIBImageLoadA( "esf/gfx/env/SkyName_ft.bmp" );
  23.         Sky_bk = auxDIBImageLoadA( "esf/gfx/env/SkyName_bk.bmp" );
  24.         Sky_up = auxDIBImageLoadA( "esf/gfx/env/SkyName_up.bmp" );
  25.         Sky_dn = auxDIBImageLoadA( "esf/gfx/env/SkyName_dn.bmp" );

  26.         if ( Sky_rt == NULL || Sky_lf == NULL || Sky_ft == NULL || Sky_bk == NULL || Sky_up == NULL || Sky_dn == NULL )
  27.                 return gExportfuncs.HUD_VidInit();

  28.        
  29.         // >> 设置纹理环境
  30.         qglTexEnvi( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_ENV, GL_REPLACE );
  31.         qglTexParameteri( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
  32.         qglTexParameteri( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
  33.         qglTexParameteri( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
  34.         qglTexParameteri( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
  35.         qglTexParameteri( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE );

  36.         // >> 加载纹理贴图
  37.         qglTexImage2D( GL_TEXTURE_CUBE_MAP_POSITIVE_X,  0, GL_RGB, Sky_lf->sizeX, Sky_lf->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, Sky_lf->data );
  38.         qglTexImage2D( GL_TEXTURE_CUBE_MAP_NEGATIVE_X,  0, GL_RGB, Sky_rt->sizeX, Sky_rt->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, Sky_rt->data );
  39.         qglTexImage2D( GL_TEXTURE_CUBE_MAP_POSITIVE_Y,  0, GL_RGB, Sky_ft->sizeX, Sky_ft->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, Sky_ft->data );
  40.         qglTexImage2D( GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,  0, GL_RGB, Sky_bk->sizeX, Sky_bk->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, Sky_bk->data );
  41.         qglTexImage2D( GL_TEXTURE_CUBE_MAP_POSITIVE_Z,  0, GL_RGB, Sky_dn->sizeX, Sky_dn->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, Sky_dn->data );
  42.         qglTexImage2D( GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,  0, GL_RGB, Sky_up->sizeX, Sky_up->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, Sky_up->data );

  43.         return gExportfuncs.HUD_VidInit();
  44. }

  45. void HUD_DrawNormalTriangles(void)
  46. {
  47.         if ( Sky_rt == NULL || Sky_lf == NULL || Sky_ft == NULL || Sky_bk == NULL || Sky_up == NULL || Sky_dn == NULL )
  48.                 return gExportfuncs.HUD_DrawNormalTriangles();

  49.         qglDisable( GL_CULL_FACE );// 禁止剔除表面
  50.         qglEnable( GL_TEXTURE_CUBE_MAP );// 启用立方体贴图[]
  51.         // >> 禁止自动生成纹理坐标
  52.         qglDisable( GL_TEXTURE_GEN_S );
  53.         qglDisable( GL_TEXTURE_GEN_T );
  54.         qglDisable( GL_TEXTURE_GEN_R );

  55.         qglBegin( GL_QUADS );
  56.                 // >> 右面 rt
  57.                 qglTexCoord3f( -1.0f, 1.0f, -1.0f ); qglVertex3f( 25400.0f, 25330.0f, -25000.0f );
  58.                 qglTexCoord3f( -1.0f, -1.0f, -1.0f ); qglVertex3f( 25400.0f, 25330.0f, 25000.0f );
  59.                 qglTexCoord3f( -1.0f, -1.0f, 1.0f ); qglVertex3f( 25400.0f, -25430.0f, 25000.0f );
  60.                 qglTexCoord3f( -1.0f, 1.0f, 1.0f ); qglVertex3f( 25400.0f, -25430.0f, -25000.0f );

  61.                 // >> 左面 lf
  62.                 qglTexCoord3f( 1.0f, 1.0f, 1.0f ); qglVertex3f( -25400.0f, -25430.0f, -25000.0f );
  63.                 qglTexCoord3f( 1.0f, -1.0f, 1.0f ); qglVertex3f( -25400.0f, -25430.0f, 25000.0f );
  64.                 qglTexCoord3f( 1.0f, -1.0f, -1.0f ); qglVertex3f( -25400.0f, 25330.0f, 25000.0f );
  65.                 qglTexCoord3f( 1.0f, 1.0f, -1.0f ); qglVertex3f( -25400.0f, 25330.0f, -25000.0f );

  66.                 // >> 前面 ft
  67.                 qglTexCoord3f( -1.0f, 1.0f, -1.0f ); qglVertex3f( 25400.0f, -25430.0f, -25000.0f );
  68.                 qglTexCoord3f( -1.0f, 1.0f, 1.0f ); qglVertex3f( 25400.0f, -25430.0f, 25000.0f );
  69.                 qglTexCoord3f( 1.0f, 1.0f, 1.0f ); qglVertex3f( -25400.0f, -25430.0f, 25000.0f );
  70.                 qglTexCoord3f( 1.0f, 1.0f, -1.0f ); qglVertex3f( -25400.0f, -25430.0f, -25000.0f );

  71.                 // >> 后面 bk
  72.                 qglTexCoord3f( -1.0f, -1.0f, 1.0f ); qglVertex3f( -25400.0f, 25330.0f, -25000.0f );
  73.                 qglTexCoord3f( -1.0f, -1.0f, -1.0f ); qglVertex3f( -25400.0f, 25330.0f, 25000.0f );
  74.                 qglTexCoord3f( 1.0f, -1.0f, -1.0f ); qglVertex3f( 25400.0f, 25330.0f, 25000.0f );
  75.                 qglTexCoord3f( 1.0f, -1.0f, 1.0f ); qglVertex3f( 25400.0f, 25330.0f, -25000.0f );

  76.                 // >> 顶面 up
  77.                 qglTexCoord3f( 1.0f, 1.0f, -1.0f ); qglVertex3f( 25400.0f, 25330.0f, 25000.0f );
  78.                 qglTexCoord3f( -1.0f, 1.0f, -1.0f ); qglVertex3f( 25400.0f, -25430.0f, 25000.0f );
  79.                 qglTexCoord3f( -1.0f, -1.0f, -1.0f ); qglVertex3f( -25400.0f, -25430.0f, 25000.0f );
  80.                 qglTexCoord3f( 1.0f, -1.0f, -1.0f ); qglVertex3f( -25400.0f, 25330.0f, 25000.0f );

  81.                 // >> 底面 dn
  82.                 qglTexCoord3f( -1.0f, -1.0f, 1.0f ); qglVertex3f( 25400.0f, 25330.0f, -25000.0f );
  83.                 qglTexCoord3f( 1.0f, -1.0f, 1.0f ); qglVertex3f( 25400.0f, -25430.0f, -25000.0f );
  84.                 qglTexCoord3f( 1.0f, 1.0f, 1.0f ); qglVertex3f( -25400.0f, -25430.0f, -25000.0f );
  85.                 qglTexCoord3f( -1.0f, 1.0f, 1.0f ); qglVertex3f( -25400.0f, 25330.0f, -25000.0f );
  86.         qglEnd();

  87.         qglDisable(GL_TEXTURE_CUBE_MAP);// 禁止立方体贴图[]

  88.         return gExportfuncs.HUD_DrawNormalTriangles();
  89. }
复制代码
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|ESFKAMI    

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

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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