如何用Glut / opengl制作不同颜色的抛物线内外部分?

时间:2015-10-03 13:41:35

标签: c++ opengl glut freeglut

问题:

在由3个点定义的平面上有抛物线。在这里你可以看到它的样子。 (这是我到目前为止所做的......):Gif about the process

所以我想在抛物线的内部填充一种颜色,并在外部填充不同的颜色。 从3点我计算出抛物线方程。

2 个答案:

答案 0 :(得分:1)

您可以绘制全屏四核。

将3个点(或方程式)传递到片段着色器中,检查片段是否在抛物线上方/下方,并用所需的颜色填充。

//Assuming (0,0) is in the middle of the screen:
in vec2 fragmentPosition; //from -1 to 1
uniform vec3 parabola;

void main(void) {

    // a*x^2+b*x+c = 0
    float a = parabola.x;
    float b = parabola.y;
    float c = parabola.z;

    float x = fragmentPosition.x;
    float y = fragmentPosition.y;

    if (a*x*x + b*x + c > y) {
        gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
    } else {
        gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);
    }
}

如果要在点后面绘制它,请使用z值。

答案 1 :(得分:0)

如果你不想使用着色器,那么你必须对你的屏幕进行细分:取其矩形,将它吐成薄的垂直四边形(从下到上),吐出这些i,2以便它们的极限是你曲线的一部分。用颜色绘制底部的颜色,用另一种颜色绘制顶部颜色。非常类似于数字整合的数字。