Android - 使用 openGL ES 绘制 3D 然后 2D

2024-01-12

在 openGL ES 中绘制一些 3D 内容后,如何绘制 HUD(文本或位图)?

我试过这个:

private void switchTo2D(GL10 gl){  
  gl.glDisable(GL10.GL_DEPTH_TEST);  
  gl.glMatrixMode(GL10.GL_PROJECTION);  
  gl.glPushMatrix();  
  gl.glLoadIdentity();  

  gl.glMatrixMode( GL10.GL_PROJECTION );  
  gl.glLoadIdentity();  
  GLU.gluOrtho2D( gl, 0, getViewportWidth(), 0, getViewportHeight() );

  gl.glMatrixMode(GL10.GL_MODELVIEW);  
  gl.glLoadIdentity();  
}

有人知道如何在不破坏场景的情况下从透视切换到正交吗?


我找到了解决方案,但我忘了发布:) 抱歉

package at.bartinger.opengl;

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

import android.content.Context;
import android.opengl.GLSurfaceView;
import android.opengl.GLU;
import android.util.AttributeSet;

public class GLGameView extends GLSurfaceView implements GLSurfaceView.Renderer{


public GLGameView(Context context) {
    super(context);
    setRenderer(this);
}

public GLGameView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    init(gl);
}

@Override
public void onDrawFrame(GL10 gl) {

    //Standard
    gl.glClear( GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT );
    gl.glViewport( 0, 0, getWidth(), getHeight() );

    gl.glDisable( GL10.GL_DITHER );
    gl.glEnable( GL10.GL_DEPTH_TEST );
    gl.glEnable( GL10.GL_CULL_FACE );

    //Set 3D
    gl.glMatrixMode( GL10.GL_PROJECTION );
    gl.glLoadIdentity();
    gluPerspective( gl);    



    draw3D(gl);


    gl.glDisable( GL10.GL_CULL_FACE );
    gl.glDisable( GL10.GL_DEPTH_TEST );

    //Set 2D
    gl.glMatrixMode( GL10.GL_PROJECTION );
    gl.glLoadIdentity();
    gluOrtho2D(gl);
    gl.glMatrixMode( GL10.GL_MODELVIEW );
    gl.glLoadIdentity();


    draw2D(gl);

}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {

}

public void init(GL10 gl){}

public void draw2D(GL10 gl){};

public void draw3D(GL10 gl){};

/**
 * Sets the projection to the ortho matrix
 */
public void gluOrtho2D(GL10 gl){
    gl.glMatrixMode( GL10.GL_PROJECTION );
    gl.glLoadIdentity();
    GLU.gluOrtho2D( gl, 0, getWidth(), 0, getHeight() );
}

/**
 * Sets the projection to the perspective matrix
 */
public void gluPerspective(GL10 gl){
    gl.glMatrixMode( GL10.GL_PROJECTION );
    gl.glLoadIdentity();
    float aspectRatio = (float)getWidth() / getHeight();
    GLU.gluPerspective( gl, 67, aspectRatio, 1, 100 );
}

/**
 * Sets the projection to the perspective matrix
 */
public void gluPerspective(GL10 gl, float near, float far){
    gl.glMatrixMode( GL10.GL_PROJECTION );
    gl.glLoadIdentity();
    float aspectRatio = (float)getWidth() / getHeight();
    GLU.gluPerspective( gl, 67, aspectRatio, near, far );
}

/**
 * Sets the projection to the model view matrix
 */
