Criar um cubo Chrome em OpenGL / Glut?
Pergunta
Eu estou tentando fazer um cubo cromado em GLUT / OpenGL e eu não sei exatamente como fazê-lo.
Eu olhei para cima a "Tabela de Materiais" em um livro que mostrou "Chrome", como sendo: Ambiente: (0,25, 0,25, 0,25), difusa: (0,4, 0,4, 0,4), e especular:. (0.774597,0.774597,0.774597)
A minha pergunta é: como faço para criar um simples cubo e aplicar este material / textura a ele em Glut / OpenGL?
Do que eu uso "glutSolidCube ()"? Se sim, como faço para, em seguida, aplicar a textura cromo para ele?
Pode qualquer GLUT / OpenGL pessoas me aponte na direção certa?
Solução
Esta deve ser tão simples como chamar glMaterialfv()
antes glutSolidCube()
.
Eu não fiz OpenGL desde a escola, mas aqui está um código circuito de exibição de um projeto antigo que usou uma esfera que deverá fazê-lo no caminho certo:
_Ambient[CHROME][0] = 0.25f;
_Ambient[CHROME][1] = 0.25f;
_Ambient[CHROME][2] = 0.25f;
_Ambient[CHROME][3] = 1.0f;
_Diffuse[CHROME][0] = 0.4f;
_Diffuse[CHROME][1] = 0.4f;
_Diffuse[CHROME][2] = 0.4f;
_Diffuse[CHROME][3] = 1.0f;
_Specular[CHROME][0] = 0.774597f;
_Specular[CHROME][1] = 0.774597f;
_Specular[CHROME][2] = 0.774597f;
_Specular[CHROME][3] = 1.0f;
_Shininess[CHROME] = 76.8f;
void Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, _Ambient[CHROME]);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, _Diffuse[CHROME]);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, _Specular[CHROME]);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, _Shininess[CHROME]);
// Translations...
glutSolidSphere(_Radius, _Slices, _Stacks);
glPopMatrix();
glFlush();
glutSwapBuffers();
}
Outras dicas
Você olhou para mapeamento de ambiente? Você quer que seu objeto para refletir a luz de outros objetos no ambiente, para que, basicamente, aplicar uma textura que se parece com o meio ambiente e gerar textura coordenadas com base em normais. Isto vai dar a superfície uma aparência espelhada. Você pode ter OpenGL gerar automaticamente coordenadas de textura para cada vértice baseado com glTexGen
.
NeHe tutorial 23 cobre esta com mapeamento esfera. Você também pode gerar suas próprias coordenadas de textura por vértice ou por pixel usando GLSL. Aqui está um tutorial sobre isso.