forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Текстурные координаты в примитивах (http://forum.boolean.name/showthread.php?t=7620)

-=Jack=- 11.01.2009 12:05

Текстурные координаты в примитивах
 
Для создания примитивов я использую стандартные функции класса Mesh( Mesh.Box, Mesh.Sphere, ... ). Но я обнаружил, что в создаваемых примитивах отсутствует информация о текстурных координатах :''(( . Их можно както рассчитать? Я понимаю, как для куба, а вот для сферы, тора или конуса?

Mr_F_ 11.01.2009 12:27

Ответ: Текстурные координаты в примитивах
 
на всё свои методы...

это может быть полезным:
http://blitz.pp.ru/forum/showthread....&threadid=4109

jimon 11.01.2009 13:52

Ответ: Текстурные координаты в примитивах
 
конечно криво, но сфера и конус собсно являются цилиндром без верхних граней, цилиндр является прямоугольником замкнутым на себя, для сферы я использовал это свойство, она генерировалась перебирая сферические координаты с некоторым шагом и раставляя таким образом индексы, если поделить текущую сферическую координату на отрезок которую она проходит получим текстурную координату (тоесть края прямоугольника имели положенные им 4 координаты (0,0) (1,0) (0,1) (1,1) )

для тора возможно применения схожего метода, главное понять как действительно хочешь чтобы текстура накладывалась, а методов её наложения куча

-=Jack=- 11.01.2009 18:22

Ответ: Текстурные координаты в примитивах
 
Цитата:

Сообщение от Mr_F_ (Сообщение 94465)
это может быть полезным

Это немного криво.
jimon, я ничего не понял :( к сожалению, я не особо шарю в математике, и даже хз, что такое сферическая координата :(

jimon 11.01.2009 18:29

Ответ: Текстурные координаты в примитивах
 
http://ru.wikipedia.org/wiki/Сфериче...тема_координат

я сферу создавал так :
Код:

case PMT_SPHERE:
        {
                s32 Detail = 50;
                f32 R = 1;

                s32 VtSize = Detail * Detail;

                video::jeVertex_T2F_C4F_N3F_V3F * Vt = NULL;
                JENEW_A(Vt,video::jeVertex_T2F_C4F_N3F_V3F,VtSize)

                for(s32 V = 0; V < Detail; V++)
                {
                        for(s32 U = 0; U < Detail; U++)
                        {
                                f32 Th = ((f32)V / (f32)(Detail-1)) * jePi;
                                f32 Ph = ((f32)U / (f32)(Detail-1)) * jePi * 2;

                                f32 STh,CTh,SPh,CPh;

                                jeSinCos(Th,STh,CTh);
                                jeSinCos(Ph,SPh,CPh);

                                s32 i = V*Detail + U;

                                Vt[i].Position.SetXYZ(R*STh*CPh,R*CTh,R*STh*SPh);
                                Vt[i].Color.SetColor(1,1,1,1);
                                Vt[i].u = ((f32)V / (f32)(Detail-1));
                                Vt[i].v = ((f32)U / (f32)(Detail-1));
                        }
                }

                s32 ItSize = (Detail-1)*(Detail-1)*6;

                u32 * It;
                JENEW_A(It,u32,ItSize)

                s32 i = 0;
                for(s32 V = 0; V < Detail-1; V++)
                {
                        for(s32 U = 0; U < Detail-1; U++)
                        {
                                It[i++]  = V*Detail + (U+1);
                                It[i++]  = (V+1)*Detail + (U+1);
                                It[i++]  = V*Detail + U;

                                It[i++]  = (V+1)*Detail + (U+1);
                                It[i++]  = (V+1)*Detail + U;
                                It[i++]  = V*Detail + U;
                        }
                }

                video::jeMaterial * Material;
                JENEW(Material,video::jeMaterial)

                CSurface * Surface;
                JENEW(Surface,CSurface)
                Surface->SetSurface(CurrentRender,Material,EnableRenderOptimization);
                Surface->CreateRenderOperations(video::VT_T2F_C4F_N3F_V3F,VtSize,Vt,video::IT_U32,ItSize,It);

                JEDELETE_A(Vt)
                JEDELETE_A(It)

                CMesh * Mesh;
                JENEW(Mesh,CMesh(CurrentRender))

                Mesh->AddSurface(Surface);
                Surface->Drop();

                return Mesh;

        }


-=Jack=- 12.01.2009 23:44

Ответ: Текстурные координаты в примитивах
 
спс, попробую разобратся.


Часовой пояс GMT +4, время: 07:23.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot