OpenGL Controlling the degree of the specular, diffuse, ambient

This topic is 3587 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

Recommended Posts

Hello, I've written a basic model loader and viewer for anim8or files. I'm now trying to get more control over the amounts that the specular, diffuse and ambient variables are used. For example: turning down the amount of specular shine on something so it doesn't look so plastic. Anim8or has this support, but I can't find it in OpenGL. How can I do this? Similarly, when modulating textures, is there a way to control how much of the colour shows through? I want the specular effects of lighting and some control over the colour, but at the moment the model is far too dark, far too affected by the diffuse component. How do I do these?

Share on other sites
Well, there is no built in lighting support in OpenGL beyond basic per-vertex lighting (which looks not-so-good by today's standards). If you want per-pixel lighting with support for things like normal mapping, you'll have to either code it yourself or get some form of library which does it for you.

However, you can change the specular, diffuse and ambient intensities for the built-in per-vertex lighting with the function glLightfv().
Detailed explanation of glLightfv().

float specular[4]={1.0f, 0.0f, 0.0f, 0.0f};float diffuse[4]={0.0f, 1.0f, 0.0f, 0.0f};float ambient[4]={0.2f, 0.2f, 0.2f, 0.2f};glLightfv(GL_LIGHT0, GL_SPECULAR, specular);glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);

Share on other sites
Not sure I explained what I meant properly. I'm not looking for bump maps or anything of the like, just more control over how brightly it shows the 'shine' of specular, or the diffuse. Those glLightfv(GL_LIGHT0, GL_SPECULAR, specular); commands will control the colour of the specular light, not the amount of specular it shows in the material, in comparison to the ambient, diffuse components.

The other problem was when modulating (combining textures with the colours of the material they project onto): is there a way to control how much of each component is visible in the final render. For example: a check on a red surface, can I make it so the surface is 95% check with only a hint of red, of vice-versa.

Share on other sites
The glMaterialf function is where you want to look.

Regards
elFarto

Share on other sites
Quote:
 Original post by elFartoThe glMaterialf function is where you want to look.RegardselFarto

I don't see how that will help. As I said, I don't want to change the colour of the lights or anything like that, I want to change how much weight is given to each parameter in the lighting equation for each material. Shininess isn't what I'm looking for either: that controls both the brightness and the area that a specular shine covers.

Share on other sites
Are you using shaders? If so do the math there. If not move to shaders.

Share on other sites
elfarto's suggestion is a good one for basic starters (that the author of anima8or likely started with, if I force myself to make a guess, and probably still uses that stuff as a basis?!).

Hopefully, you may see how it could help if you look at the "Define the material properties of the objects being illuminated" part of this old thing:

http://fly.cc.fer.hr/~unreal/theredbook/chapter06.html

...it may give you ideas...

As an Aside: I recall having to use an opengl extension to apply specular highlights to materials with textures...'twas many moons ago (So you may want to check if this feature has been promoted to core gl by now if you decide to use it).

1. 1
2. 2
3. 3
Rutin
19
4. 4
5. 5

• 10
• 14
• 30
• 13
• 11
• Forum Statistics

• Total Topics
631782
• Total Posts
3002332
×