# OpenGL Controlling the degree of the specular, diffuse, ambient

## 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).

## Create an account

Register a new account

• ### Forum Statistics

• Total Topics
627702
• Total Posts
2978712
• ### Similar Content

• A friend of mine and I are making a 2D game engine as a learning experience and to hopefully build upon the experience in the long run.

-What I'm using:
C++;. Since im learning this language while in college and its one of the popular language to make games with why not.     Visual Studios; Im using a windows so yea.     SDL or GLFW; was thinking about SDL since i do some research on it where it is catching my interest but i hear SDL is a huge package compared to GLFW, so i may do GLFW to start with as learning since i may get overwhelmed with SDL.
-Questions
Knowing what we want in the engine what should our main focus be in terms of learning. File managements, with headers, functions ect. How can i properly manage files with out confusing myself and my friend when sharing code. Alternative to Visual studios: My friend has a mac and cant properly use Vis studios, is there another alternative to it?

• Both functions are available since 3.0, and I'm currently using glMapBuffer(), which works fine.
But, I was wondering if anyone has experienced advantage in using glMapBufferRange(), which allows to specify the range of the mapped buffer. Could this be only a safety measure or does it improve performance?
Note: I'm not asking about glBufferSubData()/glBufferData. Those two are irrelevant in this case.
• By xhcao
Before using void glBindImageTexture(    GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format), does need to make sure that texture is completeness.
• By cebugdev
hi guys,
are there any books, link online or any other resources that discusses on how to build special effects such as magic, lightning, etc. in OpenGL? i mean, yeah most of them are using particles but im looking for resources specifically on how to manipulate the particles to look like an effect that can be use for games,. i did fire particle before, and I want to learn how to do the other 'magic' as well.
Like are there one book or link(cant find in google) that atleast featured how to make different particle effects in OpenGL (or DirectX)? If there is no one stop shop for it, maybe ill just look for some tips on how to make a particle engine that is flexible enough to enable me to design different effects/magic
let me know if you guys have recommendations.
• By dud3
How do we rotate the camera around x axis 360 degrees, without having the strange effect as in my video below?
Mine behaves exactly the same way spherical coordinates would, I'm using euler angles.
Tried googling, but couldn't find a proper answer, guessing I don't know what exactly to google for, googled 'rotate 360 around x axis', got no proper answers.

References:
Code: https://pastebin.com/Hcshj3FQ
The video shows the difference between blender and my rotation:

• 21
• 14
• 12
• 10
• 12