forums.ps2dev.org Forum Index forums.ps2dev.org
Homebrew PS2, PSP & PS3 Development Discussions
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

textures & normals

 
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PSP Development
View previous topic :: View next topic  
Author Message
LuMo



Joined: 21 Aug 2005
Posts: 410
Location: Austria

PostPosted: Wed Feb 01, 2006 11:57 pm    Post subject: textures & normals Reply with quote

hi,
i am still working on my meshloader and currently i am trying to get textures on the meshes;
the structure i am using for a textured vertex is:
Code:
class Vertex3dbV4
{
  public:

  float u, v;         // UV-texture
  unsigned int color; // AABBGGRR
  float nx, ny, nz;   // normals   
  float x, y, z;
};


so when i am drawing the model i pass the following line:
Code:
            sceGumDrawArray(GU_TRIANGLES,
                            GU_INDEX_16BIT | GU_TEXTURE_32BITF | GU_NORMAL_32BITF | GU_COLOR_8888 | GU_VERTEX_32BITF | GU_TRANSFORM_3D,
                            (int)mesh.faceCount * 3,
                            mesh.faces,
                            mesh.verticesV4);

note: i also tried to swap to
GU_INDEX_16BIT | GU_TEXTURE_32BITF | GU_COLOR_8888 | GU_NORMAL_32BITF |GU_VERTEX_32BITF | GU_TRANSFORM_3D
with the absolute same effect...
its still flat!
the normals are calculated correct, as i am using it in non-textured mode, which works out nice!
any ideas?
greets
lumo
_________________
"Good artists copy, great artists steal."
Pablo Picasso
go2lumo.com
Back to top
View user's profile Send private message Visit poster's website
jsgf



Joined: 12 Jul 2005
Posts: 254

PostPosted: Thu Feb 02, 2006 8:59 am    Post subject: Reply with quote

You're not calling
Code:
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGB);
? Without that, the vertex colours computed by lighting will have no effect on the texture. Also, you probably don't need per-vertex colours, since you're using lighting.
Back to top
View user's profile Send private message Visit poster's website
TheBrooster



Joined: 01 Jun 2005
Posts: 16

PostPosted: Thu Feb 02, 2006 9:36 am    Post subject: Reply with quote

On a similar note. I am trying to modify the cube demo to use a 32 bpp tga, with alpha. The tga loads and renders, but the transparent portions are completely opaque, any ideas?

Here is the setup code

Code:
void
InitDisplay(void)
{
    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);
   sceGuDepthFunc(GU_GEQUAL);
   sceGuEnable(GU_DEPTH_TEST);
   sceGuEnable(GU_CULL_FACE);
   sceGuEnable(GU_TEXTURE_2D);
   sceGuEnable(GU_CLIP_PLANES);

   //sceGuAlphaFunc(GU_GREATER, 0, 0xff);
   //sceGuEnable(GU_ALPHA_TEST);

   // enable alpha channel
   sceGuEnable(GU_BLEND);
   sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, 0, 0);

   // setup projection matrix
   sceGumMatrixMode(GU_PROJECTION);
   sceGumLoadIdentity();
   sceGumPerspective(75.0f,16.0f/9.0f,0.5f,1000.0f);

   // setup view matrix
   sceGumMatrixMode(GU_VIEW);
   sceGumLoadIdentity();

   // setup model matrix
   sceGumMatrixMode(GU_MODEL);
   sceGumLoadIdentity();

   sceGuAmbientColor(0xffffffff);

   sceGuFinish();
   sceGuSync(0,0);

   sceDisplayWaitVblankStart();
   sceGuDisplay(GU_TRUE);
}


and my render code:

Code:
void
CRenderer::Render(void)
{
   if ( !pImage )
      pImage = g_TextureMan.LoadTGA( "Octane.tga");

   if ( !pImage )
      return;

   static float val = 0.f;

   sceGumMatrixMode(GU_MODEL);
   sceGumLoadIdentity();
   {
      ScePspFVector3 pos = { 0, 0, -2.5f };
      ScePspFVector3 rot = { val * 0.79f * (GU_PI/180.0f), val * 0.98f * (GU_PI/180.0f), val * 1.32f * (GU_PI/180.0f) };
      sceGumTranslate(&pos);
      sceGumRotateXYZ(&rot);
   }

   // setup texture
   sceGuTexMode( pImage->GetFormat(), pImage->GetNumMipmaps(), 0, pImage->IsSwizzled() );
   sceGuTexImage( 0, pImage->GetWidth(), pImage->GetHeight(), pImage->GetWidth(), pImage->GetImageData() );
   sceGuTexFunc(GU_TFX_BLEND, GU_TCC_RGBA);
   sceGuTexEnvColor(0x00000000);
   sceGuTexFilter(GU_LINEAR,GU_LINEAR);
   sceGuTexScale(1.0f,1.0f);
   sceGuTexOffset(0.0f,0.0f);

   // draw test case
   sceGumDrawArray(GU_TRIANGLES,GU_TEXTURE_32BITF|GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFORM_3D,12*3,0,vertices);

   val += 0.25f;
}
Back to top
View user's profile Send private message
LuMo



