11. juni 2005 - 12:57
Der er
2 kommentarer og
1 løsning
3d .c fil -static int cylinder01_indicesArray -Hvad vises?
egentlig bør titlen være:
"3d .c fil -static int cylinder01_indices[] -Hvad vises?"
Men E accepterer ikke [] -nå..
Jeg søger oplysninger på hvad det er strukturen
"_indices[]" egentlig indeholder
Her er et snip:
static int myObj_indices[] = {
0, 2, 1,
0, 3, 2,
4, 6, 5,
4, 7, 6,
8, 10, 9,.......
}
.c 3d formatet indeholder desuden de 2 struktuer
_coords[]
_texcoords[]
og
_normals[]
De strukts. er jeg 100% klar over
Problemet ligger i hvordan "_indices[]" spiller -sammen- med _coords[] og _normals[] ..
(hvis der da er en sammenhæng..)
pft.
Jeg går ud fra du ved lidt om 3D-geometri, siden du arbejder med ovenstående, men hvis du er i tvivl om noget i mit svar, skal bu bare spørge...
I 3D-grafik programmering bruger man ofte indekserede vertices (koordinater) til at beskrive sine primitives. Det giver nemlig ofte bedre performance.
Forestil dig at du skal rendere en simpel firkant og du anvender trekanter som primitiver (det gør stort set alle idag) samt at din 3D-engine anvender counter-clockwise culling (ex DirectX).
Det kræver altså 2 trekanter at lave én firkant.
Om understående skitse vil blive formateret rigtig ved jeg ikke, men ellers se bort fra den... (det skulle forestille en firkant sammensat of 2 trekanter)
____
| /|
| / |
| / |
|/___|
Vertices kunne se sådan ud:
0: (-1, -1, 0)
1: (-1, 1, 0)
2: (1, 1, 0)
3: (1, -1, 0)
4: (-1, -1, 0)
5: (1, 1, 0)
Samme firkant kunne imidlertid laves med:
0: (-1, -1, 0)
1: (-1, 1, 0)
2: (1, 1, 0)
3: (1, -1, 0)
og indices:
0: 0
1: 1
2: 2
3: 3
4: 0
5: 2
Fordelen er altså at man angiver hvilke punkter der indgår i en trekant. 0-2 er første trekant, 4-5 er den anden trekant.
Det vil naturligvis kun være en fordel hvis flere trekanter deler samme koordinater, det er dog ofte tilfældet!
Det virker måske som om det kræver mere hukommelse, men det er netop ikke tilfældet hvis en del trekanter deler samme koordinater. Husk på at hver vertex (koordinat) typisk bruger 3 floats, mens et index "kun" bruger én heltalsværdi.
Altså, efter min mening er _indices arrayet du ser i koden, netop beregnet til overstående formål.