#include "hgecommon.h"
#include <math.h>
extern HGE *hge;
//缩放函数
unsigned int AverageResize32(void * out,int out_width,int out_height,int out_pitch,
const void * in,int in_width,int in_height,int in_pitch)
{
for(int y_out=0; y_out<out_height; ++y_out)
{
for(int x_out=0; x_out<out_width; ++x_out)
{
int y_in1 = max(0,(y_out - 0.5f) * in_height / out_height);
int x_in1 = max(0,(x_out - 0.5f) * in_width / out_width);
int y_in2 = (y_out + 0.5f) * in_height / out_height;
int x_in2 = (x_out + 0.5f) * in_width / out_width;
BYTE * p_out = (BYTE *)((int)out + out_pitch * y_out + x_out * sizeof(DWORD));
BYTE * p_in1 = (BYTE *)((int)in + in_pitch * y_in1 + x_in1 * sizeof(DWORD));
BYTE * p_in2 = (BYTE *)((int)in + in_pitch * y_in2 + x_in2 * sizeof(DWORD));
#if DOUBLE_AVERAGE
BYTE * p_in3 = (BYTE *)((int)in + in_pitch * y_in1 + x_in2 * sizeof(DWORD));
BYTE * p_in4 = (BYTE *)((int)in + in_pitch * y_in2 + x_in1 * sizeof(DWORD));
#endif
#if DOUBLE_AVERAGE
p_out[0] = (BYTE)(((int)p_in1[0] + (int)p_in2[0] + (int)p_in3[0] + (int)p_in4[0]) / 4);
p_out[1] = (BYTE)(((int)p_in1[1] + (int)p_in2[1] + (int)p_in3[1] + (int)p_in4[1]) / 4);
p_out[2] = (BYTE)(((int)p_in1[2] + (int)p_in2[2] + (int)p_in3[2] + (int)p_in4[2]) / 4);
p_out[3] = (BYTE)(((int)p_in1[3] + (int)p_in2[3] + (int)p_in3[3] + (int)p_in4[3]) / 4);
#else
p_out[0] = (BYTE)(((int)p_in1[0] + (int)p_in2[0]) / 2);
p_out[1] = (BYTE)(((int)p_in1[1] + (int)p_in2[1]) / 2);
p_out[2] = (BYTE)(((int)p_in1[2] + (int)p_in2[2]) / 2);
p_out[3] = (BYTE)(((int)p_in1[3] + (int)p_in2[3]) / 2);
#endif
}
}
return 0;
}
float sqrt(int temp_num)
{
return sqrt((float)temp_num);
}
void ResizeTexture(HTEXTURE stex,HTEXTURE dtex,int sw,int sh,int dw,int dh)
{
if(!stex||!dtex) return;
DWORD *sp=hge->Texture_Lock(stex,true);
if(sp)
{
DWORD *dp=hge->Texture_Lock(dtex,false);
if(dp)
{
AverageResize32(dp,dw,dh,hge->Texture_GetWidth(dtex)*4,sp,sw,sh,hge->Texture_GetWidth(stex)*4);
hge->Texture_Unlock(dtex);
}
hge->Texture_Unlock(stex);
}
}
void DrawCircle(float x,float y,float radius,DWORD col)
{
int size,div=8;
if(radius>50) div=32;
else if(radius>10) div=16;
hgeVertex *v=hge->Gfx_StartBatch(HGEPRIM_LINES,0,BLEND_DEFAULT,&size);
float dangle=M_PI*2/div,sangle=0;
if(size>div) size=div;
for(int i=0;i<size;i++,sangle+=dangle)
{
v->x=x+radius*cosf(sangle);
v->y=y+radius*sinf(sangle);
v->col=col;
v->z=0.5f;
v++;
v->x=x+radius*cosf(sangle+dangle);
v->y=y+radius*sinf(sangle+dangle);
v->col=col;
v->z=0.5f;
v++;
}
hge->Gfx_FinishBatch(size);
}
void DrawCircleFill(float x,float y,float radius,DWORD col,HTEXTURE tex,float scale,float angle)
{
int size,div=8;
if(radius>50) div=32;
else if(radius>10) div=16;
hgeVertex *v=hge->Gfx_StartBatch(HGEPRIM_TRIPLES,tex,BLEND_DEFAULT,&size);
//if(size>div) size=div;
if(tex)
{
float dangle=M_PI*2/div,sangle=angle;
float cx=radius*cosf(sangle),cy=radius*sinf(sangle);
float lx=cx,ly=cy;
float tangle=0;
float tx=1*scale,ty=0;
float ltx=tx,lty=ty;
for(int i=0;i<size;i++)
{
v->x=x+lx;
v->y=y+ly;
v->z=0.5f;
v->col=col;
v->tx=ltx;
v->ty=lty;
v++;
sangle+=dangle;
tangle+=dangle;
cx=radius*cosf(sangle);
cy=radius*sinf(sangle);
tx=cosf(tangle)*scale;
ty=sinf(tangle)*scale;
v->x=x+cx;
v->y=y+cy;
v->z=0.5f;
v->col=col;
v->tx=tx;
v->ty=ty;
v++;
v->x=x;
v->y=y;
v->z=0.5f;
v->col=col;
v->tx=0;
v->ty=0;
v++;
lx=cx;
ly=cy;
ltx=tx;
lty=ty;
}
}
else
{
float dangle=M_PI*2/div,sangle=0;
float cx=radius,cy=0;
float lx=cx,ly=cy;
for(int i=0;i<size;i++)
{
v->x=x+lx;
v->y=y+ly;
v->z=0.5f;
v->col=col;
v++;
sangle+=dangle;
cx=radius*cosf(sangle);
cy=radius*sinf(sangle);
v->x=x+cx;
v->y=y+cy;
v->z=0.5f;
v->col=col;
v++;
v->x=x;
v->y=y;
v->z=0.5f;
v->col=col;
v++;
lx=cx;
ly=cy;
}
}
hge->Gfx_FinishBatch(size);
}
void DrawRectFill(float x1,float y1,float x2,float y2,DWORD col,HTEXTURE tex,float scale)
{
hgeQuad quad;
quad.tex=NULL;
quad.v[0].x=x1; quad.v[0].y=y1;
quad.v[1].x=x2; quad.v[1].y=y1;
quad.v[2].x=x2; quad.v[2].y=y2;
quad.v[3].x=x1; quad.v[3].y=y2;
quad.v[0].tx = 0; quad.v[0].ty = 0;
quad.v[1].tx = 1; quad.v[1].ty = 0;
quad.v[2].tx = 1; quad.v[2].ty = 1;
quad.v[3].tx = 0; quad.v[3].ty = 1;
quad.v[0].z =
quad.v[1].z =
quad.v[2].z =
quad.v[3].z = 0.5f;
quad.v[0].col =
quad.v[1].col =
quad.v[2].col =
quad.v[3].col = col;
quad.tex=tex;
quad.blend=BLEND_DEFAULT;
hge->Gfx_RenderQuad(&quad);
}
void DrawRect(float x1,float y1,float x2,float y2,DWORD col)
{
hge->Gfx_RenderLine(x1,y1,x2,y1,col);
hge->Gfx_RenderLine(x2,y1,x2,y2,col);
hge->Gfx_RenderLine(x2,y2,x1,y2,col);
hge->Gfx_RenderLine(x1,y2,x1,y1,col);
}
void DrawImage(HTEXTURE tex,float texx,float texy,float width,float height,float dx,float dy,float dw,float dh)
{
hgeQuad quad;
float texx1, texy1, texx2, texy2;
float tex_width,tex_height;
if(tex)
{
tex_width = (float)hge->Texture_GetWidth(tex);
tex_height = (float)hge->Texture_GetHeight(tex);
}
else
{
tex_width = 1.0f;
tex_height = 1.0f;
}
quad.tex=tex;
texx1=texx/tex_width;
texy1=texy/tex_height;
texx2=(texx+width)/tex_width;
texy2=(texy+height)/tex_height;
quad.v[0].x=dx; quad.v[0].y=dy;
quad.v[1].x=dx+dw; quad.v[1].y=dy;
quad.v[2].x=dx+dw; quad.v[2].y=dy+dh;
quad.v[3].x=dx; quad.v[3].y=dy+dh;
quad.v[0].tx = texx1; quad.v[0].ty = texy1;
quad.v[1].tx = texx2; quad.v[1].ty = texy1;
quad.v[2].tx = texx2; quad.v[2].ty = texy2;
quad.v[3].tx = texx1; quad.v[3].ty = texy2;
quad.v[0].z =
quad.v[1].z =
quad.v[2].z =
quad.v[3].z = 0.5f;
quad.v[0].col =
quad.v[1].col =
quad.v[2].col =
quad.v[3].col = 0xffffffff;
quad.blend=BLEND_DEFAULT;
hge->Gfx_RenderQuad(&quad);
}
void DrawImage(HTEXTURE tex,float dx,float dy,float dw,float dh)
{
hgeQuad quad;
quad.tex=tex;
float texx2, texy2;
if(tex)
{
texx2 = (float)hge->Texture_GetWidth(tex,true)/(float)hge->Texture_GetWidth(tex);
texy2 = (float)hge->Texture_GetHeight(tex,true)/(float)hge->Texture_GetHeight(tex);
}
else
{
texx2 = 1.0f;
texy2 = 1.0f;
}
quad.v[0].x=dx; quad.v[0].y=dy;
quad.v[1].x=dx+dw; quad.v[1].y=dy;
quad.v[2].x=dx+dw; quad.v[2].y=dy+dh;
quad.v[3].x=dx; quad.v[3].y=dy+dh;
quad.v[0].tx = 0; quad.v[0].ty = 0;
quad.v[1].tx = texx2; quad.v[1].ty = 0;
quad.v[2].tx = texx2; quad.v[2].ty = texy2;
quad.v[3].tx = 0; quad.v[3].ty = texy2;
quad.v[0].z =
quad.v[1].z =
quad.v[2].z =
quad.v[3].z = 0.5f;
quad.v[0].col =
quad.v[1].col =
quad.v[2].col =
quad.v[3].col = 0xffffffff;
quad.blend=BLEND_DEFAULT;
hge->Gfx_RenderQuad(&quad);
}
void DrawImageTiled(HTEXTURE tex,float dx,float dy,float dw,float dh)
{
hgeQuad quad;
quad.tex=tex;
float texx2, texy2;
if(tex)
{
texx2 = dw/(float)hge->Texture_GetWidth(tex,true);
texy2 = dh/(float)hge->Texture_GetHeight(tex,true);
}
else
{
texx2 = 1.0f;
texy2 = 1.0f;
}
quad.v[0].x=dx; quad.v[0].y=dy;
quad.v[1].x=dx+dw; quad.v[1].y=dy;
quad.v[2].x=dx+dw; quad.v[2].y=dy+dh;
quad.v[3].x=dx; quad.v[3].y=dy+dh;
quad.v[0].tx = 0; quad.v[0].ty = 0;
quad.v[1].tx = texx2; quad.v[1].ty = 0;
quad.v[2].tx = texx2; quad.v[2].ty = texy2;
quad.v[3].tx = 0; quad.v[3].ty = texy2;
quad.v[0].z =
quad.v[1].z =
quad.v[2].z =
quad.v[3].z = 0.5f;
quad.v[0].col =
quad.v[1].col =
quad.v[2].col =
qu
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
HGE_08.rar (67个子文件)
HGE_08
HGE_08
main.cpp 4KB
HGE_08.vcxproj.filters 1KB
Ball.cpp 4KB
hgecommon.cpp 22KB
hgecommon.h 2KB
Debug
link.7540-cvtres.write.1.tlog 2B
link.read.1.tlog 3KB
link.5620-cvtres.read.1.tlog 2B
link.5108-cvtres.read.1.tlog 2B
link.5880.write.1.tlog 2B
link.5880.read.1.tlog 2B
vc100.pdb 140KB
link-cvtres.read.1.tlog 2B
link.command.1.tlog 2KB
link.5620.write.1.tlog 2B
HGE_08.log 2KB
link.7540-cvtres.read.1.tlog 2B
rc.write.1.tlog 290B
HGE_08.write.1.tlog 0B
link.5620-cvtres.write.1.tlog 2B
link.5880-cvtres.write.1.tlog 2B
link.7540.write.1.tlog 2B
link.4244.write.1.tlog 2B
CL.write.1.tlog 1KB
hgecommon.obj 69KB
rc.command.1.tlog 514B
cl.command.1.tlog 2KB
link.4244-cvtres.read.1.tlog 2B
link.5108.read.1.tlog 2B
link-cvtres.write.1.tlog 2B
mt.read.1.tlog 310B
HGE_08.exe.intermediate.manifest 381B
HGE_08_manifest.rc 202B
link.5108.write.1.tlog 2B
main.obj 45KB
mt.write.1.tlog 310B
rc.read.1.tlog 282B
link.5880-cvtres.read.1.tlog 2B
HGE_08.lastbuildstate 60B
link.5108-cvtres.write.1.tlog 2B
link.5620.read.1.tlog 2B
HGE_08.exe.embed.manifest.res 68B
link.7540.read.1.tlog 2B
CL.read.1.tlog 40KB
vc100.idb 475KB
HGE_08.vcxprojResolveAssemblyReference.cache 713B
mt.command.1.tlog 376B
link.4244-cvtres.write.1.tlog 2B
Ball.obj 35KB
link.write.1.tlog 964B
HGE_08.exe.embed.manifest 406B
link.4244.read.1.tlog 2B
Ball.h 618B
HGE_08.vcxproj 4KB
HGE_08.vcxproj.user 143B
ipch
hge_08-bccb4a50
hge_08-816c48a7.ipch 31.44MB
HGE_08.suo 16KB
Debug
HGE_08.pdb 619KB
hge.dll 163KB
HGE_08.ilk 408KB
HGE_08.exe 72KB
resource
font1.fnt 2KB
Collision.wav 1KB
font1.png 10KB
ball.png 6KB
bass.dll 91KB
HGE_08.sln 885B
共 67 条
- 1
「已注销」
- 粉丝: 31
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页