Joined: 21 Aug 2005
Posts: 410
Location: Austria

PostPosted: Thu Feb 02, 2006 7:20 pm    Post subject: Reply with quote

jsgf wrote:
You're not calling
Code:
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGB);
? Without that, the vertex colours computed by lighting will have no effect on the texture. Also, you probably don't need per-vertex colours, since you're using lighting.


if i am using modulate the cube is black! (no more textures)
further, by using
GU_TFX_ADD - The texture is added on-top of the diffuse fragment
should do similar (and textures)

still no shading.

@thebrooster
try adding:


greets lumo
Code:
sceGuTexFunc     (GU_TFX_ADD,GU_TCC_RGBA);

should fix your problem
_________________
"Good artists copy, great artists steal."
Pablo Picasso
go2lumo.com
Back to top
View user's profile Send private message Visit poster's website
LuMo



Joined: 21 Aug 2005
Posts: 410
Location: Austria

PostPosted: Thu Feb 02, 2006 8:46 pm    Post subject: Reply with quote

this is my full texture setup:
Code:
  sceGuEnable(GU_TEXTURE_2D);
      sceGuTexMode(GU_PSM_8888,0,0,0);
      /* Set texture as current texture for the GU */
      sceGuTexImage(0,width, height, width, texture);
      sceGuTexFunc(GU_TFX_REPLACE,GU_TCC_RGBA); // adds to vertexpaint
      sceGuTexEnvColor(0xffff00);
      sceGuTexFilter(GU_LINEAR,GU_LINEAR);
      sceGuTexScale(1.0f,1.0f);
      sceGuTexOffset(0.0f,0.0f); 


and thats my gu setup: (above the texture setup...)
Code:
  // setup GU
  sceGuInit();
  sceGuStart(GU_DIRECT, list);
  sceGuDrawBuffer(GU_PSM_8888, (void *)0, BUF_WIDTH);
  sceGuDispBuffer(SCR_WIDTH, SCR_HEIGHT, (void *)0x88000, BUF_WIDTH);
  sceGuDepthBuffer((void *)0x110000, BUF_WIDTH);
  sceGuOffset(2048 - (SCR_WIDTH / 2), 2048 - (SCR_HEIGHT / 2));
  sceGuViewport(2048, 2048, SCR_WIDTH, SCR_HEIGHT);
  sceGuDepthRange(0xc350, 0x2710);
  sceGuScissor(0, 0, SCR_WIDTH, SCR_HEIGHT);
  sceGuEnable(GU_SCISSOR_TEST);
  sceGuDepthFunc(GU_GEQUAL);
  sceGuEnable(GU_DEPTH_TEST);
  sceGuFrontFace(GU_CCW); //backfaceculling
  sceGuShadeModel(GU_SMOOTH);

  sceGuEnable(GU_CULL_FACE); //enable faceculling
  sceGuEnable(GU_CLIP_PLANES);

  //lightning
  sceGuEnable(GU_LIGHTING);
  sceGuEnable(GU_LIGHT0);



greets lumo
_________________
"Good artists copy, great artists steal."
Pablo Picasso
go2lumo.com
Back to top
View user's profile Send private message Visit poster's website
LuMo



Joined: 21 Aug 2005
Posts: 410
Location: Austria

PostPosted: Thu Feb 02, 2006 9:04 pm    Post subject: Reply with quote

here a full sample of the modded version of the cube
note: normals are NOT correct, jzst random numbers, but that does not really matter, as at least something should be shaded...

its black using
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGB);
and its textured using
sceGuTexFunc(GU_TFX_ADD, GU_TCC_RGB);

if someone gets THIS code running with shading, my problems are solved too :)
Code:
/*
 * PSP Software Development Kit - http://www.pspdev.org
 * -----------------------------------------------------------------------
 * Licensed under the BSD license, see LICENSE in PSPSDK root for details.
 *
 * Copyright (c) 2005 Jesper Svennevid
 */

