WebHU - Programozási kérdések és válaszok

Egyedi értékű vektor tárolása a színválasztáshoz C++ és OpenGL használatával

Részt veszek egy projektben, ahol egy csőrendszer 3D-s megjelenítésének kiválasztási módszerét kezelem. a csövek kiválasztásához kutatásaim azt sugallják, hogy a színválasztás lenne a legjobb módszer (a csövek száma miatt a sugárválasztás nehezebb lehet).

//define color for pipe
int lowc=0;
int highc=9;
float cB = (rand()%(highc-lowc+1)+lowc)/10.0;
float cG = (rand()%(highc-lowc+1)+lowc)/10.0;
float cR = (rand()%(highc-lowc+1)+lowc)/10.0;
//some way of confirming the complete color combination is unique.

 // Create and insert new pipe in a new branch..
 Pipe* new_p = new Pipe(new_n1, new_n2, d, wf,cB,cG,cR);
 ElementList* new_branch = new ElementList();
 new_branch->branch->Append(new_n1);
 new_branch->branch->Append(new_p);
 new_branch->branch->Append(new_n2); 

Jelenleg azon vagyok, hogy megtaláljam a leghatékonyabb módszert annak ellenőrzésére, hogy a meghatározott szín már létezik-e. A jelenlegi 1000 színkombináció vektorának tárolása túl időigényesnek tűnik, mint ahogy az összes többi meglévő csomópont színértékére való hivatkozás is. Van-e jobb megoldás a meglévő színek vektorának tárolására (pl. ‹0,2, 0,6, 0,4>, ‹0,8, 0,1, 0,1> stb.) és összehasonlítani bármely más meglévő vektorral?


Válaszok:


1

Mondhatok egy példát egy tárgy háromszögeinek kiválasztására. Ezt a példát csőindexek megjelenítésére kell megváltoztatnia arcindexek helyett.

PickingModeBegin(); // see below

glBegin(GL_TRIANGLES);
for (FaceIndex fi = 0; fi < GetFacesSize(); fi++) {
    const Face & face = faces[fi];
    glColor3ub((fi >> 16) & 255, (fi >> 8) & 255, (fi & 255)); // color coded index
    glVertex3fv(vertices[face.a].GetPointer());
    glVertex3fv(vertices[face.b].GetPointer());
    glVertex3fv(vertices[face.c].GetPointer());
}
glEnd();

PickingModeEnd(); // see below

glReadBuffer(GL_BACK);                          
GLint viewportInfo[4];
glGetIntegerv(GL_VIEWPORT, viewportInfo);             

GLubyte pixel[3];
// read the color
glReadPixels(mousePosX, viewportInfo[3] - mousePosY, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);             

// extract face index
int selectedFaceIdx = (pixel[0] << 16) + (pixel[1] << 8) + pixel[2]; 



void PickingModeBegin(void) {
  glPushAttrib(GL_ENABLE_BIT | GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
  glCullFace(GL_BACK);
  glEnable(GL_CULL_FACE);


  // turn off everything
  glDisable(GL_BLEND);
  glDisable(GL_DITHER);
  glDisable(GL_FOG);
  glDisable(GL_LIGHTING);
  glDisable(GL_TEXTURE_1D);
  glDisable(GL_TEXTURE_2D);
  glDisable(GL_TEXTURE_3D);
  glShadeModel(GL_FLAT);
  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_LESS);

  glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

}

void PickingModeEnd(void) {
  glPopAttrib();
}
10.10.2013
  • Úgy tűnik, hogy a kódja jobban összpontosít az archoz már hozzárendelt szín megtalálására, mivel én még mindig ennek az arcnak/csőszínnek a létrehozására törekszem. Hacsak nem olvasok félre valahol. 10.10.2013
  • Itt az a koncepció, hogy egyes objektumok indexeit rendereljük (arcok, csövek ill.). Ez a renderelés soha nem jelenik meg, csak az egér pozíciójában olvasható. Adhat egy azonosító számot minden objektumnak (= az Ön esetében cső), és színkódolhatja az értéket. 11.10.2013
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..