📄 ortho.c
字号:
/*
* PSP Software Development Kit - http://www.pspdev.org
* -----------------------------------------------------------------------
* Licensed under the BSD license, see LICENSE in PSPSDK root for details.
*
* Copyright (c) 2006 David Perry (Insert_witty_name)
* Simple pixel perfect ortho projection sample
*
*/
#include <pspkernel.h>
#include <pspdisplay.h>
#include <pspdebug.h>
#include <stdlib.h>
#include <pspctrl.h>
#include <pspgu.h>
#include <pspgum.h>
#include "../common/callbacks.h"
#include "../common/vram.h"
PSP_MODULE_INFO("Orthographic Projection", 0, 1, 1);
static unsigned int __attribute__((aligned(16))) list[262144];
#define BUF_WIDTH (512)
#define SCR_WIDTH (480)
#define SCR_HEIGHT (272)
struct Vertex
{
unsigned int color;
float x, y, z;
};
struct Vertex __attribute__((aligned(16))) vertices[1*3] =
{
{0xFF0000FF, 0.0f, -50.0f, 0.0f}, // Top, red
{0xFF00FF00, 50.0f, 50.0f, 0.0f}, // Right, green
{0xFFFF0000, -50.0f, 50.0f, 0.0f}, // Left, blue
};
int main(int argc, char* argv[])
{
pspDebugScreenInit();
setupCallbacks();
// Setup GU
void* fbp0 = getStaticVramBuffer(BUF_WIDTH,SCR_HEIGHT,GU_PSM_8888);
void* fbp1 = getStaticVramBuffer(BUF_WIDTH,SCR_HEIGHT,GU_PSM_8888);
void* zbp = getStaticVramBuffer(BUF_WIDTH,SCR_HEIGHT,GU_PSM_4444);
sceGuInit();
sceGuStart(GU_DIRECT,list);
sceGuDrawBuffer(GU_PSM_8888,fbp0,BUF_WIDTH);
sceGuDispBuffer(SCR_WIDTH,SCR_HEIGHT,fbp1,BUF_WIDTH);
sceGuDepthBuffer(zbp,BUF_WIDTH);
sceGuOffset(2048 - (SCR_WIDTH/2),2048 - (SCR_HEIGHT/2));
sceGuViewport(2048,2048,SCR_WIDTH,SCR_HEIGHT);
sceGuDepthRange(65535,0);
sceGuScissor(0,0,SCR_WIDTH,SCR_HEIGHT);
sceGuEnable(GU_SCISSOR_TEST);
sceGuFrontFace(GU_CW);
sceGuShadeModel(GU_SMOOTH);
sceGuDisable(GU_TEXTURE_2D);
sceGuFinish();
sceGuSync(0,0);
sceDisplayWaitVblankStart();
sceGuDisplay(1);
sceCtrlSetSamplingCycle(0);
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
ScePspFVector3 pos = {240.0f, 136.0f, 0.0f};
int val = 0;
while(running())
{
SceCtrlData pad;
sceGuStart(GU_DIRECT,list);
sceGuClearColor(0);
sceGuClearDepth(0);
sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT);
sceCtrlPeekBufferPositive(&pad, 1);
if(pad.Buttons & PSP_CTRL_UP)
pos.z += 1.0f / 100.0f;
if(pad.Buttons & PSP_CTRL_DOWN)
pos.z -= 1.0f / 100.0f;
if(abs(pad.Lx-128) > 32)
pos.x += ((pad.Lx-128)/128.0f);
if(abs(pad.Ly-128) > 32)
pos.y += ((pad.Ly-128)/128.0f);
sceGumMatrixMode(GU_PROJECTION);
sceGumLoadIdentity();
sceGumOrtho(0, 480, 272, 0, -1, 1);
sceGumMatrixMode(GU_VIEW);
sceGumLoadIdentity();
sceGumMatrixMode(GU_MODEL);
sceGumLoadIdentity();
// Draw triangle
sceGumTranslate(&pos);
sceGumRotateZ(val*0.03f);
sceGumDrawArray(GU_TRIANGLES,GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFORM_3D,1*3,0,vertices);
sceGuFinish();
sceGuSync(0,0);
pspDebugScreenSetOffset((int)fbp0);
pspDebugScreenSetXY(0,0);
pspDebugScreenPrintf("x: %.2f y: %.2f z: %.2f",pos.x,pos.y,pos.z);
sceDisplayWaitVblankStart();
fbp0 = sceGuSwapBuffers();
val++;
}
sceGuTerm();
sceKernelExitGame();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -