# HG changeset patch # User Shinji KONO # Date 1292299100 -32400 # Node ID 8b80f670cf1cdddcd50e9d64a9e72203f127e76c # Parent 6a8cb917e0ad563822727ad8ab58a3808ccd0b3d cordinate fix diff -r 6a8cb917e0ad -r 8b80f670cf1c Dandy.cc --- a/Dandy.cc Tue Dec 14 10:48:26 2010 +0900 +++ b/Dandy.cc Tue Dec 14 12:58:20 2010 +0900 @@ -545,13 +545,8 @@ m->color = (color & 32); m->mx = w / 2; m->my = h / 2; - m->tex_w = power_of_two(sptable[number].w); - m->tex_h = power_of_two(sptable[number].h); - //texMinX[number] = 0.0f; - //texMinY[number] = 0.0f; - //texMaxX[number] = (GLfloat)sptable[number].w / sptable[number].tex_w; - //texMaxY[number] = (GLfloat)sptable[number].h / sptable[number].tex_h; - // printf("texMaxX = %f, w = %d, tex_w = %d\n", texMaxX[number], sptable[number].w, sptable[number].tex_w); + m->tex_w = power_of_two(m->w); + m->tex_h = power_of_two(m->h); m->texture = (int *)name; } @@ -568,11 +563,11 @@ return; } SceneGraphPtr object = sgroot->createSceneGraph(name); - object->xyz[0] = x; - object->xyz[1] = y; + object->xyz[0] = x - object->c_xyz[0] * my_scale; + object->xyz[1] = y - object->c_xyz[1] * my_scale; object->xyz[2] = 0; - object->c_xyz[0] = m->mx; - object->c_xyz[1] = m->my; + //object->c_xyz[0] = m->mx; + //object->c_xyz[1] = m->my; root->addChild(object); float scale[] = {my_scale,my_scale,1}; @@ -580,19 +575,6 @@ get_matrix(object->matrix, object->angle, object->xyz, scale, root->matrix); /*法線用の行列。Cameraの行列を抜いている(Cameraのコンストラクタで、単位行列にしている)*/ get_matrix(object->real_matrix, object->angle, object->xyz, scale, root->real_matrix); -#if 0 -if (my_scale == 1 && m->w > 32) { -float v0[] = {m->w,0,0,0}; -float v1[] = {1,0,0,0}; -float w; -applyMatrix(v1, object->matrix, v0); -w = sqrtf( v1[0]*v1[0] + v1[1]*v1[1] + v1[2]*v1[2] ); -my_scale = w / ((float) m->w); -printf("scale = %g\n", my_scale); -} -#endif - - } void @@ -605,11 +587,11 @@ return; } SceneGraphPtr object = sgroot->createSceneGraph(name); - object->xyz[0] = x; - object->xyz[1] = y; + object->xyz[0] = x - object->c_xyz[0] * my_scale-m->w*my_scale; + object->xyz[1] = y - object->c_xyz[1] * my_scale-m->h*my_scale; object->xyz[2] = 0; - object->c_xyz[0] = m->mx; - object->c_xyz[1] = m->my; + //object->c_xyz[0] = m->mx; + //object->c_xyz[1] = m->my; object->angle[3] = angle; root->addChild(object); diff -r 6a8cb917e0ad -r 8b80f670cf1c sgoex.c --- a/sgoex.c Tue Dec 14 10:48:26 2010 +0900 +++ b/sgoex.c Tue Dec 14 12:58:20 2010 +0900 @@ -57,13 +57,6 @@ 関数プロトタイプ ---------------------------------------------------------------*/ -void DefSpriteEx(int number, short middlex, short middley) -{ - sptable[number].mx = middlex; - sptable[number].my = middley; -} - - void SDL_GL_Enter2DMode() { // SDL_Surface *sc = SDL_GetVideoSurface(); @@ -119,8 +112,15 @@ return value; } +void +DefSpriteEx(int number, short middlex, short middley) +{ + sptable[number].mx = middlex; + sptable[number].my = middley; +} -void DefSprite(int number, const char *name, float w, float h, int color, OBJECT *obj) +void +DefSprite(int number, const char *name, float w, float h, int color, OBJECT *obj) { SURFACE *surfaces; surfaces = search_node(obj, name); @@ -142,12 +142,12 @@ texMinY[number] = 0.0f; texMaxX[number] = (GLfloat)sptable[number].w / sptable[number].tex_w; texMaxY[number] = (GLfloat)sptable[number].h / sptable[number].tex_h; - printf("texMaxX = %f, w = %d, tex_w = %d\n", - texMaxX[number], sptable[number].w, sptable[number].tex_w); +// printf("texMaxX = %f, w = %d, tex_w = %d\n", texMaxX[number], sptable[number].w, sptable[number].tex_w); sptable[number].texture = surfaces->texture; } -void PutSprite(int zorder, short x, short y, int number) +void +PutSprite(int zorder, short x, short y, int number) { glBindTexture(GL_TEXTURE_2D, (GLuint&)sptable[number].texture); glEnable(GL_BLEND); @@ -161,7 +161,8 @@ glDisable(GL_BLEND); } -void PutSpriteEx(int number, int x, int y, float scalex, float scaley, float angle) +void +PutSpriteEx(int number, int x, int y, float scalex, float scaley, float angle) { SpriteTable *m = &sptable[number]; x -= m->w;