public void gluLookAt(GL10 gl, 
        float positionX, float positionY, float positionZ,
        float zentrumX, float zentrumY, float zentrumZ,
        float upX, float upY, float upZ ){

    gl.glMatrixMode( GL10.GL_MODELVIEW );
    gl.glLoadIdentity();
    GLU.gluLookAt( gl,positionX, positionY, positionZ, zentrumX, zentrumY, zentrumZ, upX, upY, upZ );
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 使用 openGL ES 绘制 3D 然后 2D 的相关文章

随机推荐

  • ViewModel - 在运行时观察 LiveData 时更改方法参数?

    我正在尝试弄清楚 MVVM 这对我来说非常新 并且我弄清楚了如何使用 Room 和 ViewModel 观察 LiveData 现在我面临一个问题 我有一个需要参数的 Room 查询 这就是我开始观察 MainActivity 中 onCr
  • 使用 CSS 控制
     中的制表符空间?                
                

    是否可以指定制表符空间占用多少像素等 pre 使用CSS 例如 假设我有一段代码出现在 pre 在网页上 function Image this Write function document write this ToString ret
  • 如何使用 MVC Azure AD 身份验证从 AD 获取角色?

    我设置了 MVC 4 应用程序 并添加了针对我们的 Azure AD 服务器的身份验证 如下所述 http msdn microsoft com en us library windowsazure dn151790 aspx http m
  • 如何创建真实的 .scn 文件?

    查看苹果示例 AR 应用程序 有许多看起来很逼真的物体 杯子 蜡烛等 然而 在 Xcode 上使用场景工具包编辑器时 很明显这仅允许您创建基本对象 我的问题是 什么软件 文件可以用来创建现实的scn物体 我确信有软件可以让您创建 3D 模型
  • Vue - 是否可以动态设置 html 元素的样式?

    简洁版本 In the data 在我的应用程序中 我定义了某些颜色 我想要html 元素的背景为这些颜色之一 基于switch陈述 长版 In the data 我有以下代码 data return item color1 color2
  • 使用 Shibboleth 进行单点登录

    我必须使用以下方法在我的 NET 3 5 项目中实现单点登录希博莱斯 详细要求是这样的 1 我使用 NET 3 5 开发了一个名为 abc com 的Web应用程序 2 有一些第三方应用程序将从 abc com 启动 3 如果我已经登录到
  • React 错误边界无法捕获错误

    我创建了我的反应应用程序vite在那里我有我的自定义反应错误边界组件从组件包装 事情是它无法捕获错误 我调试我的错误组件 但它无法接收任何值getDerivedStateFromError not componentDidCatch 这是我
  • python 修改方法内的字典

    是否可以在不将字典作为参数传递的情况下修改函数内字典的值 我不想返回字典 而只想修改它的值 这是可能的 但不一定是可取的 我无法想象为什么你不想传递或返回字典 如果你只是不想返回字典 但可以传递它 你可以修改它以反映在原始字典而不必返回它
  • 执行 Espresso 测试时更改区域设置

    我正在创建一个简单的布局 应该支持阿拉伯语言和 RTL 布局 一切正常 现在我想编写一个 Espresso 测试并断言它是否实际显示翻译后的文本 例如对于阿拉伯语 它应该显示阿拉伯语 strings xml 中的文本 到目前为止 我尝试了以
  • golang解码嵌套结构中的JSON请求并将其作为blob插入数据库

    我有一个嵌套结构 用于解码 JSON 请求 type Service struct ID string json id omitempty db id Name string json name db name Contract struc
  • Python随机播放列表不起作用[重复]

    这个问题在这里已经有答案了 我是Python新手 具有 C 背景的我很难理解这种语言的简单性 更不用说 IDLE 是如何工作的了 无论如何 我需要编写一个简单的函数 它接受一个列表并返回一个新列表 其中的元素已打乱顺序 这就是我到目前为止所
  • 如何在 lwuit TextField 或组合框中添加日历

    我正在使用 lwuit 创建一个应用程序 我想在组合框中添加日历 请尽快给我一个想法 您的意思是要在组合框值的末尾添加日历组件的选定日期还是在文本框中显示选定的日期 如果是这样 那么下面的代码将在文本框中显示日历组件的选定日期 Button
  • 检查当前线程是否为主线程

    Objective C 有没有办法检查当前线程是否是主线程 我想做这样的事情 void someMethod if IS THIS MAIN THREAD NSLog ok this is main thread else NSLog do
  • Android Studio 0.5.3 - 为什么“Make Project”不再运行构建?

    自从我升级到 0 5 3 以来 Android Studio 中的 Make Project 没有为我构建 apk 文件 有谁知道我怎样才能做到这一点 我已将 buildToolsVersion 更新为 19 0 3 这是最新版本 每次 A
  • 错误:未找到默认活动,但已声明它

    我遇到过两次奇怪的情况 我的主模块中有清单 igs main
  • Scala 特性 mixin order 和 super call

    我有这个代码 trait base def msg Unit println base trait foo extends base abstract override def msg Unit super msg println foo
  • 将数据帧拆分为分组块

    我想将数据帧分割成块 我创建了一个函数 它能够将数据帧分割成相同大小的块 但是我无法弄清楚如何按组分割 数据帧的每个分割必须包含分组变量的所有实例 我希望能够灵活地确定可以包含多少个组 因为它们相对较小 示例数据框 A 1 A 2 B 3
  • 软键盘添加*和#键

    1 问题 我有一个EditText用户必须在其中输入USSD code Problem是 用于输入USSD用户必须切换到的代码符号键盘 两到三次 这会造成非常糟糕的用户体验 USSD 代码示例 345 77 333 25 123 678 等
  • 有没有办法在(GitHub 风格的)Markdown 中为文本添加上划线?

    我想在 Markdown 文件中为某些文本添加上划线 这可能吗 它可以使用波形符 就像粗体 斜体等一样 下面是来自亚搏体育appGitLab文档 https guides github com features mastering mark
  • Android - 使用 openGL ES 绘制 3D 然后 2D

    在 openGL ES 中绘制一些 3D 内容后 如何绘制 HUD 文本或位图 我试过这个 private void switchTo2D GL10 gl gl glDisable GL10 GL DEPTH TEST gl glMatri