viewport.cpp
来自「是3D游戏一书中所讲的游戏引擎fly3D 包括fly3D引擎的源码及应用此引擎」· C++ 代码 · 共 142 行
CPP
142 行
#include "..\..\lib\Fly3D.h"
#include "viewport.h"
viewport_desc cd_viewport;
BOOL APIENTRY DllMain(HINSTANCE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
switch( ul_reason_for_call )
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
__declspec( dllexport )
int num_classes()
{
return 1;
}
__declspec( dllexport )
class_desc *get_class_desc(int i)
{
switch(i)
{
case 0:
return &cd_viewport;
default: return 0;
}
}
void draw()
{
int i,nvp=0;
viewport *vp[16],*v=0;
while(v=(viewport *)flyengine->get_next_stock_object(v,TYPE_VIEWPORT))
vp[nvp++]=v;
if (nvp==0) return;
bsp_object *d=flyengine->cam;
for( i=0;i<nvp;i++ )
if (vp[i]->target && vp[i]->target->node && (vp[i]->on&0xf))
{
flyengine->cur_frame++;
local_system ls=*((local_system *)vp[i]->target);
int x=(int)(vp[i]->xf*screen_sx),
y=(int)(vp[i]->yf*screen_sy),
wx=(int)(vp[i]->sxf*screen_sx),
wy=(int)(vp[i]->syf*screen_sy);
glViewport(x,y,wx,wy);
glScissor(x,y,wx,wy);
glEnable(GL_SCISSOR_TEST);
glClear( GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT );
glDisable(GL_SCISSOR_TEST);
if (vp[i]->dirflag) vp[i]->target->rotate(180,vp[i]->target->Y);
flyengine->set_camera(vp[i]->target);
flyengine->draw_bsp();
*((local_system *)vp[i]->target)=ls;
}
glViewport(0, 0, screen_sx, screen_sy);
flyengine->set_camera(d);
for( i=0;i<nvp;i++ )
if (directx->diks[vp[i]->key]&0x80)
if ((vp[i]->on&0xf0)==0)
vp[i]->on=(int)(!vp[i]->on)|0xf0;
else ;
else if (vp[i]->on&0xf0)
vp[i]->on=(vp[i]->on&0xf);
}
__declspec( dllexport )
int fly_message(int msg,int param,void *data)
{
switch(msg)
{
case FLYM_DRAWSCENE:
if (directx->mpmode!=FLYMP_SERVER)
draw();
break;
}
return 1;
}
int viewport::get_custom_param_desc(int i,param_desc *pd)
{
if (pd==0)
return 7;
else
switch(i)
{
case 0:
pd->type='f';
pd->data=&xf;
strcpy(pd->name,"xf");
break;
case 1:
pd->type='f';
pd->data=&yf;
strcpy(pd->name,"yf");
break;
case 2:
pd->type='f';
pd->data=&sxf;
strcpy(pd->name,"sxf");
break;
case 3:
pd->type='f';
pd->data=&syf;
strcpy(pd->name,"syf");
break;
case 4:
pd->type='i';
pd->data=&dirflag;
strcpy(pd->name,"dirflag");
break;
case 5:
pd->type='d';
pd->data=⌖
strcpy(pd->name,"target");
break;
case 6:
pd->type='i';
pd->data=&key;
strcpy(pd->name,"key");
break;
}
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?