#include <pspkernel.h>
#include <pspdisplay.h>
#include <pspdebug.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>

#include <pspgu.h>
#include <pspgum.h>

PSP_MODULE_INFO("Cube Sample", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);

#define printf   pspDebugScreenPrintf

static unsigned int __attribute__((aligned(16))) list[262144];
extern unsigned char logo_start[];

struct Vertex
{
   float u, v;
   unsigned int color;
   float nx, ny, nz;   // normals   
   float x,y,z;
};

struct Vertex __attribute__((aligned(16))) vertices[12*3] =
{
   {0, 0, 0,0,1, 0xff7f0000,-1,-1, 1}, // 0
   {1, 0, 0,1,1, 0xff7f0000,-1, 1, 1}, // 4
   {1, 1, 1,1,1, 0xff7f0000, 1, 1, 1}, // 5

   {0, 0, 0,0,1, 0xff7f0000,-1,-1, 1}, // 0
   {1, 1, 1,1,1, 0xff7f0000, 1, 1, 1}, // 5
   {0, 1, 1,0,1, 0xff7f0000, 1,-1, 1}, // 1

   {0, 0, 0,0,0, 0xff7f0000,-1,-1,-1}, // 3
   {1, 0, 1,0,0, 0xff7f0000, 1,-1,-1}, // 2
   {1, 1, 1,1,0, 0xff7f0000, 1, 1,-1}, // 6

   {0, 0, 0,0,0, 0xff7f0000,-1,-1,-1}, // 3
   {1, 1, 1,1,0, 0xff7f0000, 1, 1,-1}, // 6
   {0, 1, 0,1,0, 0xff7f0000,-1, 1,-1}, // 7

   {0, 0, 1,0,0, 0xff007f00, 1,-1,-1}, // 0
   {1, 0, 1,0,1, 0xff007f00, 1,-1, 1}, // 3
   {1, 1, 1,1,1, 0xff007f00, 1, 1, 1}, // 7

   {0, 0, 1,0,0, 0xff007f00, 1,-1,-1}, // 0
   {1, 1, 1,1,1, 0xff007f00, 1, 1, 1}, // 7
   {0, 1, 1,1,0, 0xff007f00, 1, 1,-1}, // 4

   {0, 0, 0,0,0, 0xff007f00,-1,-1,-1}, // 0
   {1, 0, 0,1,0, 0xff007f00,-1, 1,-1}, // 3
   {1, 1, 0,1,1, 0xff007f00,-1, 1, 1}, // 7

   {0, 0, 0,0,0, 0xff007f00,-1,-1,-1}, // 0
   {1, 1, 0,1,1, 0xff007f00,-1, 1, 1}, // 7
   {0, 1, 0,0,1, 0xff007f00,-1,-1, 1}, // 4

   {0, 0, 0,1,0, 0xff00007f,-1, 1,-1}, // 0
   {1, 0, 1,1,0, 0xff00007f, 1, 1,-1}, // 1
   {1, 1, 1,1,1, 0xff00007f, 1, 1, 1}, // 2

   {0, 0, 0,1,0, 0xff00007f,-1, 1,-1}, // 0
   {1, 1, 1,1,1, 0xff00007f, 1, 1, 1}, // 2
   {0, 1, 0,1,1, 0xff00007f,-1, 1, 1}, // 3

   {0, 0, 0,0,0, 0xff00007f,-1,-1,-1}, // 4
   {1, 0, 0,0,1, 0xff00007f,-1,-1, 1}, // 7
   {1, 1, 1,0,1, 0xff00007f, 1,-1, 1}, // 6

   {0, 0, 0,0,0, 0xff00007f,-1,-1,-1}, // 4
   {1, 1, 1,0,1, 0xff00007f, 1,-1, 1}, // 6
   {0, 1, 1,0,0, 0xff00007f, 1,-1,-1}, // 5
};

int SetupCallbacks();

#define BUF_WIDTH (512)
#define SCR_WIDTH (480)
#define SCR_HEIGHT (272)
#define PIXEL_SIZE (4) /* change this if you change to another screenmode */
#define FRAME_SIZE (BUF_WIDTH * SCR_HEIGHT * PIXEL_SIZE)
#define ZBUF_SIZE (BUF_WIDTH SCR_HEIGHT * 2) /* zbuffer seems to be 16-bit? */

