praegune kellaaeg 20.06.2025 01:25:22
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
asjameez
Kreisi kasutaja

liitunud: 10.12.2006
|
27.07.2010 19:13:35
structi tegemine float arrayks lihtsal viisil? |
|
|
Tere.
Küsimus selline, et kas vec4 structi, mis koosneb floatidest, saab lihtsamal viisil ka teha float massiiviks? Praegune lahendus tundub mulle küll vähe pikk ja lombakas.
GLvoid Lighting::AddLight(vec4 Position, vec4 Ambient, vec4 Diffuse, vec4 Specular) {
GLfloat PositionV[4] = { Position.x, Position.y, Position.z, Position.w };
GLfloat AmbientV[4] = { Ambient.x, Ambient.y, Ambient.z, Ambient.w };
GLfloat DiffuseV[4] = { Diffuse.x, Diffuse.y, Diffuse.z, Diffuse.w };
GLfloat SpecularV[4] = { Specular.x, Specular.y, Specular.z, Specular.w };
if(LightList.size() < GL_MAX_LIGHTS) {
Light = GL_LIGHT0 + LightList.size();
glLightfv(Light, GL_POSITION, PositionV);
glLightfv(Light, GL_AMBIENT, AmbientV);
glLightfv(Light, GL_DIFFUSE, DiffuseV);
glLightfv(Light, GL_SPECULAR, SpecularV);
glEnable(Light);
}
} |
Miks üldse vaja teha structi float arrayks on see, et glLightfv ei söö vec4 structi.
|
|
Kommentaarid: 63 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
61 |
|
tagasi üles |
|
 |
troglodyte
Kreisi kasutaja

liitunud: 09.08.2002
|
27.07.2010 20:54:46
|
|
|
Milline on vec4 struktuuri definitsioon?
Põhimõtteliselt võiksid teha lihtsustava makro:
c:
|
#define VEC4_TO_ARRAY(v) { (v).x, (v).y, (v).z, (v).w } GLfloat PositionV[4] = VEC4_TO_ARRAY(Position);
|
Või veel lihtsamaks:
c:
|
#define VEC4_TO_GLFLOAT(n, v) GLFloat n [4] = VEC4_TO_ARRAY((v)) VEC4_TO_GLFLOAT(PositionV, Position);
|
_________________ ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
34 |
|
tagasi üles |
|
 |
asjameez
Kreisi kasutaja

liitunud: 10.12.2006
|
27.07.2010 22:16:45
|
|
|
troglodyte kirjutas: |
Milline on vec4 struktuuri definitsioon? |
struct vec4 {
float x, y, z, w;
vec4();
vec4(float, float, float, float);
}; |
|
|
Kommentaarid: 63 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
61 |
|
tagasi üles |
|
 |
troglodyte
Kreisi kasutaja

liitunud: 09.08.2002
|
27.07.2010 23:07:53
|
|
|
Sellisel juhul peaks
toimima.
_________________ ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
34 |
|
tagasi üles |
|
 |
asjameez
Kreisi kasutaja

liitunud: 10.12.2006
|
27.07.2010 23:37:23
|
|
|
troglodyte kirjutas: |
Sellisel juhul peaks
toimima. |
Midagi sellist ma lootsingi Suured tänud jällegi.
|
|
Kommentaarid: 63 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
61 |
|
tagasi üles |
|
 |
troglodyte
Kreisi kasutaja

liitunud: 09.08.2002
|
27.07.2010 23:44:27
|
|
|
float asemel loomulikult GLfloat siis.
Kindlasti uuri järgi miks ja kuidas see castimine toimib (tavaliselt, kindlasti leidub c++ kompilaatoreid kus see ei toimi).
_________________ ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
34 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
05.08.2010 10:19:01
|
|
|
On ka selline variant:
struct v4 {
union {
float v[4];
struct {
float x, y, z, w;
};
};
};
|
Mälu võtab täpselt 4 float'i jagu ning vastavalt vajadusele võid pöörduda selle poole, kui float'i massiiv (v4.v[i]) või üksikud elemendid (v4.x). Näiteks midagi sellist:
v4 col;
glcolor4f(col.x, col.y, col.z, col.w);
glcolor4fv(col.v); |
Kui tahad võid sinna lisada ka rgba:
struct v4 {
union {
float v[4];
struct {
float x, y, z, w;
};
struct {
float r, g, b, a;
};
};
};
|
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|