简体   繁体   English

SharpGL.WPF gl.Color不起作用

[英]SharpGL.WPF gl.Color not working

I am using SharpGL.WPF for displaying graphs of several mathematical equations. 我正在使用SharpGL.WPF来显示几个数学方程式的图形。 However, the gl.Color() is not working for me. 但是,gl.Color()对我不起作用。

Here is my draw method which I call in the OpenGLDraw event: 这是我在OpenGLDraw事件中调用的draw方法:

    private void DrawLinearFunction(OpenGL gl)
    {
        /*
         * f(x) = x + 2;
         * Let x be 4, then y = 6 (4, 6)
         * Let x be -5, then y = -3 (-5, -3)
         * */

        gl.PointSize(1.0f);
        gl.Begin(OpenGL.GL_POINTS);
        gl.Color(255, 0, 0); // <---- this doesn't work
        for (float x = -(GRAPH_LIMIT - 5); x <= (GRAPH_LIMIT - 5); x+=LINE_SMOOTHNESS)
        {
            gl.Vertex(x, x + 2);
        }
        gl.End();
    }

And here is my initialization code: 这是我的初始化代码:

    private void OpenGLControl_OpenGLInitialized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
    {
        OpenGL glInstance = args.OpenGL;

        glInstance.Enable(OpenGL.GL_DEPTH_TEST);
        //glInstance.Enable(OpenGL.GL_COLOR_MATERIAL);

        float[] global_ambient = new float[] { 0.5f, 0.5f, 0.5f, 1.0f };
        float[] light0pos = new float[] { 0.0f, 5.0f, 10.0f, 1.0f };
        float[] light0ambient = new float[] { 0.2f, 0.2f, 0.2f, 1.0f };
        float[] light0diffuse = new float[] { 0.3f, 0.3f, 0.3f, 1.0f };
        float[] light0specular = new float[] { 0.8f, 0.8f, 0.8f, 1.0f };

        float[] lmodel_ambient = new float[] { 0.2f, 0.2f, 0.2f, 1.0f };
        glInstance.LightModel(OpenGL.GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);

        glInstance.LightModel(OpenGL.GL_LIGHT_MODEL_AMBIENT, global_ambient);
        glInstance.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, light0pos);
        glInstance.Light(OpenGL.GL_LIGHT0, OpenGL.GL_AMBIENT, light0ambient);
        glInstance.Light(OpenGL.GL_LIGHT0, OpenGL.GL_DIFFUSE, light0diffuse);
        glInstance.Light(OpenGL.GL_LIGHT0, OpenGL.GL_SPECULAR, light0specular);
        glInstance.Enable(OpenGL.GL_LIGHTING);
        glInstance.Enable(OpenGL.GL_LIGHT0);

        glInstance.ShadeModel(OpenGL.GL_SMOOTH);
    }

You have GL_LIGHTING enabled, and GL_COLOR_MATERIAL disabled. 您已启用GL_LIGHTING ,并且已禁用GL_COLOR_MATERIAL In this combination, glColor calls have no effect. 在这种组合中, glColor调用无效。

在此处输入图片说明

See https://www.khronos.org/opengl/wiki/How_lighting_works 参见https://www.khronos.org/opengl/wiki/How_lighting_works

As I was experimenting on this, when I do 当我对此进行实验时,

gl.Color(1, 1, 1);

SharpGL reads it as bytes and not integers. SharpGL将其读取为字节而不是整数。 So I tried putting in float or double like this and it works just fine: 所以我试着像这样放入float或double,效果很好:

gl.Color(1.0f, 1.0f, 1.0f);
// or gl.Color(1.0, 1.0, 1.0);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM