我在 SharpGL 中遇到了照明问题 - 我尝试了所有方法,结果仍然是灰色物体。我究竟做错了什么?我怎样才能让它工作?我想要一些阴影效果,随便什么。
这是我的代码:
private void Draw(OpenGL _openGl, float _rotateX, float _rotateY, float _rotateZ)
{
_openGl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
_openGl.Enable(OpenGL.GL_DEPTH_TEST);
_openGl.LoadIdentity();
_openGl.Translate(0f, 0.0f, -15.0f);
_openGl.Rotate(_rotateX, _rotateY, _rotateZ);
_openGl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_POSITION, new [] {-50f, -50f, -50f, 1f});
_openGl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_AMBIENT, new [] {0, 0, 0, 1});
_openGl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_DIFFUSE, new [] {1, 1, 1, 1});
_openGl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPECULAR, new [] {1, 1, 1, 1});
_openGl.LightModel(OpenGL.GL_LIGHT_MODEL_AMBIENT, new [] { 0.15F, 0.15F, 0.15F, 0 });
_openGl.Enable(OpenGL.GL_LIGHTING);
_openGl.Enable(OpenGL.GL_LIGHT1);
_openGl.Enable(OpenGL.GL_COLOR_MATERIAL);
_openGl.Enable(OpenGL.GL_NORMALIZE);
_openGl.LightModel(OpenGL.GL_LIGHT_MODEL_TWO_SIDE, 1);
_openGl.Enable(OpenGL.GL_LIGHT_MODEL_TWO_SIDE);
_openGl.ColorMaterial(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_SPECULAR);
_openGl.Material(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_SPECULAR, new[] { 1, 1, 1, 1 });
_openGl.Material(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_EMISSION, new[] { 0, 0, 0, 1 });
_openGl.ShadeModel(OpenGL.GL_SMOOTH);
_openGl.Begin(OpenGL.GL_TRIANGLES);
if (!string.IsNullOrEmpty(sceneFilePath_))
LoadSceneFromFile(_openGl);
_openGl.End();
_openGl.Flush();
}
public void LoadSceneFromFile(OpenGL _openGl)
{
// Parsing from file...
for (var i = 0; i < trianglesNumber; i++)
{
var part = trianglesParts[i];
//_openGl.Color(partsParameters[part, 0], partsParameters[part, 1], partsParameters[part, 2]);
_openGl.Material(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_SPECULAR, new [] {partsParameters[part, 0], partsParameters[part, 1], partsParameters[part, 2]});
_openGl.Material(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_SHININESS, 500);
_openGl.Normal(0, 1, 0);
for (var j = 0; j < 3; j++)
{
_openGl.Normal(Math.Pow(vertices[trianglesVertices[i, j], 0], 2),
Math.Pow(vertices[trianglesVertices[i, j], 1], 2),
Math.Pow(vertices[trianglesVertices[i, j], 2], 2));
_openGl.Vertex(vertices[trianglesVertices[i, j], 0], vertices[trianglesVertices[i, j], 1], vertices[trianglesVertices[i, j], 2]);
}
}
}