JOGL 颜色设置

在 JOGL 中,可以用不同类型的颜色填充图形。着色只是增强了人物的外观和感觉。

JOGL 使用 GL2 接口的 glColor3f() 方法来指定颜色的类型。此方法遵循 RGB(红、绿、蓝)颜色模型。在此模型中,每种颜色都用 0 到 1 之间的值表示,其中 0 表示没有该颜色,1 表示该颜色的最大值。

注意 :需要将所有三种颜色的值作为 glColor3f() 方法的参数传递。

JOGL 颜色代码列表

以下是一些常用颜色的代码列表:

颜色 绿
红色 1 0 0
绿色 0 1 0
蓝色 1 1 0
黄色 1 1 0
橙色 1 0.5 0
紫色 1 0 1
青色 0 1 1

JOGL 单色示例

这是一个简单的例子,三角形只用一种(绿色)颜色填充。

package com.yiidian;

import javax.media.opengl.*;
import javax.media.opengl.awt.GLCanvas;
import javax.swing.*;

public class JColor implements GLEventListener {

    @Override
    public void init(GLAutoDrawable arg0) {

    }

    @Override
    public void display(GLAutoDrawable drawable) {

        final GL2 gl = drawable.getGL().getGL2();

        gl.glBegin(GL2.GL_TRIANGLES);
        //Green Color
        gl.glColor3f(0.0f, 1.0f, 0.0f);
        gl.glVertex2d(0, 0.5);
        gl.glVertex2d(-0.5, -0.5);
        gl.glVertex2d(0.5, -0.5);

        gl.glEnd();
    }

    @Override
    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {

    }

    @Override
    public void dispose(GLAutoDrawable arg0) {

    }

    public static void main(String[] args) {

        final GLProfile gp = GLProfile.get(GLProfile.GL2);
        GLCapabilities cap = new GLCapabilities(gp);

        final GLCanvas gc = new GLCanvas(cap);
        JColor jc = new JColor();
        gc.addGLEventListener(jc);
        gc.setSize(400, 400);

        final JFrame frame = new JFrame("yiidian.com:JOGL Coloring");
        frame.add(gc);
        frame.setSize(500, 400);
        frame.setVisible(true);
    }
}  

输出结果如下:

JOGL 混合着色 示例

在这个例子中,一个三角形用三种不同的颜色填充。

package com.yiidian;

import javax.media.opengl.*;
import javax.media.opengl.awt.GLCanvas;
import javax.swing.*;

public class JMColor implements GLEventListener {

    @Override
    public void init(GLAutoDrawable arg0) {

    }

    @Override
    public void display(GLAutoDrawable drawable) {

        final GL2 gl = drawable.getGL().getGL2();


        gl.glBegin(GL2.GL_TRIANGLES);
        //Yellow Color
        gl.glColor3f(1.0f, 1.0f, 0f);
        gl.glVertex2d(0, 0.5);
        //Red Color
        gl.glColor3f(1f, 0f, 0f);
        gl.glVertex2d(-0.5, -0.5);
        //Blue Color
        gl.glColor3f(0f, 0f, 1f);
        gl.glVertex2d(0.5, -0.5);

        gl.glEnd();
    }

    @Override
    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {

    }

    @Override
    public void dispose(GLAutoDrawable arg0) {

    }

    public static void main(String[] args) {

        final GLProfile gp = GLProfile.get(GLProfile.GL2);
        GLCapabilities cap = new GLCapabilities(gp);

        final GLCanvas gc = new GLCanvas(cap);
        JMColor jc = new JMColor();
        gc.addGLEventListener(jc);
        gc.setSize(400, 400);

        final JFrame frame = new JFrame("yiidian.com:JOGL Mixed Coloring");
        frame.add(gc);
        frame.setSize(500, 400);
        frame.setVisible(true);
    }
}  

输出结果如下:

热门文章

优秀文章