int main(int argc, char* argv[])
{
   SetupCallbacks();

   // setup GU

   sceGuInit();

   sceGuStart(GU_DIRECT,list);
   sceGuDrawBuffer(GU_PSM_8888,(void*)0,BUF_WIDTH);
   sceGuDispBuffer(SCR_WIDTH,SCR_HEIGHT,(void*)0x88000,BUF_WIDTH);
   sceGuDepthBuffer((void*)0x110000,BUF_WIDTH);
   sceGuOffset(2048 - (SCR_WIDTH/2),2048 - (SCR_HEIGHT/2));
   sceGuViewport(2048,2048,SCR_WIDTH,SCR_HEIGHT);
   sceGuDepthRange(0xc350,0x2710);
   sceGuScissor(0,0,SCR_WIDTH,SCR_HEIGHT);
   sceGuEnable(GU_SCISSOR_TEST);
   sceGuDepthFunc(GU_GEQUAL);
   sceGuEnable(GU_DEPTH_TEST);
   sceGuFrontFace(GU_CW);
   sceGuShadeModel(GU_SMOOTH);
   sceGuEnable(GU_CULL_FACE);
   sceGuEnable(GU_TEXTURE_2D);
   sceGuEnable(GU_CLIP_PLANES);
   sceGuFinish();
   sceGuSync(0,0);

   sceDisplayWaitVblankStart();
   sceGuDisplay(GU_TRUE);

   // run sample

   int val = 0;

   for(;;)
   {
      sceGuStart(GU_DIRECT,list);

      // clear screen

      sceGuClearColor(0xff554433);
      sceGuClearDepth(0);
      sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT);

      // setup matrices for cube

      sceGumMatrixMode(GU_PROJECTION);
      sceGumLoadIdentity();
      sceGumPerspective(75.0f,16.0f/9.0f,0.5f,1000.0f);

      sceGumMatrixMode(GU_VIEW);
      sceGumLoadIdentity();

      sceGumMatrixMode(GU_MODEL);
      sceGumLoadIdentity();
      {
         ScePspFVector3 pos = { 0, 0, -2.5f };
         ScePspFVector3 rot = { val * 0.79f * (GU_PI/180.0f), val * 0.98f * (GU_PI/180.0f), val * 1.32f * (GU_PI/180.0f) };
         sceGumTranslate(&pos);
         sceGumRotateXYZ(&rot);
      }

      // setup texture

      sceGuTexMode(GU_PSM_4444,0,0,0);
      sceGuTexImage(0,64,64,64,logo_start);
//sceGuTexFunc(GU_TFX_ADD,GU_TCC_RGB);
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGB);
      sceGuTexEnvColor(0xffff00);
      sceGuTexFilter(GU_LINEAR,GU_LINEAR);
      sceGuTexScale(1.0f,1.0f);
      sceGuTexOffset(0.0f,0.0f);
      sceGuAmbientColor(0xffffffff);

      // draw cube

      sceGumDrawArray(GU_TRIANGLES,GU_TEXTURE_32BITF | GU_COLOR_8888 | GU_NORMAL_32BITF |GU_VERTEX_32BITF|GU_TRANSFORM_3D,12*3,0,vertices);

      sceGuFinish();
      sceGuSync(0,0);

      sceDisplayWaitVblankStart();
      sceGuSwapBuffers();

      val++;
   }

   sceGuTerm();

   sceKernelExitGame();
   return 0;
}

/* Exit callback */
int exit_callback(int arg1, int arg2, void *common)
{
   sceKernelExitGame();
   return 0;
}

/* Callback thread */
int CallbackThread(SceSize args, void *argp)
{
   int cbid;

   cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
   sceKernelRegisterExitCallback(cbid);

   sceKernelSleepThreadCB();

   return 0;
}

/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void)
{
   int thid = 0;

   thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
   if(thid >= 0)
   {
      sceKernelStartThread(thid, 0, 0);
   }

   return thid;
}

_________________
"Good artists copy, great artists steal."
Pablo Picasso
go2lumo.com
Back to top
View user's profile Send private message Visit poster's website
TheBrooster



Joined: 01 Jun 2005
Posts: 16

PostPosted: Fri Feb 03, 2006 2:17 am    Post subject: Reply with quote

Cheers Lumo, I will give it a go when I get home from work.
Back to top
View user's profile Send private message
LuMo



Joined: 21 Aug 2005
Posts: 410
Location: Austria

PostPosted: Fri Feb 03, 2006 2:24 am    Post subject: Reply with quote

ok i got it working
note: never use a white texture and white shading ;)

greets
lumo
PS: msg me if you need help
_________________
"Good artists copy, great artists steal."
Pablo Picasso
go2lumo.com
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PSP Development All times are GMT + 10 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group