Subject:
|
Re: Why LDraw.org doesn't use ldconfig.ldr ???
|
Newsgroups:
|
lugnet.cad
|
Date:
|
Thu, 4 Oct 2007 22:23:11 GMT
|
Viewed:
|
8116 times
|
| |
| |
In lugnet.cad, Travis Cobbs wrote:
|
In lugnet.cad, Don Heyse wrote:
|
Id leave your setup alone since it seems to work well with the
current color list. Youre right about ldglite. I didnt like dark
shadows, or maybe I run my monitor too dark to avoid migraines, but
the lighting settings do add up to more than 1.0. To get something I
liked with my equipment, I cranked the ambient up to 0.75 and set the
diffuse light at 0.5. Does the distance to the diffuse light have
any effect? Mine is pretty far back behind the camera.
|
The distance would matter, except that youre using a directional light.
Since the w component of your light position is 0.0, its a directional
light. As such, -1,1,1 is the same as the -1000,1000,1000 that you have.
(Hows that for intuitive? Set the w coord of the light position to 0 and
its directional; set it to non-zero and its a point light. It took me
forever to track this down in the documentation when trying to get light.dat
point lights to work.)
|
I think knew that at one point based on the comment about dist divisor.
And I suspect I didnt reduce it to -1,1,1 so I could easily switch
to a point light source at that location. (yeah, thats it... ;^)
|
|
The ldglite ambient and diffuse lights could be set to your regular
settings with following command line settings:
-lc-1000,1000,1000,1,1,1 -lC0.2,0.2,0.2
Maybe using a different location than (-1000,1000,1000)?
|
My default light position is 0,0,1. Note that for directional lights, this
is treated as a direction, not a position, although the documentation seems
ambiguous about the whole issue. (It may be the inverse of the direction,
but its definitely a direction.)
|
It seems like the direction toward the light source. Maybe so you can
convert a directional light to a point light by changing only the w?
Works for me...
|
Id suggest you update your comments to reflect the fact that its a
directional light. Id then change the default to -1,1,1 instead of
-1000,1000,1000, since those produce the same result. You might even mention
that the 0 in the w coordinate of the light vector is what triggers the
directional light behavior.
|
Probably should fix the comments. But first I gotta find out where
I got the idea that w coord was a distance divisor. Probably mixed
it up with some older graphics API...
|
|
// Set the light way up and behind us. Will this make it too dim?
// NOTE: The LDRAW polys are not CCW compliant so the normals are random
// LdLite uses 2 opposing lights to avoid the problem with normals?
// I attempted this below but it does not seem to work for OpenGL.
// Hmmm, perhaps LdLite just took the fabs() of normals instead.
// If I calculate normals then I could do that too.
// x, y, z, dist divisor. (divisor = 0 for light at infinite distance)
GLfloat lightposition0[] = { -1000.0, 1000.0, 1000.0, 0.0 };
GLfloat lightcolor0[] = { 0.5, 0.5, 0.5, 1.0 }; // Half light
GLfloat lightcolor1[] = { 0.75, 0.75, 0.75, 1.0 }; // bright light
glEnable(GL_LIGHTING);
// Medium diffuse light for some minor shadow effects
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_POSITION, lightposition0);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightcolor0);
// Bright ambient light for the whole scene.
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lightcolor1);
// 2 sided lighting because I'm too lazy to use BFC.
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
// OpenGL's color material feature provides a less expensive way to change
// material parameters. With color material enabled, material colors track
// the current color. This means that instead of using the relatively
// expensive glMaterialfv routine, you can use the glColor3f routine.
//
// Ambient and diffusion properties for front and back faces.
// Full ambient and diffusion for R, G, B, alpha ???
GLfloat full_mat[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat half_mat[] = { 0.5, 0.5, 0.5, 1.0 };
GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat no_shininess[] = { 1.0 };
GLfloat lo_shininess[] = { 5.0 };
GLfloat mid_shininess[] = { 15.0 }; // Seems nice for plastic chrome and gold.
GLfloat hi_shininess[] = { 50.0 }; // { 100.0 };
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, full_mat);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, no_mat);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, no_shininess);
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, no_mat);
|
|
|
I think that your glMaterialfv call with GL_AMBIENT_AND_DIFFUSE is
redundant, since the glColorMaterial call overrides anything you set. (Note
that I do something similar in LDView, and havent yet gotten around to
verifying that it can be removed.) Im also pretty sure that your first
glColorMaterial call is clobbered by your second one, so is also redundant.
|
Yes, Its a bit of a mess there because I wanted examples of everything
in one place so I could cut and paste when I experimented with
the shininess for chrome and gold.
|
Im pretty sure that if you changed your ambient from .75 to .5, youd end up
with the same lighting that LDView has in subdued mode.
|
I tried that, but it still doesnt seem to match. Your colors look
a bit warmer to me for some reason. Am I Hallucinating? Its probably
just an optical illusion based on the different backgrounds of the pics,
but I cant seem to see through it.
Have fun,
Don
|
|
Message is in Reply To:
| | Re: Why LDraw.org doesn't use ldconfig.ldr ???
|
| (...) The distance would matter, except that you're using a directional light. Since the w component of your light position is 0.0, it's a directional light. As such, -1,1,1 is the same as the -1000,1000,1000 that you have. (How's that for (...) (17 years ago, 4-Oct-07, to lugnet.cad, FTX)
|
43 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|