`
lanhuidong
  • 浏览: 228203 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

OpenGL学习3

 
阅读更多

颜色和旋转

1.平滑着色

glColorPointer (int size, int type, int stride, Buffer pointer)

给每个点定义颜色值,各点之间平滑着色

需要gl.glEnableClientState(GL10.GL_COLOR_ARRAY);启动该功能,使用完需要gl.glDisableClientState(GL10.GL_COLOR_ARRAY);关闭平滑着色功能

 

2.单调着色

glColor4f (float red, float green, float blue, float alpha) 参数值在0.0-1.0之间

glColor4x (int red, int green, int blue, int alpha) int的高16位代表整数,低16为代表小数,因此,(0x10000,0,0,0x10000)表示红色不透明

 

3.旋转

 glRotatex (int angle, int x, int y, int z)

第一个参数表示旋转的角度,(x,y,z)和(0,0,0)组成的直线代表旋转的轴

4.demo

package com.lanhuidong.opengl;

import java.nio.FloatBuffer;
import java.nio.IntBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.opengl.GLSurfaceView.Renderer;

import com.lanhuidong.opengl.util.BufferToNativeOrder;

/**
 * @author lan
 * @since 2011-6-27
 * @version
 */
public class OpenGLRender implements Renderer {

    private static int x = 0x10000 / 4;
    private static float f = 0.5f;
    private static float[] array = new float[] { -f, 0, 0, 0, (float) (f * Math.sqrt(3) / 2), 0, f, 0, 0 };
    private static int[] array2 = new int[] { x, x, 0, x, -x, 0, -x, x, 0, -x, -x, 0 };
    private static int[] array3 = new int[] { x, x, 0, -x, x, 0, -2 * x, 0, 0, -x, -x, 0, x, -x, 0, 2 * x, 0, 0 };
    private static float[] colorarray = new float[] { 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1 };
    private static float rotateTri = 0f;
    private static int rotateQuad = 0x10000;

    /**
     * 调用此方法绘制当前窗口
     */
    @Override
    public void onDrawFrame(GL10 gl) {
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        gl.glLoadIdentity();
        gl.glTranslatef(-0.5f, 0.5f, -1.0f);
        // 画三角行
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
        FloatBuffer triangleBuffer = BufferToNativeOrder.getNativeOrderFloatBuffer(array);
        gl.glRotatef(rotateTri, 0f, 1f, 0f);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleBuffer);
        gl.glColorPointer(4, GL10.GL_FIXED, 0, BufferToNativeOrder.getNativeOrderFloatBuffer(colorarray));
        gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
        rotateTri += 0.5;
        gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

        gl.glLoadIdentity();
        gl.glTranslatef(0.5f, 0.5f, -1.0f);
        // 画矩形
        IntBuffer quadrangleBuffer = BufferToNativeOrder.getNativeOrderIntBuffer(array2);
        gl.glVertexPointer(3, GL10.GL_FIXED, 0, quadrangleBuffer);
        gl.glColor4f(1f, 0f, 0f, 1f);
        gl.glRotatex(rotateQuad, 1, 0, 0);
        rotateQuad -= 0x10000;
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

        gl.glLoadIdentity();
        gl.glTranslatef(-0.5f, -0.5f, -1.0f);
        // 画矩形
        gl.glVertexPointer(3, GL10.GL_FIXED, 0, BufferToNativeOrder.getNativeOrderIntBuffer(array3));
        gl.glColor4x(0x10000, 0, 0x10000, 0x10000);
        gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 6);

        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    }

    /**
     * 窗口被创建或者窗口大小改变时被调用
     */
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        gl.glViewport(0, 0, width, height);

        float ratio = (float) width / height;
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
    }

    /**
     * 窗口被创建或者被重新创建时调用,做初始化工作
     */
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        gl.glClearColor(0, 0, 1.0f, 0.5f);
    }

}

 

5.效果



 

 

 

  • 大小: 13.2 KB
分享到:
评论

相关推荐

    OPENGL学习 3D小雪人

    这个“OPENGL学习 3D小雪人”资源是为初学者设计的,旨在帮助他们理解并掌握OpenGL的基础知识,通过创建一个3D小雪人的实例来实践。 3D小雪人的实现涉及多个OpenGL的关键概念和技术: 1. **窗口系统绑定**:在...

    openGL学习

    ### OpenGL学习知识点详解 #### 一、OpenGl简介与预备知识 **1.1 引言** 本教程旨在为读者提供一个系统性学习OpenGl的平台。OpenGl是一种跨语言、跨平台的应用程序接口(API),用于渲染二维、三维矢量图形。它是...

    Qt Opengl学习绝好资料

    标题“Qt Opengl学习绝好资料”说明这是一份优秀的学习资源,它旨在指导读者如何在Qt环境中使用OpenGL进行图形绘制。标题中提到的“学习”和“资料”暗示了本资源的教育性质,它更侧重于入门和基础知识的传递。描述...

    OpenGL 学习资料大全

    收集到的OpenGL学习资料,内容包括: 1.OpenGL着色语言.rar 2.NEHE教程.pdf 3.openglapi.CHM 4.opengl编程与实例.pdf 5.openGL图像系统详解(英).pdf 6.vc下OpenGL开发框架与应用.pdf 7.北大 openGL 课程.pdf

    opengl 学习 网站

    1. **OpenGL官方文档** (opengl.org/developers/documentation):这是所有OpenGL学习者的基础起点。官方网站提供了完整的OpenGL规范、参考手册和API文档,详细介绍了各个函数、枚举和常量的作用。同时,这里也有...

    OpenGL.rar_OpenGL pdf_OpenGL 参考手册_opengl_opengl 参考_中英文

    这个“OpenGL.rar”压缩包包含了OpenGL的参考手册,提供了对OpenGL API的详细解释,对于学习和开发使用OpenGL的应用程序至关重要。 OpenGL参考手册通常分为多个部分,包括核心规范、扩展规格、以及编程指南等。手册...

    opengl类学习文件

    在这个"opengl类学习文件"中,包含了多个关键元素,可以帮助你深入理解并掌握OpenGL编程。 首先,"gltools"可能是一个包含GLUT(OpenGL Utility Toolkit)和其他辅助工具的库,它为OpenGL程序员提供了基本的窗口...

    OpenGL入门教程(快速学习OPENGL)

    1. 与 C 语言紧密结合:OpenGL 命令最初就是用 C 语言函数来进行描述的,对于学习过 C 语言的人来讲,OpenGL 是容易理解和学习的。 2. 强大的可移植性:OpenGL 不仅用于 Windows,还可以用于 Unix/Linux 等其它系统...

    OpenGL编程入门学习

    3. **OpenGL的优势**:OpenGL是一个工业标准,随着技术的发展,其技术更新迅速,且在游戏如DOOM3和QUAKE4等中得到广泛应用,展示了其在3D图形处理的强大实力。 4. **Windows下的OpenGL编程环境搭建**:推荐使用...

    OpenGL ES学习资料

    它提供了两个版本,OpenGL ES 1.x系列更侧重于固定功能管线,而OpenGL ES 2.x和3.x系列引入了可编程管线的概念,使开发者能够更好地控制渲染管线和优化性能。在iOS平台上,随着iOS系统的升级,所支持的OpenGL ES版本...

    OpenGL学习必备,红宝书及蓝宝书

    "红宝书"通常指的是"OpenGL编程指南",而"蓝宝书"则是"OpenGL超级宝典",这两本书是OpenGL学习者的重要参考资料。 红宝书,全名《OpenGL编程指南》(The OpenGL Programming Guide),由OpenGL Architecture Review...

    android OpenGL学习笔记(一)

    在本篇“Android OpenGL 学习笔记(一)”中,我们将探讨如何在Android平台上使用OpenGL ES进行图形渲染。OpenGL ES是OpenGL的一个轻量级版本,专为嵌入式系统设计,包括移动设备如智能手机和平板电脑。这篇笔记将...

    QT OPENGL学习

    QT OpenGL学习是一个面向初学者和有一定基础的开发者的学习资源,主要关注如何在QT4框架下有效地使用OpenGL进行图形渲染和交互。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D、3D矢量图形,而QT则是一个强大的...

    OpenGL学习资料文档.rar

    本资源集合包含了一套完整的OpenGL学习资料,适合初学者入门。 首先,"OpenGL编程指南第七版"是学习OpenGL的基础书籍,它深入浅出地介绍了OpenGL的工作原理和基本概念,包括上下文创建、窗口系统集成、绘图函数、...

    OpenGL学习资料

    OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、...

    opengl 入门学习资料整理

    OpenGL 入门学习资料整理 OpenGL 作为当前主流的图形 API 之一,它在一些场合具有比 DirectX 更优越的特性。本文主要介绍了入门的基础知识。 一、OpenGL 的优点 1. 与 C 语言紧密结合 OpenGL 命令最初就是用 C ...

    OpenGL经典学习书籍

    其次,《OpenGL编程指南》第七版,也被称为“红宝书”,是OpenGL学习的经典之作。这本书全面介绍了OpenGL 4.x版本,包括新的核心模式、固定功能管道的移除、向量和矩阵运算、着色语言GLSL、纹理、帧缓冲对象、几何...

    openGL 学习手册

    openGL 学习手册 自己从网上总结的 希望对大家有用

    OpenGL学习内容以及参考书籍和网站-2008.

    ### OpenGL学习内容以及参考书籍和网站-2008 #### 一、OpenGL背景与历史 OpenGL(Open Graphics Library)是一种跨平台的应用程序接口(API),用于渲染2D和3D矢量图形。它最初由Silicon Graphics Inc. (SGI) 开发...

    OpenGL 3D游戏编程

    每一个都是在前一个的基础上进行开发 OpenGL学习3D游戏编程,OpenGl游戏框架、基本图形、组合图形、显示文字、显示3D模型、MDL、MD2动画模型、射击爆炸、碰撞检测、游戏进度保存、摄影漫游

Global site tag (gtag.js) - Google Analytics